天萃荷净
ORACLE 启用与禁用事务的并行恢复,ORACLE 从8i开始,引进了fast start parallel rollback机制来进行事务恢复,SMON使用并行的方式来进行事务的恢复,可以通过参数FAST_START_PARALLEL_ROLLBACK来控制是否启用和并行的进程个数。
1.可以取下面的三个值
FALSE – 禁用并行恢复事务,使用旧的串行的方式。
LOW – 限制最大的并行度是2 * CPU_COUNT
HIGH -限制最大的并行度是4 * CPU_COUNT
但是并行恢复常常出现问题,如SMON进程使用CPU占用100%,还有就是恢复相当的慢,pq进程之前互相干扰,所以有些时间我们不得不禁用并行恢复机制。
在串行恢复机制下,我们常常增加_CLEANUP_ROLLBACK_ENTRIES值如400,每一次回滚400个entries,加速恢复的速度。
可能通过v$fast_start_server视图来查看并行的进程的状态,如果出现了idle进程,那么我们需要禁用并行恢复机制。
oracleplus.net>@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
2.暂停SMON进行事务恢复
oracleplus.net>oradebug setospid 20396
Oracle pid: 8, Unix process pid: 20396, image: oracle@rhel4 (SMON)
oracleplus.net>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掉相当的进程
3.下面是改回串行
oracleplus.net>
alter system set fast_start_parallel_rollback=false;
System altered.
oracleplus.net>oradebug setospid 20396
Oracle pid: 8, Unix process pid: 20396, image: oracle@rhel4 (SMON)
oracleplus.net>oradebug event 10513 trace name context off;
Statement processed.
oracleplus.net>oradebug eventdump process
Statement processed.
oracleplus.net>@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没有唤醒,可以通过下面的命令来唤醒
oracleplus.net>select pid,spid from v$process where spid=20396;
PID SPID
---------- ------------
8 20396
oracleplus.net>oradebug wakeup 8;
Statement processed.
4.下面是计算恢复还需要多长的时间
oracleplus.net>@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.
本文固定链接: http://www.htz.pw/2013/05/08/oracle-%e5%90%af%e7%94%a8%e4%b8%8e%e7%a6%81%e7%94%a8%e4%ba%8b%e5%8a%a1%e7%9a%84%e5%b9%b6%e8%a1%8c%e6%81%a2%e5%a4%8d.html | 认真就输
--------------------------------------ORACLE-DBA----------------------------------------
最权威、专业的Oracle案例资源汇总之【学习笔记】Oracle启用与禁用事务的并行恢复的详细案例
本文由大师惜分飞原创分享,网址:http://www.oracleplus.net/arch/993.html