当前位置: 首页 > news >正文

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文本:

六、查看SQL执行计划

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

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

七、查看物化视图DDL语句

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

图6: 物化视图定义信息

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

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

1、查看表统计分析结果

2、查看表实际记录行数

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

图7: 表实际记录行数

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

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

图8:告警日志异常信息

图9: MOS建议解决方案

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

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

        1)原子性刷新

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

        2)非原子性刷新

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

        如何设置非原子性刷新

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

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

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

图10:物化视图定义

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

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

图11:物化视图刷新时间

十一、总结

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

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

http://www.lryc.cn/news/623953.html

相关文章:

  • UE5多人MOBA+GAS 49、创建大厅
  • java设计模式之迪米特法则使用场景分析
  • ​​Vue 3 开发速成手册
  • PHP现代化全栈开发:测试驱动开发与持续交付实践
  • MCP原理与开发及与大模型交互流程
  • 最小路径和
  • 【JAVASE】-9- 接口语法基础
  • Android中切换语言的方法
  • DNS总结
  • 【Linux内核】Linux信号机制
  • linux 常用代码
  • nodejs 错误处理
  • Collections.synchronizedList是如何将List变为线程安全的
  • vs studio 2017项目不支持studio vs2022
  • 【k8s】Kubernetes核心概念与架构详解
  • 从0实现系统设计
  • Leetcode 15 java
  • GitHub Copilot:AI编程助手的架构演进与真实世界影响
  • 浜掕仈缃戝ぇ鍘侸ava姹傝亴鑰呴潰璇曠幇鍦猴細褰撲弗鑲冮潰璇曞畼閬囦笂鎼炵瑧绋嬪簭鍛樿阿椋炴満
  • Conda 环境 在AI 私有化部署 有怎么用?
  • 电力设备状态监测与健康管理:基于多源异构数据融合的技术实现
  • 五、redis入门 之 客户端连接redis
  • 计算机网络 HTTP1.1、HTTP2、HTTP3 的核心对比及性能分析
  • ReactNode 类型
  • Java项目中短信的发送
  • 密码学系列 - 零知识证明(ZKP) - 多种承诺方案
  • Java ConcurrentHashMap 深度解析
  • 【LeetCode 热题 100】(八)二叉树
  • EC11编码器
  • 集成电路学习:什么是SIFT尺度不变特征变换