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事务长期不能提交,还需要进一步分析其原因。

相关推荐
Thecozzy4 小时前
线上 Bug 排查与修复实录
架构
鹏大师运维4 小时前
为什么信创电脑装软件总提示“软件包架构不匹配”?
linux·运维·架构·国产化·麒麟·deb·统信uos
海南java第二人5 小时前
Nebula Graph 实战:基于图数据库存储 CMDB 实体关系
数据库·图数据库·nebula
曹牧5 小时前
oracle:“not all variables bound”
数据库·oracle
数据库百宝箱6 小时前
Oracle RMAN Image Copy 本地恢复
数据库·oracle
梦梦代码精6 小时前
2026年PHP开源商城系统实测对比:架构、多商户、商用授权,谁才是真·省心?
vue.js·docker·架构·开源·代码规范
zuYM4g7Dp7 小时前
NoSql数据库设计心得
数据库·nosql
杨了个杨89827 小时前
Keepalived + Nginx + HAProxy 高可用架构部署实战案例
java·nginx·架构
56AI8 小时前
360 智语 AI 企业智能体平台深度评测:从 L4 蜂群架构到政企落地实战
人工智能·架构
睡不醒男孩0308238 小时前
第七篇:揭秘 PostgreSQL 数据库内核级管控:CLup 深度架构设计与高可用底座技术白皮书
数据库·postgresql·clup