Oracle 常见故障排查——分析方向与资源清单

发布时间:2026/10/8 13:08:45
Oracle 常见故障排查——分析方向与资源清单
一、问题理解与分析方向Oracle 故障虽然表现各异但排查主线是统一的可归纳为「先定性、再定位、后聚焦」三步现象定性先把现象归入四大类——性能类响应变慢、吞吐下降、CPU 飙高可用性/挂起类会话卡住、连接不上、实例 hang空间类表空间/UNDO/临时段/归档空间告急报错类ORA-xxxxx 错误码、alert 日志异常。时间定位确认「什么时候开始、持续多久、有无规律定时/高峰」这是选择分析区间AWR 快照、ASH 采样窗口、alert 日志时间段的依据。会话与等待定位Oracle 性能诊断的核心方法是等待事件分析——通过会话正在等待的资源快速锁定瓶颈再沿阻塞链找到源头会话。对象与资源聚焦把等待落到具体对象SQL、表、索引、表空间、latch/mutex、enqueue、RAC 全局资源上。关键原则等待事件总时间受会话数影响必须关注平均等待时间且要区分空闲事件与非空闲事件——例如SQL*Net message from client虽然累计等待时间很大但属于空闲事件不是瓶颈真正的瓶颈通常在非空闲事件上如db file sequential read、db file scattered read、latch free、log file sync、enq: TX - row lock contention等。二、建议检查的数据库对象与入口2.1 第一手入口日志与报告入口用途采集命令/方式alert 日志实例崩溃、ORA 错误码、时间戳的第一手资料ASM 也可通过 alert 重建磁盘组操作历史adrci show alert可加-tail、-tail -f、-p或读取$ORACLE_BASE/diag/rdbms/db/inst/trace/alert_inst.logAWR 报告区间负载、Top 事件、SQL、IO、RAC 指标?/rdbms/admin/awrrpt.sqlStatspack/AWR Top 5 事件快速判断系统健康度与瓶颈方向报告内 Top 5 Timed Events 区ASH 报告/数据秒级采样定位短时抖动、瞬时阻塞见 2.32.2 会话与等待入口实时视图用途采集命令v$system_event实例级等待事件累计找总体瓶颈SELECT event, total_waits, time_waited, average_wait FROM v$system_event ORDER BY time_waited DESC;v$session_wait当前会话正在等待的事件SELECT sid, event, wait_class, seconds_in_wait FROM v$session_wait WHERE wait_class Idle ORDER BY seconds_in_wait DESC;v$session会话状态、阻塞关系、SQLSELECT sid, serial#, status, blocking_session, event, seconds_in_wait, sql_id FROM v$session WHERE blocking_session IS NOT NULL;v$sql定位高耗时/高逻辑读 SQLSELECT * FROM (SELECT sql_id, executions, buffer_gets, disk_reads, elapsed_time/1000000 AS elapsed_s FROM v$sql ORDER BY elapsed_time DESC) WHERE ROWNUM 20;v$latchlatch 争用library cache latch 等SELECT name, gets, misses, sleeps, wait_time FROM v$latch ORDER BY wait_time DESC;v$waitstatBuffer Cache 内各类块的等待统计SELECT * FROM v$waitstat;2.3 采样与深度转储入口入口用途采集命令ASHv$active_session_history活动会话采样按事件/时间段聚合SELECT event, COUNT(*) FROM v$active_session_history WHERE sample_time SYSDATE - 1/24 GROUP BY event ORDER BY 2 DESC;ASH 覆盖范围确认缓冲区时间窗与容量SELECT MIN(sample_time), MAX(sample_time) FROM v$active_session_history;/SELECT * FROM v$sgastat WHERE name LIKE ASH buffers;Systemstate Dump全进程/会话/锁/等待/库缓存对象快照ALTER SESSION SET EVENTS immediate trace name systemstate level 10;Hanganalyze挂起场景的会话阻塞树oradebug setmypid→oradebug hanganalyze 32.4 空间与归档入口视图用途采集命令v$sort_segments临时段占用排序/哈希/LOBSELECT * FROM v$sort_segments;v$tempfile临时文件大小SELECT file#, bytes/1024/1024 FROM v$tempfile;v$archived_log归档日志序列、SCN 范围、路径SELECT sequence#, name, first_change#, next_change# FROM v$archived_log;说明v$tempseg_usage、v$temp_space_header等在部分版本/环境中需现场确认对象可用性使用前建议在目标实例核实。监控临时表空间应使用v$sort_segments、v$temp_space_header一类视图不要用DBA_FREE_SPACE后者不反映临时段的真实使用。三、相关机制与背景知识等待事件是性能分析的核心工具基本假设是大多数性能问题可通过等待事件定位。分析时先看等待事件分布再看平均等待时间并区分空闲/非空闲事件从而识别真正的系统瓶颈。ASHActive Session History自 10g 引入从会话状态对象采样活动会话数据存于 SGA 固定大小的循环缓冲区大小约为Max[Min[#CPU×2MB, 5%共享池, 30MB], 1MB]并周期性刷新到磁盘。ASH 会过滤空闲会话不记录SQL*Net message from client适合定位短时、瞬时问题。AWR基于快照的区间负载报告适合分析「持续一段时间」的性能问题Top 5 事件是快速判断健康度的入口。锁与闩锁机制enqueue如enq: TX - row lock contention是事务级锁其锁类型与模式可从事件名或 trace 的 P1 值解析latch/mutex如library cache: mutex X、library cache latch是内存结构保护机制争用会表现为latch free及高硬解析。Buffer Cache 与物理 I/OFree Buffer等待表示 Buffer Cache 无可用空间根因是缓存过小或数据块被过度使用常与物理读流量指标联动。REDO/归档机制Redo 日志过小或归档 I/O 不足会导致日志切换频繁、归档进程缓慢进而 LGWR 等待、提交阻塞严重时ORA-00257归档日志满。RAC 全局资源私网延迟过高超过 1ms 标准会显著增加GC CR grant 2-way等 GC 等待跨实例状态异常会连锁导致 GCS/GES 性能下降。空间机制UNDO 不足在 AWR 的 UNDO 统计中体现为 OOSOut Of Space计数非零临时表空间不足表现为ORA-1652。四、可能关联的故障模式故障模型别名典型现象 / 根因要点关联入口CPU 瓶颈CPU 成为瓶颈大量会话在 CPU 队列等待SQL 执行延迟增加Top 事件、v$sql、v$sessionON CPU性能下降整体性能明显下降响应时间增加、吞吐降低AWR/ASH、Top 事件Free Buffer 等待事件Buffer Cache 无可用空间会话等待空闲缓冲区严重时挂起v$waitstat、物理读流量指标REDO LOG 写入性能不佳等待事件AWR 中 REDO LOG 相关等待指标高v$system_eventlog file sync 等、AWR日志切换等待导致性能下降Redo 文件过小/归档 I/O 不足LGWR 等待归档可报ORA-00257alert 日志、v$archived_logRAC 私网高延迟导致的 GC 性能问题私网延迟 1msGC CR grant 2-way等显著增多AWR RAC 段、OS UDP 参数表空间不足剩余空间不足以支撑正常操作需扩容或清理v$tempfile、v$sort_segments、alert 日志归档日志空间满数据库挂起、新用户无法连接DML 受阻v$archived_log、alert 日志会话阻塞 / 死锁enq、library cache相关等待ORA-00060 / ORA-04020 等v$sessionblocking_session、systemstate dump、hanganalyzelibrary cache latch 争用高并发硬解析或共享池不足latch free突出v$latch、v$librarycache、v$sqlarea、v$sysstatPMON 被 DEAD 会话阻塞在library cache: mutex Xkilled 会话无法释放PMON 清理路径被阻塞v$session、systemstate dump五、可参考的案例或经验案例场景与经验要点Oracle 12cR2 RAC CPU 高导致主机无响应分析案例elementId: 4:…:2089495活动会话近 200 全 ON CPU2 条 select 占约 50% DB Timekill 会话无效主机最终 ping 不通、TAF 切换AWR/sysstat 缺失借助实时采样工具与 DASH 分析RAC 全局死锁诊断案例elementId: 4:…:1538402核心系统 RAC 环境频繁 ORA-00060诊断为应用逻辑导致的全局死锁RAC 热块导致性能下降案例elementId: 4:…:1538404促销期间订单表热块争用引发严重性能下降归档日志满导致数据库挂起案例elementId: 4:…:1531933数据库突然挂起、新用户无法连接检查发现归档目标已满教训是不要忽视归档空间不足这一简单原因ALTER TABLE MOVE 报 ORA-01652 目标表空间不足案例elementId: 4:…:2230536先用v$tempfile 临时段视图排除临时表空间不足确认目标表空间过小后扩容解决11gR2 RAC AWR 报告分析案例并行查询导致 IO 瓶颈与宕机elementId: 4:…:237210从版本负载、Load Profile、Top5、RAC 指标、IO 到 SQL 逐步定位确认并行查询引发大量 IOSYSTEMSTATE DUMP 分析案例DDL 递归 SQL 触发的 RAC row cache lock 阻塞elementId: 4:…:1188799按「阻塞会话 → 进程 → call → row cache obj → SQL」顺序分析Case: Alert Log showing ORA-600 / ORA-04061 / ORA-06508elementId: 4:…:1580573alert 日志显示多个错误码根因是相关对象不存在