当前位置: 首页 > BACKUP & RESTORE, BASIC > 正文

                  ORACLE 从8i开始,引进了fast start parallel rollback机制来进行事务恢复,SMON使用并行的方式来进行事务的恢复,可以通过参数FAST_START_PARALLEL_ROLLBACK来控制是否启用和并行的进程个数
可以取下面的三个值
    FALSE – 禁用并行恢复事务,使用旧的串行的方式。
    LOW – 限制最大的并行度是2 * CPU_COUNT
    HIGH -限制最大的并行度是4 * CPU_COUNT
但是并行恢复常常出现问题,如SMON进程使用CPU占用100%,还有就是恢复相当的慢,pq进程之前互相干扰,所以有些时间我们不得不禁用并行恢复机制。
在串行恢复机制下,我们常常增加_CLEANUP_ROLLBACK_ENTRIES值如400,每一次回滚400个entries,加速恢复的速度。
可能通过v$fast_start_server视图来查看并行的进程的状态,如果出现了idle进程,那么我们需要禁用并行恢复机制。

www.htz.pw >@tran_parallel_rollback.sql
Session altered.
       USN STATE                   PID OS_PID        USED_TIME(S)      Total       Done       ToDo Estimated time to c
---------- ---------------- ---------- ------------ ------------- ---------- ---------- ---------- -------------------
         5 RECOVERING               15 20968                  121     486100      73564     412536 2013-05-04 19:29:16
STATE       UNDOBLOCKSDONE        PID OS_PID       XID
----------- -------------- ---------- ------------ ----------------
RECOVERING           73567         15 20968        050023005B010000
RECOVERING               0         21 20970        050023005B010000
RECOVERING               0         23 20972        050023005B010000
RECOVERING               0         25 20974        050023005B010000

暂停SMON进行事务恢复

www.htz.pw >oradebug setospid 20396
Oracle pid: 8, Unix process pid: 20396, image: oracle@rhel4 (SMON)
www.htz.pw >oradebug event 10513 trace name context forever ,level 2;
Statement processed.

暂停并行恢复后,过几分钟后,我们从v$fast_start_server与v$fast_start_transactions中都找不到回退的进程的信息,但是我们这里可以通过x$ktuxe来查看相关的信息

select ADDR, KTUXEUSN, KTUXESLT, KTUXESQN, KTUXESIZ
  from x$ktuxe
 where KTUXECFL = 'DEAD'
ADDR               KTUXEUSN   KTUXESLT   KTUXESQN   KTUXESIZ
---------------- ---------- ---------- ---------- ----------
0000002A973B79B8          8          4        355     500116

        过10分钟左右,v$process也查不到并行恢复进程相当的信息,所以这里我们根本不需要去手动kill掉并行恢复相当进程,因为ORACLE会自己的kill掉相关的并行recover进程
如果不想等待,我们可以手动kill掉相当的进程

下面是改回串行

www.htz.pw >alter system set fast_start_parallel_rollback=false;
System altered.
www.htz.pw >oradebug setospid 20396
Oracle pid: 8, Unix process pid: 20396, image: oracle@rhel4 (SMON)
www.htz.pw >oradebug event 10513 trace name context off;
Statement processed.
www.htz.pw >oradebug eventdump process
Statement processed.
www.htz.pw >@tran_parallel_rollback.sql
Session altered.
       USN STATE                   PID OS_PID        USED_TIME(S)      Total       Done       ToDo Estimated time to c
---------- ---------------- ---------- ------------ ------------- ---------- ---------- ---------- -------------------
         5 RECOVERING                                         232     339650     176665     162985 2013-05-04 19:42:02
         8 RECOVERED                                          652     500116     500116          0 2013-05-04 19:38:28        
如果smon没有唤醒,可以通过下面的命令来唤醒
www.htz.pw >select pid,spid from v$process where spid=20396;
       PID SPID
---------- ------------
         8 20396
www.htz.pw >oradebug wakeup 8;
Statement processed.

下面是计算恢复还需要多长的时间

www.htz.pw >@tran_dead.sql
KTUXECFL                   COUNT(*)
------------------------ ----------
DEAD                              2
NONE                            576
ADDR               KTUXEUSN   KTUXESLT   KTUXESQN   KTUXESIZ
---------------- ---------- ---------- ---------- ----------
0000002A97494488          5         35        347     101071
0000002A974939E0          8          4        355          0
DO YOU COMPUTE RECOVERY TIME :DO ENTER ,NOT CTRL+C: 
Enter Search Usn (i.e. 3) : 5
Enter Search Slt (i.e. 4) : 35
PL/SQL procedure successfully completed.
time cost Hours:.02
PL/SQL procedure successfully completed.

ORACLE 启用与禁用事务的并行恢复:等您坐沙发呢!

发表评论

gravatar

? razz sad evil ! smile oops grin eek shock ??? cool lol mad twisted roll wink idea arrow neutral cry mrgreen

快捷键:Ctrl+Enter