Oracle 查詢事務數

it_newbalance發表於2013-02-03
查詢“每天事務數
 
首先想到的是v$transaction, 確認這個思路是否正確:
執行下面語句:
SQL> select * from v$transaction;
no rows selected
SQL>
發現居然為空,why? 這時恍然大悟,v$transaction記錄的是當前事務,下面來驗證下:
SQL> conn test/test
sE9H5[O;|$E24558279Connected.ITPUB個人空間u3da4T%}B
SQL>
x1bVeljI$r24558279SQL>
i+ubQ.e*\Ks&k24558279SQL> insert into ttt values('1','2','3','4','5');
1 row created.
SQL>
我們先不提交,這時看看v$transaction表的情況:
SQL> select XIDUSN,XIDSLOT,XIDSQN,STATUS from v$transaction;
XIDUSN XIDSLOT XIDSQN STATUS
6w1n L\?#J`24558279 ---------- ---------- ---------- ----------------
u8E:@CRM/~#?x(|7E24558279 10 17 22579 ACTIVE
SQL>
發現已經 有了一個事務記錄,這時我們commit
SQL> commit;
Commit complete.
SQL>
再來看看v$transaction表:
SQL> select XIDUSN,XIDSLOT,XIDSQN,STATUS from v$transaction;
no rows selected
SQL>
好,已經為空,正面v$transaction檢視確實是記錄 的是當前未提交事務
這個方法行不通,那我們還有什麼好辦法嗯?
這時,如果屬性awr或者STATSPACK的朋友會說,報告裡不是有個每秒事務數嗎?
不錯,確實有每秒事務數,可是我要查詢的是每天的事務數,怎麼辦?
好,既然沒秒的知道了,那每天的我*60*60*24 不就是每天的嗎?
確實如此,我們分析一份報告看看:
Transactions:916.9
我們看這個每秒的事務數是916.9 ,那麼916.9*60*60*24=79220160,每天的事務數是79220160,到此我們介紹了查詢每秒事務數的方法和查詢每天事務數的方法。
還有沒有第二種方法呢?
答案是必須的。
還是awr/STATSPACK報告,既然我們要查詢的是事務數,那麼事務數和什麼有關係呢?當然是commit啦,如果我們知道了commit數,那麼也就是變向知道了事務數,所以第二種方法還是在awr/STATSPACK報告裡,這時相信有朋友已經想到了,不錯和你想的一樣就是
user commits827,280916.901.00
這時大家該有疑問了?
上面說每天79220160次 ,怎麼現在變成827,280次了,不錯,問的好!我前面沒說這份報告取的是一天的,實際這份報告取的是15分鐘零4秒的,那我們來算下:
828877.6 那為什麼會多呢?因為916.9是四捨五入的。
好第二種方法介紹完
我就不賣官司了,下面給大家介紹第三種方法
我們用sql實現:
首先我們看看查詢每秒事務數的sql寫法:
SQL> col METRIC_UNIT for a30
lb(I.O4V#Om6F24558279SQL> select instance_number,
"A$Qm"_!sq?24558279 2 metric_unit,ITPUB個人空間r.z/|-Qg'{#\:swN
3 trunc(begin_time) time,
Ofj-k F24558279 4 round(avg(average), 2) average
%BU~Vlu24558279 5 from DBA_HIST_SYSMETRIC_SUMMARY
1Cfbo,A&m3b:AJ24558279 6 where metric_unit = 'Transactions Per Second'
!Zn6YC.g Z/i/k24558279 7 and begin_time >=ITPUB個人空間7@/eujaEy@#\
8 to_date('2013-01-21 00:00:00', 'yyyy-mm-dd hh24:mi:ss')
up:ZF h8SlP)m2Yx24558279 9 and begin_time < to_date('2013-01-22 00:00:00', 'yyyy-mm-dd hh24:mi:ss')ITPUB個人空間Fb{|5n},U
10 group by instance_number, metric_unit, trunc(begin_time)
nJ.gf"n pXT&q24558279 11 order by instance_number;
INSTANCE_NUMBER METRIC_UNIT TIME AVERAGE
2G-['a(S4J*Py&xO24558279--------------- ------------------------------ ------------ ----------ITPUB個人空間:V|&aQc#hMZ.a~xZ
1 Transactions Per Second 21-JAN-13 .17
測試環境空庫,我們發現每秒事務數很少
下面是查詢每天事務數:
SQL> select instance_number,
D d2r0\^io24558279 2 metric_unit,
x@Ra%C9i!A@24558279 3 trunc(begin_time) time,ITPUB個人空間4f0ub%o!K9w/ie3G
4 avg(average)*60*60*24 "Transactions Per Day"
c&H4p2yDK&^4e24558279 5 from DBA_HIST_SYSMETRIC_SUMMARY
-AV~od-Dq3?_24558279 6 where metric_unit = 'Transactions Per Second'
EHH P!L7BU24558279 7 and begin_time >=
.Yz}.}p8PaEY24558279 8 to_date('2013-01-21 00:00:00', 'yyyy-mm-dd hh24:mi:ss')
3~I-`$V%j @t2|"E24558279 9 and begin_time < to_date('2013-01-22 00:00:00', 'yyyy-mm-dd hh24:mi:ss')ITPUB個人空間7y.J5x(KK E&i#a&A8b
10 group by instance_number, metric_unit, trunc(begin_time)
Lc6~I"P24558279 11 order by instance_number;
INSTANCE_NUMBER METRIC_UNIT TIME Transactions Per Day
4NbXT'~6d24558279--------------- ------------------------------ ------------ --------------------
(?KW-G9v+GN2H24558279 1 Transactions Per Second 21-JAN-13 14727.5308
是否還有第四種方法呢?
不錯確實有,請看官方文件:
4.52.37 Number of Transactions (per second)
下面我把官方文件貼出來,大家共同學習:

DeltaCommits + DeltaRollbacks where:

  • DeltaCommits: difference of 'select value from v$sysstat where name='user commits'' between sample end and start

  • DeltaRollbacks: difference of 'select value from v$sysstat where name='user rollbacks'' between sample end and start

在2個時間段分別執行上面語句,把2個結果相減即可得出這段時間內的事務數。

根據這個方法,我寫出查詢某個使用者的時間段內事務數的方法:

select s.USERNAME,sum(se.VALUE) "session transaction number",sum(sy.VALUE) " database transaction number" from v$session s,v$sesstat se,v$sysstat sy
6g8F.V^Le.r\ _2G24558279where s.sid=se.SID and se.STATISTIC#=sy.STATISTIC#
u1eJ1e%T24558279and sy.NAME='user commits'
5j#g'@.~ nQ+m24558279and s.USERNAME=upper('&username')ITPUB個人空間rbk6nYx@"|$S0B+s
group by s.USERNAME;

使用方法和上面的一樣,需要在2個時間段分別執行改指令碼,把執行結果相減,即可得出該時間段內的事務數

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24558279/viewspace-753851/,如需轉載,請註明出處,否則將追究法律責任。

相關文章