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

一起Oracle 19c bug 导致的业务系统超时问题分析

一、故障概况

1、2025年X月XX日07:36至09:26期间,业务系统无法连接数据库。经查,数据库节点2日志报错“checkpoint not complete”,且数据库出现大量GC等待事件,同时活动连接会话数达到阈值上限。后续通过终止(Kill)会话,业务连接逐步恢复。

2、10:19至11:38期间,该故障再次发生。此阶段部分业务仍可访问。为缓解数据库压力,现场数据库运维人员手动终止(KILL SESSION)了部分空闲(用户连接为空)的会话。同时,与业务方沟通确认当前可用功能是否满足紧急需求。由于数据库状态未能完全恢复,最终决定重启数据库实例2。重启后,数据库资源得以释放,业务恢复正常。

二、处理过程

1、07:45,现场数据库运维人员收到告警:数据库实例1中出现大量“gc buffer busy”等待事件。初步分析,怀疑与业务侧存在大量批量作业或高并发请求有关。

2、08:22 ,现场数据库运维人员收到数据库实例2 DOWN告警短信。

3、08:46,运维人员核查数据库状态,发现其活动会话数(Active Sessions)显著高于历史峰值。同时,数据库内等待事件计数已超过28,000次。上述情况导致数据库响应严重延迟,进而引发应用程序连接数据库失败。

4、同时核查数据库日志报错:ORA-00020: maximum number of processes (20000) exceeded。

5、08:54,现场数据库运维人员与业务方及负责人达成共识:优先尝试终止(KILL SESSION)数据库会话以降低连接数。 但由于活动会话数量庞大,手动终止效率低下且难以彻底清理,运维人员遂与负责人及业务方再次确认后,决定采取更彻底的方案:停止数据库监听器(Listener),在操作系统层面对残留的数据库进程执行强制终止(kill -9)。此操作旨在彻底中断所有客户端连接并清理残留进程。

6、09:26,会话清理及监听器重启操作完成,业务连接逐步恢复。

7、10:19,该故障现象(业务无法连接数据库)重现

8、10:25,运维人员核查确认,数据库再次出现活动会话数激增与等待事件堆积情况,导致应用程序无法建立数据库连接。

9、10:30,尝试手动终止(KILL SESSION)会话的操作已无法有效缓解故障状态。

10、10:34,运维人员发现无法通过安全方式(SHUTDOWN IMMEDIATE)停止数据库实例2,实例卡滞在 未完成状态。

11、11:21,对数据库使用abort方式对实例进行重启;

12、11:28 业务数据库实例2节点重启完成,业务陆续恢复正常。

三、问题分析

13:01,现场数据库运维人员组织多位二线专家,从网络、硬件、操作系统、数据库及近期业务量等多个维度协同排查故障根源。

1、14:41,初步排查结果显示:

(1)主机(硬件/OS)层面: 故障时段无异常。

(2)网络层面: 未观测到丢包或重传现象。

(3)操作系统日志(message/oswbb): 无异常记录。

(4)业务量层面: 近期业务量无异常,且较前期有所下降。

2、15:30,运维团队聚焦分析故障时段数据库会话信息,发现存在大量异常等待事件,包括:(gc buffer busy acquire、row cache lock、latch: ges resource hash list、latch: cache buffers chains、enq:SQ contention)追溯相关SQL,发现均为业务INSERT语句。

3、16:41,鉴于上述异常等待事件的关联性及典型性,团队判断MOS(My Oracle Support)可能存在相关案例。随即在MOS平台基于关键等待事件进行检索与分析,比对故障现象一致性。

4、17:15,在MOS上定位到与故障现象高度吻合的技术文档。进一步核查数据库节点2的跟踪日志(jcdbc012_dbw9_170054.trc),发现其内容与该MOS文档描述一致。由此初步判定故障由特定BUG触发:BUG详情: RAC Database Hang - DBWriter Process Hung On Chain 'rdbms ipc message'<='log file switch (checkpoint incomplete)' (Doc ID 3038301.1)该结论需由Oracle原厂工程师进行最终确认。

