Oracle—undo回滚段长时间不释放

发布时间:2020-08-11 17:13:44 作者:白石溪头
来源:ITPUB博客 阅读:359

Undo回滚段中 Unexpired Block迟迟不释放掉,占用90%以上的undo表空间.

导致数据库事务等待严重. DML运行异常缓慢. JOB运行也有ora-01555错误.



详细询问了下UNDO表空间的具体设置,如下:

   1、undo_retention=3600;

   2、未设置表空间的retention guarantee;

   3、UNDO表空间设置为非自动扩展;

   4、数据库版本11.2.0.1.0



   oracle给了个参数,"_smu_debug_mode" = 33554432,改到系统中,报出一大堆ORA-01555,赶紧改了回来。

       莫非是碰到bug了?查了下,在oracle 10.2.0.2-3,确实有个很类似的bug:5387030。

       正常情况下,如果undo 表空间被设置为固定大小,不自动扩展,oracle会启用Automatic Tuning of undo retention特性。

       启用Automatic Tuning of undo retention时,oracle会忽略undo_retention的设置,根据undo表空间大小、系统负载情况,自动调整undo_retention为一个合适的值。这个值一般会大于“所有事务的最长运行时间”。

  

     10gR2的bug现象为,只要设置了undo表空间自动管理,不管有没开自动扩展,不管undo_retention设置为多少,都会启用 Automatic Tuning of undo retention的新特性。

      这个bug的解决办法:   

  10.2.0.2/10.2.0.3有相应的patch,这个bug在10.2.0.4中已经修复,建议找时间停机打patch   

  设置隐含参数_smu_debug_mode=33554432,将tuned_undoretention取值算法修正为max(maxquerylen secs + 300,undo_retention )   

  设置隐含参数_undo_autotune=false,关闭自动undo retention调整特性  


       在10.2.0.4及以后,这个bug就修复了。朋友那问题,肯定不是这bug引起的。


    在查阅这bug时,发现Automatic Tuning of undo retention的启用条件,与朋友那完全吻合,莫非这跟Automatic Tuning of undo retention有关。

查了下官方文档,确实如此。

Oracle—undo回滚段长时间不释放

 

系统查了下,果然,undo_retention被自动调整了:

                      Oracle—undo回滚段长时间不释放

最后总结下,呵, 在oracle 10.2.0.4,oracle11g里面,如果碰到undo使用率100%,不释放的问题。不建议再通过调整隐藏参数来解决undo占用率高的问题。

更推荐设置undo空间的自动扩展 + 限制文件最大大小的方式来解决。


推荐阅读:
  1. Oracle RAC 手动回滚补丁
  2. 理解ORACLE REDO与UNDO

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

oracle 长时间 undo

上一篇:程序员,你碰到过的最难调的Bug是什么样的?

下一篇:实现SSL加密的主从复制

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》