ITPub博客

关于_rollback_segment_count

原创 Oracle 作者:abin1703 时间:2018-03-02 16:13:23 0 删除 编辑
某客户添加节点在做dml操作的时候报错,执行不了dml操作,后来经过排查是客户设置了_rollback_segment_count 参数。
最佳实践提高Oracle性能设置了_rollback_segment_count 为12000,提前创建好12000个undo段,不用在事务过程中动态的创建undo段,这样可以提高业务事务的性能。通过我们的排查发现Oracle对undo segment的个数是有限制的32760,首先oracle在1和2号节点上创建了2.4W个undo段(每个实例12000个),随后,添加了3号节点和4号节点,也就是说3号节点和4节点是在后面添加进来的,由于1号和2号已经占用了2.4W个undo段,在添加3号节点占用了最后的剩余的8000多个undo段,最终在添加4号节点后已经没有可用的undo段了,数据库的undo segment的数量达到了oracle的数量上限32760。


++++++++++++++++++++++++++++++++++++++++++++++++=
##新添加的节点ora-01552错误问题分析原因
oracle对于undo段的数量是有限制的,每个DB最多可以创建32760个undo段。


由于该环境在压测调试期间设置了参数_rollback_segment_count 为12000,该值代表实例启动后,提前创建好12000个undo段,不用在事务过程中动态的创建undo段,这样可以提高压测期间事务的性能。标准实施环境不用设置该参数。


回到我们的环境中,由于参数_rollback_segment_count的设置,首先oracle在1和2号节点上创建了2.4W个undo段(每个实例12000个)。


随后,添加了3号节点和4号节点,也就是说3号节点和4节点是在后面添加进来的,由于1号和2号已经占用了2.4W个undo段,在添加3号节点占用了最后的剩余的8000多个undo段,最终在添加4号节点后已经没有可用的undo段了,数据库的undo segment的数量达到了oracle的数量上限32760。


## 如何解决
* 重置参数rollback_segment_count
* 删除一些offline状态的undo 段,使数据库的undo段数量低于阀值32760
* 新建一个undo表空间,切换到新的undo表空间
*减少_rollback_segment_count数值
请登录后发表评论 登录
全部评论

注册时间:2015-07-13

  • 博文量
    152
  • 访问量
    154013