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

相关推荐
l56575821 小时前
第五十五天(SQL注入&增删改查&HTTP头&UA&XFF&Referer&Cookie&无回显报错&复盘)
数据库
上海达策TECHSONIC21 小时前
经验分享:如何让SAP B1数据库性能提升50%
运维·数据库·运维开发
言之。21 小时前
深入解析Django重定向机制
数据库·django·sqlite
时序数据说21 小时前
国内开源时序数据库IoTDB介绍
大数据·数据库·物联网·开源·时序数据库·iotdb
喂完待续21 小时前
【序列晋升】28 云原生时代的消息驱动架构 Spring Cloud Stream的未来可能性
spring cloud·微服务·云原生·重构·架构·big data·序列晋升
夫子39621 小时前
OnlyOffice的高可用方案如何做
运维·架构
Databend21 小时前
CRC32 自包含退化现象分析
数据库
ITZHIHONH1 天前
FastGPT源码解析 Agent知识库文本资料处理详解和代码分析
数据库·ai编程
薛定谔的算法1 天前
手写React:从Dideact理解前端框架的核心原理
前端·react.js·架构