某客户ODS数据库undo段问题分析处理

概述

ODS数据库在7月22日4个时间点02:03,05:17,07:04,08:53分别报如下错误:

原因分析

Ora-1628:max # extents 32765 reached for rollback segment _SYSSMU19990_761259507$

Oracle 官方解释:

Cause: An attempt was made to extend a rollback segment that already has reached its maximum size or space could not be allocated in the data dictionary to contain the definition of the object.

Action:If possible,increase the value of either the MAXEXTENTS or PCTINCREASE initialization parameters or find the data dictionary table lacking space and alter the storage parameters,as described in the Oracle8 Server Administrator's Guide

该报错出现在实例1上,实例1的undo情况如下:

|-----------------|----------------|-----------|-----------|-------------|
| TABLESPACE_NAME | Allocated (MB) | Free (MB) | Used (MB) | PERCENTFREE |
| UNDOTBS11 | 32768 | 11762 | 21005 | 36 |

UndoTBS11的DDL语句如下:

Undotbs11是extent本地管理模式。

根据MOS文章:

出现ORA-1628错误主要有两方面:

1.出现非常大的事务

Undo使用自动管理,人为无法控制扩展区大小。也无法缩小。系统会自动决定扩展区的大小,但是如果undo段扩展了很多,通常它将开始分配更大的扩展区,undo 段的最大扩展区数限制为32K,并且如果当前扩展区中的下一个扩展区不是过期的扩展区,则长/大型运行事务可以通过添加新扩展区来耗尽此限制,并且最终将收到ORA-1628。

2.Undo表空间中存在大量的碎片

在undo使用自动管理。人为无法控制扩展区大小。在遇到大事务时,大量扩展回滚段,回滚段中的大量扩展区可能是由于undo表空间中的碎片所致:由于碎片,Oracle可能只能分配64k的扩展区,因此很有可能遇到最大扩展区问题。

解决方法

1.对于大事务,可以通过将大事务拆分为较小的事务(例如频繁提交)来解决。

2.如果是undo表空间碎片,可以通过重新创建undo表空间来解决(这也是建议的Bug 10330444Bug 10229998的解决方案,它们是针对同一问题而提交的,并且已作为非bug关闭)。

Oracle建议:

1)将参数 "_rollback_segment_count" 设置为在线更多可用的UNDO段。应通过放置以下查询获得的最大值来设置值

目前该参数设置为6000.

2)Oracle bug。(bug 7291739)

该bug修复提供一个隐藏参数:_HIGHTHRESHOLD_UNDORETENTION。该参数的设置根据如下两个值得到:

|-----------------------------------------------------------------------------------------------------------------------------------------------------------------|
| SQL> select max(maxquerylen),max(tuned_undoretention) from v$undostat; MAX(MAXQUERYLEN) MAX(TUNED_UNDORETENTION) ---------------- ------------------------ 0 0 |

ALTER SYSTEM SET "_highthreshold_undoretention"=max(maxquerylen)+1;

Oracle建议设置值:

ALTER SYSTEM SET "_highthreshold_undoretention"=1;

3)其他bug如下:

4)删除并重新创建undo表空间(由于其碎片)

解决方案及建议

目前ODS undo表空间undotbs11为bigfile数据文件,最大值设置为60G,自动扩展。而且出现该错误均在ODS大量跑批的时候。在对应时间点根据ASH报告,时有抽数的情况发生。根据实际情况有如下解决建议:

1.拆分大事务为小事务,之前跟开发沟通,结果不理想。

  1. 对于undo表空间碎片进行整理。

能够在线进行调整的只有undo表空间重建工作,而且不影响业务的正常运行。

如下:

  • 重建undotbs1表空间。
  • 重建表空间取消自动扩展。
  • 重建表空间初始分配60G大小。

根据现有信息,无法判断该报错是否bug,先期对undo表空间根据MOS文件进行重建后,后续在进行观察。

相关推荐
毕设十刻9 小时前
基于Vue的考勤管理系统8n7j8(程序 + 源码 + 数据库 + 调试部署 + 开发环境配置),配套论文文档字数达万字以上,文末可获取,系统界面展示置于文末
前端·数据库·vue.js
合方圆~小文9 小时前
不同画面,三个镜头实时监控拍摄方案
数据结构·数据库·人工智能
ChrisitineTX10 小时前
凌晨突发Java并发问题:synchronized锁升级导致接口超时,排查过程全记录
java·数据库·oracle
极限实验室10 小时前
Easysearch 2.0.0 性能测试
数据库·性能优化
老华带你飞11 小时前
社团管理|基于Java社团管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端
shayudiandian11 小时前
用LangChain打造你自己的智能问答系统
java·数据库·langchain
马克学长11 小时前
SSM特殊教育学校学生管理系统002k1(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·学生管理系统·特殊教育·ssm 框架
卿雪12 小时前
Redis 线程模型:Redis为什么这么快?Redis为什么引入多线程?
java·数据库·redis·sql·mysql·缓存·golang
梁萌12 小时前
MySQL中innerDB引擎的锁机制
数据库·mysql·索引·表锁·行锁
老华带你飞12 小时前
汽车销售|汽车报价|基于Java汽车销售系统(源码+数据库+文档)
java·开发语言·数据库·vue.js·spring boot·后端·汽车