oracle加快回滚,调整oracle回滚的速度

回滚的速度快慢通过参数 fast_start_parallel_rollback

来实现,此参数可以动态调整

关于fast_start_parallel_rollback参数,此参数决定了回滚启动的并行次数,在繁忙的系统或者IO性能较差的系统,如果出现大量回滚操作,会显著影响系统系统,可以通过调整此参数来降低影响。官方文档的定义如下

FAST_START_PARALLEL_ROLLBACK specifies the degree of parallelism used when recovering terminated transactions. Terminated transactions are transactions that are active before a system failure. If a system fails when there are uncommitted parallel DML or DDL transactions, then you can speed up transaction recovery during startup by using this parameter.

Values:

FALSE

Parallel rollback is disabled

LOW

Limits the maximum degree of parallelism to 2 * CPU_COUNT

HIGH

Limits the maximum degree of parallelism to 4 * CPU_COUNT

If you change the value of this parameter, then transaction recovery will be stopped and restarted with the new implied degree of parallelism.

回滚过程中,回滚的进度可以通过视图 V$FAST_START_TRANSACTIONS

来确定

SQL> select usn, state, undoblocksdone, undoblockstotal, CPUTIME, pid,xid, rcvservers from v$fast_start_transactions;

USN STATE            UNDOBLOCKSDONE UNDOBLOCKSTOTAL    CPUTIME        PID XID              RCVSERVERS

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

454 RECOVERED                110143          110143        210            01C600210027E0D9          1

468 RECOVERED                   430             430         17            01D40000001F3A36        128

USN:事务对应的undo段

STATE:事务的状态,可选的值为(BE RECOVERED, RECOVERED, or RECOVERING)

UNDOBLOCKSDONE:已经完成的undo块

UNDOBLOCKSTOTAL:总的undo数据块

CPUTIME:已经回滚的时间,单位是秒

RCVSERVERS:回滚的并行进程数

补充,查询回滚时间更好的脚本

sys@MS4ADB3(dtydb5)> select undoblockstotal "Total", undoblocksdone "Done", undoblockstotal-undoblocksdone

2 "ToDo",decode(cputime,0,'unknown',to_char(sysdate+(((undoblockstotal-undoblocksdone)

3 / (undoblocksdone / cputime)) / 86400),'yyyy-mm-dd hh24:mi:ss'))

4 "Estimated time to complete",to_char(sysdate,'yyyy-mm-dd hh24:mi:ss')

5 from v$fast_start_transactions;

Total MB Done ToDo Estimated time to complete TO_CHAR(SYSDATE,'YYYY-MM-DDHH24:MI:SS'

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

36,767 36767 0 2014-03-19 16:59:19 2014-03-19 16:59:19

7,209 7209 0 2014-03-19 16:59:19 2014-03-19 16:59:19

3,428 3428 0 2014-03-19 16:59:19 2014-03-19 16:59:19

34,346 1604 32742 2014-03-19 17:25:31 2014-03-19 16:59:19

下面是一次大量wait for a undo record等待事件的处理过程

1,某用户使用plsql执行某 insert操作异常,导致表空间不断增长,于是手工kill该回滚停掉,kill后大量wait for a undo record,大约100多个

2,查询v$fast_start_transactions视图,由于fast_start_parallel_rollback参数设置为HIGH,且cpu为32个,因此并行进程为32×3=128个

SQL> select usn, state, undoblocksdone, undoblockstotal, CPUTIME, pid,xid, rcvservers from v$fast_start_transactions;

USN STATE UNDOBLOCKSDONE UNDOBLOCKSTOTAL CPUTIME PID XIDRCVSERVERS

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

454 RECOVERING 26922 464160 1033744 01C600210027E0D9 128

468 RECOVERED 430 430 17 01D40000001F3A36 128

SQL> SHOW parameter ROLLBACK

NAME TYPE VALUE

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

fast_start_parallel_rollback string HIGH

SQL> show parameter cpu

NAME TYPE VALUE

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

cpu_countinteger 32

3,由于估计还有103/(26922/464160)=30分钟才能执行完,为了降低对系统性能的影响,对相关表进行了truncate(业务表中的数据不再需要)

SQL> truncate table user1.JT_t1_20140318;

4,truncate时,短时间内出现了row cache lock异常等待,大约几十秒之后,恢复正常,truncat操作能结束undo回滚操作吗?

alter system set fast_start_parallel_rollback= FALSE;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值