当前位置:  数据库>oracle

调整Oracle回滚的速度

    来源: 互联网  发布时间:2017-06-02

    本文导语: 回滚的速度快慢通过参数来实现,此参数可以动态调整 关于fast_start_parallel_rollback参数,此参数决定了回滚启动的并行次数,在繁忙的系统或者IO性能较差的系统,如果出现大量回滚操作,会显著影响系统系统,可以通过调整此...

回滚的速度快慢通过参数来实现,此参数可以动态调整

关于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 XID              RCVSERVERS
---------- ---------------- -------------- --------------- ---------- ---------- ---------------- ----------
      454 RECOVERING                26922          464160        103      3744 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_count                            integer                          32

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

SQL> truncate table user1.JT_t1_20140318;

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

5,其实为了减少undo的影响,可以通过设置fast_start_parallel_rollback,可以在线修改,立即生效

alter system set fast_start_parallel_rollback= FALSE;

 


    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 在装linux前要进行bios调整,可是我在启动windows操作系统时候看不到del,也就是进入不了bios啊?那怎么才能调整启动顺序
  • 在SCO OperServer 5.0.5下如何调整端口的重用延时?
  • linux文件系统调整大小的方法(linux调整分区大小)
  • 如何调整内核频率到10000?
  • C# Winform 禁止用户调整ListView的列宽
  • 图片调整工具 SmillaEnlarge
  • Textarea自动高度调整的插件 jGrow
  • 在linux下面怎么样调整分辨率
  • 怎么样调整文本框的大小?在线等待!
  • 求助Linux终端调整屏幕位置的问题!谢谢
  • framebuffer驱动 三星6410 调整分辨率
  • LINUX如何调整POSIX消息队列大小
  • ntpd可以缓慢调整时间吗?
  • jTable中行标题的宽度调整问题,急,各位大虾多帮忙啦!
  • 网卡诊断和调整工具 ethtool
  • jQuery窗口大小调整插件 ResizeEnd
  • Applet中JTable不能自动调整列宽?
  • 怎样使一个执行程序具有调整位?
  • redhat8 中的音量调整。
  • 如何调整aix的文件大小限制?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,