« Oracle HowTo:判断一个死事务的恢复进度 | Blog首页 | Oracle Database 11g中国Launch大会预告 »
如何加快SMON的恢复进度?
作者:eygle |【转载时请务必以超链接形式标明文章原始出处和作者信息及本声明】链接:http://www.eygle.com/archives/2007/09/howto_speed_up_smon_recovery.html
昨天提到的事务恢复问题,有人问是否真要回滚几天那么久?
答案是肯定的,可能比估计的还要久,SMON的恢复持续但是缓慢。
目前的恢复进度进行到如下状态:
SQL> select KTUXEUSN,KTUXESLT,KTUXESQN,KTUXECFL,KTUXESIZ,sysdate
2 from x$ktuxe where KTUXEUSN=10 and KTUXESLT=39;
KTUXEUSN KTUXESLT KTUXESQN KTUXECFL KTUXESIZ SYSDATE
---------- ---------- ---------- --------------- ---------- -------------------
10 39 2567412 DEAD 559291 2007-09-12 10:06:45
SQL> select KTUXEUSN,KTUXESLT,KTUXESQN,KTUXECFL,KTUXESIZ,sysdate
2 from x$ktuxe where KTUXEUSN=10 and KTUXESLT=39;
KTUXEUSN KTUXESLT KTUXESQN KTUXECFL KTUXESIZ SYSDATE
---------- ---------- ---------- --------------- ---------- -------------------
10 39 2567412 DEAD 559260 2007-09-12 10:06:53
SQL> select KTUXEUSN,KTUXESLT,KTUXESQN,KTUXECFL,KTUXESIZ,sysdate
2 from x$ktuxe where KTUXEUSN=10 and KTUXESLT=39;
KTUXEUSN KTUXESLT KTUXESQN KTUXECFL KTUXESIZ SYSDATE
---------- ---------- ---------- --------------- ---------- -------------------
10 39 2567412 DEAD 559089 2007-09-12 10:07:24
按照估算,还要进行大约1天多的恢复。
那么是否有办法加速SMON的恢复进度呢?
答案应该是否定的,我们是没有办法更改SMON的恢复进程的。
如果谁有好的建议,欢迎帮忙提出!
-The End-
By eygle on 2007-09-12 11:05 | Comments (11) | Posted to Internal | Edit |Pageviews:
留言 (11)
我记得能否通过修改FAST_START_PARALLEL_ROLLBACK来加快速度?比方说设置为HIGH
还有不知道是否跟这个参数RECOVERY_PARALLELISM有关系?多加几个进程应该会加快恢复速度吧
当然都是在多CPU的情况下才有用吧
Posted by: bluemoon0083 at September 12, 2007 1:59 PM
就是因为并行恢复有问题才改为串行恢复的,并行恢复更加慢!
Posted by: eygle at September 12, 2007 2:13 PM
试试手工唤醒SMON:
select p.pid from v$bgprocess b, v$process p where b.name = 'SMON' and p.addr = b.paddr;
oradebug wakeup smon的PID
Posted by: adam at September 12, 2007 3:38 PM
谢谢adam,SMON没有"睡着"啊,恢复一直在进行。
从并行恢复向串行恢复时已经唤醒过SMON了。
Posted by: eygle at September 12, 2007 4:02 PM
eygle能解释一下为什么串行恢复而不用并行恢复吗?
嘿嘿,其实如果是我,我也会用FAST_START_PARALLEL_ROLLBACK=high加快恢复,如果是rac环境,也关闭其他的几个节点。
Posted by: 小荷 at September 12, 2007 9:02 PM
你测试过、或者说经历过FAST_START_PARALLEL_ROLLBACK恢复么?
我遇到过几次,都是并行恢复有问题。
Posted by: eygle at September 14, 2007 5:31 PM
之前遇到过使用FAST_START_PARALLEL_ROLLBACK的情况,当时是表无法做truncate,将FAST_START_PARALLEL_ROLLBACK设置为high后,关闭2个节点剩下一个节点,大约1个半小时恢复了正常,期间没遇到什么报错。
eygle说的有问题,有什么报错信息吗?
Posted by: 小荷 at September 17, 2007 10:26 AM
你要监控一下并行恢复每秒能够恢复多少个块,这样才知道并行恢复的速度。
Posted by: eygle at September 17, 2007 11:06 AM
对smon恢复,在回滚时涉及到大量的索引块时,此时并行恢复往往会比串行恢复慢。
其实是用并行恢复,还是用串行恢复,只需要在并行恢复时,查看v$session_wait看看有没有资源冲突即可,有的话,就改成串行,往往速度很快很多。
Posted by: logzgh at September 17, 2007 2:18 PM
set _cleanup_rollback_entries = 400 or even higher
Posted by: kamus at December 30, 2007 11:03 PM
_cleanup_rollback_entries 是一个选择,不过这是个静态参数,需要重启数据库,很多时候并不适用。
Posted by: eygle at December 30, 2007 11:36 PM
