• 博客访问: 138081
  • 博文数量: 143
  • 用 户 组: 普通用户
  • 注册时间: 2015-07-13 15:45
  • 认证徽章:
文章分类

全部博文(143)

文章存档

2018年(26)

2017年(31)

2016年(65)

2015年(21)

我的朋友

分类: Oracle

2018-03-02 16:13:23

某客户添加节点在做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数值
阅读(96) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
请登录后评论。

登录 注册