当前位置:主页   - 电脑 - 数据库
ROLLBACK相关的统计信息
来源:设计前沿收集   作者:未知   更新时间:2008-12-20
收藏此页】    【字号    】    【打印】    【关闭

  与ROLLBACK相关的统计信息有如下几个,我们关注什么情况下这些统计信息会增加。

  SQL> select s.name,m.value from v$mystat m,v$statname s where s.statistic#=m.statistic# and name like '%rollback%';

  NAME VALUE

  -------------------------------------------------- ---------

  user rollbacks 0

  transaction tables consistent read rollbacks 0

  rollbacks only - consistent read gets 0

  cleanouts and rollbacks - consistent read gets 0

  rollback changes - undo records applied 0

  transaction rollbacks 0

  初始情况下:

  SQL> select s.name,m.value from v$mystat m,v$statname s where s.statistic#=m.statistic# and name like '%rollback%';

  NAME VALUE

  -------------------------------------------------- ---------

  user rollbacks 0

  transaction tables consistent read rollbacks 0

  rollbacks only - consistent read gets 0

  cleanouts and rollbacks - consistent read gets 0

  rollback changes - undo records applied 0

  transaction rollbacks 0

  6 rows selected.

  未作任何改动,执行rollback

  SQL> rollback;

  Rollback complete.

  SQL> select s.name,m.value from v$mystat m,v$statname s where s.statistic#=m.statistic# and name like '%rollback%';

  NAME VALUE

  ----------------------------------------------------------------

  user rollbacks 1

  transaction tables consistent read rollbacks 0

  rollbacks only - consistent read gets 0

  cleanouts and rollbacks - consistent read gets 0

  rollback changes - undo records applied 0

  transaction rollbacks 0

  6 rows selected.

  统计信息user rollbacks 增加,即使没有做任何改动(没有什么可以rollback的),user rollbacks也会增加。

  SQL> connect /

  SQL> select s.name,m.value from v$mystat m,v$statname s where s.statistic#=m.statistic# and upper(name) like '%ROLLBACK%';

  NAME VALUE

  ----------------------------------------------------------------

  user rollbacks 0

  transaction tables consistent read rollbacks 0

  rollbacks only - consistent read gets 0

  cleanouts and rollbacks - consistent read gets 0

  rollback changes - undo records applied 0

  transaction rollbacks 0

  6 rows selected.

  插入一行纪录,然后回滚

  SQL> insert into t values(1);

  1 row created.

  SQL> rollback;

  Rollback complete.

  SQL> select s.name,m.value from v$mystat m,v$statname s where s.statistic#=m.statistic# and upper(name) like '%ROLLBACK%';

  NAME VALUE

  ---------------------------------------------------------------- -

  user rollbacks 1

  transaction tables consistent read rollbacks 0

  rollbacks only - consistent read gets 0

  cleanouts and rollbacks - consistent read gets 0

  rollback changes - undo records applied 2

  transaction rollbacks 1

  6 rows selected.

  除了user rollbacks增加外,当有活动的事务回滚时候,因为有实际工作可做,transaction rollbacks增加,且因为回滚记录的应用,rollback changes - undo records applied增加。

  SQL> insert into t values(1);

  1 row created.

  SQL> insert into t values(1);

  1 row created.

  SQL> commit;

  commit

  *

  ERROR at line 1:

  ORA-02091: transaction rolled back

  ORA-00001: unique constraint (ORACLE.SYS_C0020256) violated

  SQL> select s.name,m.value from v$mystat m,v$statname s where s.statistic#=m.statistic# and upper(name) like '%ROLLBACK%';

  NAME VALUE

  ---------------------------------------------------------------- ----

  user rollbacks 1

  transaction tables consistent read rollbacks 0

  rollbacks only - consistent read gets 0

  cleanouts and rollbacks - consistent read gets 0

  rollback changes - undo records applied 8

  transaction rollbacks 2

  6 rows selected.

  如上,因为发生unique constraint violated错误,Statement自动回滚(到默认的savepoint),有回滚工作可做,则transaction rollbacks 和rollback changes - undo records applied都增加。

  SQL> select * from t;

  no rows selected

  SQL> rollback;

  Rollback complete.

  SQL> select s.name,m.value from v$mystat m,v$statname s where s.statistic#=m.statistic# and upper(name) like '%ROLLBACK%';

  NAME VALUE

  ---------------------------------------------------------------- -

  user rollbacks 2

  transaction tables consistent read rollbacks 0

  rollbacks only - consistent read gets 0

  cleanouts and rollbacks - consistent read gets 0

  rollback changes - undo records applied 8

  transaction rollbacks 2

  6 rows selected.

  因为Statement已经回滚,没有实际的回滚工作量,因此只有user rollbacks增加。

  SQL> connect / 如下 测试因为Write consistent导致的mini-rollback

  SQL> select s.name,m.value from v$mystat m,v$statname s where s.statistic#=m.sta

  NAME VALUE

  --------------------------------------------------------------

  user rollbacks 0

  transaction tables consistent read rollbacks 0

  rollbacks only - consistent read gets 0

  cleanouts and rollbacks - consistent read gets 0

  rollback changes - undo records applied 0

  transaction rollbacks 0

  6 rows selected.

  SQL> update t set x=x*10 where x in (1,5,10);

  2 rows updated. 之前该session被另外的一个session在更新x=5处被阻塞;

  SQL> select s.name,m.value from v$mystat m,v$statname s where s.statistic#=m.statistic# and upper(name) like '%ROLLBACK%';

  NAME VALUE

  ---------------------------------------------------------------- -

  user rollbacks 0

  transaction tables consistent read rollbacks 0

  rollbacks only - consistent read gets 0

  cleanouts and rollbacks - consistent read gets 1

  rollback changes - undo records applied 3

  transaction rollbacks 0

  6 rows selected.

  如上的mini-rollback 会导致cleanouts and rollbacks - consistent read gets 增加且带来回滚(rollback changes - undo records applied)。

  结论是:

  1) 'user rollbacks' 当用户执行rollback的时候每次递增,而不管是否有实际的回滚工作量要做。

  2) 'transaction rollbacks'在如下3种情况下会递增

  当用户执行 'rollback' 回滚了之前的DML操作,因此有实际的回滚工作要做。

  进程中断 terminated or killed, PMON 代替执行回滚。

  DML 发生错误,如. unique constraint violation,执行Statement级别的语句回滚

  3) 'user rollbacks' 和'transaction rollbacks' 不会因为"write consistency" mini-rollback 的原因增加。

  4)mini-rollback会导致cleanouts and rollbacks - consistent read gets增加。当发生mini-rollback的时候,update/delete语句会释放掉所有已更新的block的锁(cleanout),然后再以select for update(v$lock.mode=2) 先“悲观”锁住要更新的纪录,在执行update/delete.(v$lock.mode=3)


其它资源
来源声明

版权与免责声明
1、本站所发布的文章仅供技术交流参考,本站不主张将其做为决策的依据,浏览者可自愿选择采信与否,本站不对因采信这些信息所产生的任何问题负责。
2、本站部分文章来源于网络,其版权为原权利人所有。由于来源之故,有的文章未能获得作者姓名,署“未知”或“佚名”。对于这些文章,有知悉作者姓名的请告知本站,以便及时署名。如果作者要求删除,我们将予以删除。除此之外本站不再承担其它责任。
3、本站部分文章来源于本站原创,本站拥有所有权利。
4、如对本站发布的信息有异议,请联系我们,经本站确认后,将在三个工作日内做出修改或删除处理。
请参阅权责声明