学无止境
分类: Oracle
2010-10-11 09:47:59
单独的一句commit不会记录成一个事务,而单独的rollback会记录成一个事务,并且该事务还是一个回滚事务。
用2个简单的存储过程,结合statspack以及v$sysstat的统计信息来查看这一现象。
分别做2个statspack报告
先看1000w次的commit:
begin
for i in 1..10000000 loop
commit;
end loop;
end;
/
在此期间内的statspack报告显示平均每秒事务为0:
Transactions: 0.00
v$sysstat视图中统计的user commits基本没有变化。
再看1000w次的rollback:
begin
for i in 1..10000000 loop
rollback;
end loop;
end;
/
在此期间内的statspack报告显示平均每秒事务为7w多:
Transactions: 76,515.16
v$sysstat视图中统计的user rollbacks有明显变化,增加了1000w。
此外,在statspack报告中的每个事务的回滚比率达到100%,意味着,在此期间的所有事务都回滚了。
Rollback per transaction %: 100.00
select STATISTIC#,NAME,VALUE from v$sysstat where statistic# in (4,5);
STATISTIC# NAME VALUE
---------- ----------------- ----------
4 user commits 191
5 user rollbacks 10200000