oracle事务数统计,Oracle 查询事务数
查詢“的”
首先想到的是v$transaction, 確認(rèn)這個(gè)思路是否正確:
執(zhí)行下面語(yǔ)句:
SQL> select * from v$transaction;
no rows selected
SQL>
發(fā)現(xiàn)居然為空,why? 這時(shí)恍然大悟,v$transaction記錄的是當(dāng)前事務(wù),下面來(lái)驗(yàn)證下:
SQL> conn test/test
sE9H5[O;|$E24558279Connected.ITPUB個(gè)人空間u3da4T%}B
SQL>
x1bVeljI$r24558279SQL>
i+ubQ.e*\Ks&k24558279SQL> insert into ttt values('1','2','3','4','5');
1 row created.
SQL>
我們先不提交,這時(shí)看看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>
發(fā)現(xiàn)已經(jīng) 有了一個(gè)事務(wù)記錄,這時(shí)我們commit
SQL> commit;
Commit complete.
SQL>
再來(lái)看看v$transaction表:
SQL> select XIDUSN,XIDSLOT,XIDSQN,STATUS from v$transaction;
no rows selected
SQL>
好,已經(jīng)為空,正面v$transaction視圖確實(shí)是記錄 的是當(dāng)前未提交事務(wù)
這個(gè)方法行不通,那我們還有什么好辦法嗯?
這時(shí),如果屬性或者STATSPACK的朋友會(huì)說(shuō),報(bào)告里不是有個(gè)事務(wù)數(shù)嗎?
不錯(cuò),確實(shí)有每秒事務(wù)數(shù),可是我要查詢的是每天的事務(wù)數(shù),怎么辦?
好,既然沒(méi)秒的知道了,那每天的我*60*60*24 不就是每天的嗎?
確實(shí)如此,我們分析一份報(bào)告看看:
Transactions:916.9
我們看這個(gè)每秒的事務(wù)數(shù)是916.9 ,那么916.9*60*60*24=79220160,每天的事務(wù)數(shù)是79220160,到此我們介紹了查詢每秒事務(wù)數(shù)的方法和查詢每天事務(wù)數(shù)的方法。
還有沒(méi)有第二種方法呢?
答案是必須的。
還是awr/STATSPACK報(bào)告,既然我們要查詢的是事務(wù)數(shù),那么事務(wù)數(shù)和什么有關(guān)系呢?當(dāng)然是commit啦,如果我們知道了commit數(shù),那么也就是變向知道了事務(wù)數(shù),所以第二種方法還是在awr/STATSPACK報(bào)告里,這時(shí)相信有朋友已經(jīng)想到了,不錯(cuò)和你想的一樣就是
user commits827,280916.901.00
這時(shí)大家該有疑問(wèn)了?
上面說(shuō)每天79220160次 ,怎么現(xiàn)在變成827,280次了,不錯(cuò),問(wèn)的好!我前面沒(méi)說(shuō)這份報(bào)告取的是一天的,實(shí)際這份報(bào)告取的是15分鐘零4秒的,那我們來(lái)算下:
828877.6 那為什么會(huì)多呢?因?yàn)?16.9是四舍五入的。
好第二種方法介紹完
我就不賣官司了,下面給大家介紹第三種方法
我們用實(shí)現(xiàn):
首先我們看看查詢每秒事務(wù)數(shù)的sql寫法:
SQL> col METRIC_UNIT for a30
lb(I.O4V#Om6F24558279SQL> select instance_number,
"A$Qm"_!sq?24558279 2 metric_unit,ITPUB個(gè)人空間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個(gè)人空間7@/eujaEy@#\
8 to_date('2013-01-21 00:00:00', 'yyyy-mm-dd hh24:mi:ss')
up:ZFh8SlP)m2Yx24558279 9 and begin_time < to_date('2013-01-22 00:00:00', 'yyyy-mm-dd hh24:mi:ss')ITPUB個(gè)人空間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個(gè)人空間:V|&aQc#hMZ.a~xZ
1 Transactions Per Second 21-JAN-13 .17
測(cè)試環(huán)境空庫(kù),我們發(fā)現(xiàn)每秒事務(wù)數(shù)很少
下面是查詢每天事務(wù)數(shù):
SQL> select instance_number,
Dd2r0\^io24558279 2 metric_unit,
x@Ra%C9i!A@24558279 3 trunc(begin_time) time,ITPUB個(gè)人空間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個(gè)人空間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
是否還有第四種方法呢?
不錯(cuò)確實(shí)有,請(qǐng)看官方文檔:
4.52.37 Number of Transactions (per second)
下面我把官方文檔貼出來(lái),大家共同學(xué)習(xí):
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個(gè)時(shí)間段分別執(zhí)行上面語(yǔ)句,把2個(gè)結(jié)果相減即可得出這段時(shí)間內(nèi)的事務(wù)數(shù)。
根據(jù)這個(gè)方法,我寫出查詢某個(gè)用戶的時(shí)間段內(nèi)事務(wù)數(shù)的方法:
select s.USERNAME,sum(se.VALUE) "session transaction number",sum(sy.VALUE) " 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個(gè)人空間rbk6nYx@"|$S0B+s
group by s.USERNAME;
使用方法和上面的一樣,需要在2個(gè)時(shí)間段分別運(yùn)行改腳本,把執(zhí)行結(jié)果相減,即可得出該時(shí)間段內(nèi)的事務(wù)數(shù)
總結(jié)
以上是生活随笔為你收集整理的oracle事务数统计,Oracle 查询事务数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 吹空调和风扇哪个更健康 绝大部分人没整明
- 下一篇: 高合汽车高管吐槽集度汽车:发布会“动画片