oracle事务数统计,Oracle 查询事务数

本文介绍了在Oracle数据库中查询每秒及每天事务数量的多种方法,包括使用v$transaction视图、STATSPACK/AWR报告和v$sysstat/v$session统计等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

查询“的”

首先想到的是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视图确实是记录 的是当前未提交事务

这个方法行不通,那我们还有什么好办法嗯?

这时,如果属性或者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> 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:ZFh8SlP)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,

Dd2r0\^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) " 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个时间段分别运行改脚本,把执行结果相减,即可得出该时间段内的事务数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值