xzh2000的博客 本人提供杭州地区Oracle现场技术支持服务,包括性能调整、DataGuard、RAC等。
07 08, 2006
statspack报告中Rollback per trans过高怎么办
作者 xzh2000 18:22 | Permalink 静态链接网址 | Comments 最新回复 (0) | Trackback 引用 (0) | 技术交流

olivenan网友在itpub上提问,statspack报表中的Rollback per transaction %达到93.97%,对系统是否有影响,偶以前也曾经也遇到过这个问题,现将这个问题做个解答,希望对这个问题比较困惑的同学有所帮所,实际情况就是:statsapck报表中的rollback perl transaction%比例过高对系统没有什么不利影响。。。


如果想对这个问题有所理解,必须对以下两个问题的概念比较清楚:
1 了解user rollback与transaction rollback的区别
2 了解Rollback per transaction%的计算公式

想清楚地理解第1个问题,请看biti是如何说明的;第2个问题根据statspack的sql代码很容易知道它们是如何计算的.在$ORACLE_HOME/rdbms/admin/sprepins.sql中可找到代码:

1 计算rollback per transaction%的公式:
Rollback per transaction %:' dscr, round(100*:urol/:tran,2) pctval
2 计算:urol与:tran的公式:
在这里大家注意:ucal与:urol这两个绑定变量,查$ORACLE_HOME/rdbms/admin/spcpkg.sql中可以找到代码:
begin /* main procedure body of STAT_CHANGES */
lhtr := LIBRARYCACHE_HITRATIO;
bfwt := BUFFER_WAITS;
lhr := LATCH_HITRATIO;
chng := SYSDIF('db block changes');
ucal := SYSDIF('user calls');
urol := SYSDIF('user rollbacks');
ucom := SYSDIF('user commits');
tran := ucom + urol;
实际上tran就是tran:=user commits+user rollbacks,那最终的Rollback per transaction计算公式就应该是:
Rollback per transaction% = user rollback/(user rollback+user commit);

其实这是statspack报表选取的计算方式用误,statspack report中的回滚率是通过user rollbacks/(user rollbacks+user commits),如果用transaction rollbacks/(transaction rollbacks+user commits)就没错啦,它这样计算,肯定是并不想区分user rollbacks与transaction rollbacks,但实际在某些环境下,user rollbacks与transaction rollbacks确实存在较大的差异...

Comments
博客日历
« 二月 2010 »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
搜索
最新发表
文章分类
文章归档
网站链接
新闻聚合