5、01:20,经原厂确认触发了Oracle bug-36158900(RAC Database Hang - DBWriter Process Hung On Chain 'rdbms ipc message'<='log file switch (checkpoint incomplete)' (Doc ID 3038301.1)),导致Dirty Buffer写出的权限处理机制的问题。

BUG解释:在某些数据库高负载运行的情况下,数据库核心进程DBWR(Database Writer,负责将数据库内存中被修改的数据块批量写入磁盘数据文件)在进行数据写入时,由于内部序列(sequence)错误不能获取相应的权限(write permission),导致内存中的缓存数据(Dirty Buffer)无法及时写入磁盘,进而引发数据库缓冲区(Buffer Cache)中的脏数据(Dirty Data)堆积。当脏数据无法及时写入磁盘时,将造成数据库性能下降,甚至出现僵死现象。在RAC(Real Application Clusters,数据库集群)环境中,该问题还引发了节点间的资源竞争,加剧系统负载,最终导致CBOSS数据库2个实例均无法提供服务。

四、解决方案及建议

1、短期根治方案:应用Oracle官方补丁

故障根因已定位至特定BUG(Doc ID 3038301.1),该BUG导致RAC环境下DBWR进程僵死,触发级联等待事件。从MOS下载并测试补丁 Patch 3038301,在非生产环境验证兼容性与稳定性。再择机在生产环境中进行补丁升级。

2、长期高可用方案:搭建ADG(Active Data Guard)

构建物理备库实现读写分离,将查询业务引流至备库,降低主库并发压力。主库故障时支持分钟级RTO切换,避免单点风险。

建议:优先实施补丁修复确保系统稳定,同步规划ADG建设并纳入容灾体系。

http://www.dtcms.com/a/335636.html

相关文章:

  • JUC常用线程辅助类详解
  • Blender模拟结构光3D Scanner(二)投影仪内参数匹配
  • 积鼎科技CFD VirtualFlow:引领国产多相流仿真技术,赋能工业智造
  • (一)React企业级后台(Axios/localstorage封装/动态侧边栏)
  • 【React 性能】性能优化第一课:搞懂 `React.memo`, `useCallback`, `useMemo`
  • 重学React(六):脱围机制二
  • Spark03-RDD02-常用的Action算子
  • WebSocket DevTools 开发调试工具完全指南 – 实时监控、消息拦截、性能分析一站式解决方案
  • 【Java后端】Spring Boot 集成 MyBatis 全攻略
  • 遥感数字图像处理教程——第二章部分课后习题
  • Java零基础笔记20(Java高级技术:单元测试、反射、注解、动态代理)
  • Oracle Undo Tablespace 使用率暴涨案例分析
  • 前端vue3+后端spring boot导出数据
  • 《香农之息》(终章·镜渊)
  • 从零到一:打包并发布你的第一个MCP AI工具服务
  • Qt | 四种方式实现多线程导出数据功能
  • RAG学习(二)
  • 零墨云A4mini打印机设置电脑通过局域网络进行打印
  • scikit-learn/sklearn学习|多任务套索回归MultiTaskLasso解读
  • 如何利用gemini-cli快速了解一个项目以及学习新的组件?
  • 业务员手机报价软件免费领取——仙盟创梦IDE
  • Kotlin集合概述
  • 【LeetCode】13. 罗马数字转整数
  • 不止于“渲染图”:从Adobe Stager到Three.js的交互式Web3D工作流
  • 安卓开发者自学鸿蒙开发4自定义组件
  • C#中List、Path、字符串操作等常用方法总结
  • fdisk的格式化分区和挂载(linux)
  • Collections.synchronizedList是如何将List变为线程安全的
  • 解决 OpenWrt 编译时报 toolchain/* failed to build 的错误
  • RK3588开发板Ubuntu系统烧录