Oracle Undo Tablespace 使用率暴涨案例分析

案例说明:

客户XXX数据库是4节点Oracle RAC架构,节点1监控undo tablespace使用率超过阈值告警,并且还在快速增长,经检查发现,一事务在对物化视图执行delete时,长时间未完成,导致undo表空间被占用,使用率快速增长。

数据库版本:12.1.2.0

一、查看undo空间使用率

通过以下脚本查看undo表空间使用率,发现undo tablespace存储空间在短时间内快速增长,使用率达到90%以上:

二、执行表空间扩容

如下所示,执行以下脚本对undo tablespace进行扩容,从100G扩容到200G,但undo tablespace的使用率仍在快速增长:

三、查看当前事务对undo段占用信息

如下所示,通过以下脚本查询当前事务占用undo段的信息,并获取事务对应的SQL_ID:

图1: 事务占用undo段信息

四、查看数据库告警日志

如下所示,在数据库的alert日志中出现ORA-01555故障:

图2: 告警日志信息

数据库undo _retention 配置:

如下所示,数据库undo_retention为14400分钟,说明当前在undo中有大量expired的undo数据占用undo表空间

图3:undo retention配置信息

查看undo表空间使用信息:

如下所示,当前事务已经占用大量undo段空间(Active):

图4:undo 段使用信息

五、获取SQL执行计划

如下所示,依据前面获取的事务对应的SQL_ID ,查询具体执行的sql文本:

六、查看S QL 执行计划

如下所示,当前占用undo tablespace的事务是delete操作,执行对物化视图的删除操作

图5:事务所执行SQL执行计划信息

七、查看物化视图D DL 语句

如下所示,delete语句涉及的物化视图有多张表的查询构建,现场测试目前物化视图的刷新效率非常低,长达几个小时:

图6: 物化视图定义信息

八、查看物化视图对应表的统计分析信息

如下所示,对物化视图对应的表,查询其统计分析结果,和实际的表记录的行数对比,判断是否是因为表统计分析有误,导致物化视图对应表的查询执行计划异常:

1 、查看表统计分析结果

2、查看表实际记录行数

如下所示,对物化视图对应表,查看实际的表记录行数;对比表统计分析后结果和表实际记录行数(通过对比查看,统计分析结果和表实际记录行数没有大的差别,排除因为统计分析有误导致的执行计划异常的问题):

图7: 表实际记录行数

九、根据告警异常信息查询M OS

如下截图所示,根据告警日志异常信息,查询MOS的相关处理建议:

图8:告警日志异常信息

图9: MOS建议解决方案

如上所示,Oracle建议对物化视图采用非原子性的方式执行refresh。

原子性刷新与非原子性刷新的区别(官方文档说明)

1)原子性刷新

在原子性刷新中,整个物化视图的刷新过程被视为一个单一的操作。如果刷新过程中发生错误,Oracle会回滚整个操作,确保物化视图的数据状态保持一致。这种方式保证了数据的一致性和完整性。

2)非原子性刷新

非原子性刷新允许在刷新过程中出现错误时只回滚部分数据更改。这意味着如果在刷新过程中某个部分失败,只有那部分会回滚,而其他成功刷新的部分则保留下来。这种方式可以提高性能,因为它减少了因单个错误导致的整个刷新操作的失败。

如何设置非原子性刷新

在Oracle中,可以通过DBMS_MVIEW包中的REFRESH过程来刷新物化视图,并通过指定method_opt参数来控制刷新的方式。对于非原子性刷新,你可以使用FAST或COMPLETE选项,但要注意的是,Oracle官方文档中并没有直接提及COMPLETE选项作为非原子性的明确标识。通常,使用FAST选项可以实现非原子性的快速刷新,而使用COMPLETE选项则会尝试进行更完整的刷新,但这不一定等同于非原子性(在某些情况下,COMPLETE也可以是原子性的)。

十、采用fast refresh方式重建物化视图

如下所示,重新定义后的物化视图的结构:

图10:物化视图定义

查看重新定义后物化视图刷新时间:

如下所示,物化视图最近的刷新时间为35分钟,恢复正常:

图11:物化视图刷新时间

十一、总结

本案例因为对物化视图执行delete操作导致的undo tablespace表空间使用率暴涨的问题,以重建物化视图解决,重建物化视图后,物化视图的刷新恢复正常,delete操作事务亦可以快速commit,事务的undo block不再长期占用undo tablespace。

对于物化视图刷新效率低,delete事务长期不能提交,还需要进一步分析其原因。

相关推荐
aigcapi8 分钟前
中转API哪家好?2026主流服务商横向测评+全场景选型指南
数据库·api
套码汉子12 分钟前
软件架构的本质:以简单之道应对复杂系统
架构·系统架构
悟道|养家12 分钟前
批量处理与向量化计算(8)
数据库·oracle·性能优化
陈天伟教授15 分钟前
关系数据库-03. 关系的完整性-实体完整性
数据库·达梦数据库·国产数据库
沛沛老爹16 分钟前
Web转AI决策篇 Agent Skills vs MCP:选型决策矩阵与评估标准
java·前端·人工智能·架构·rag·web转型
什么都不会的Tristan20 分钟前
redis-原理篇-ZipList(压缩列表)
数据库·redis·缓存
木风小助理30 分钟前
PerconaXtraBackup工作原理深度解析
数据库
lkbhua莱克瓦2431 分钟前
进阶-锁章节
数据库·sql·mysql·oracle·存储过程·
山峰哥33 分钟前
JOIN - 多表关联的魔法——3000字实战指南
java·大数据·开发语言·数据库·sql·编辑器
IT大白34 分钟前
4、Redis核心原理
数据库·redis·缓存