先查DBA_HIST_SQLSTAT确认plan_hash_value是否真变:若7天内返回多行则确已漂移,仅一行则问题不在执行路径;再用DBMS_XPLAN.DISPLAY_AWR加+PEEKED_BINDS和+NOTE核对谓词、绑定值及SPM基线启用状态。 查 DBA_H
先查DBA_HIST_SQLSTAT确认plan_hash_value是否真变:若7天内返回多行则确已漂移,仅一行则问题不在执行路径;再用DBMS_XPLAN.DISPLAY_AWR加+PEEKED_BINDS和+NOTE核对谓词、绑定值及SPM基线启用状态。 查 DBA_HIST_SQLSTAT 确认 plan_hash_value 是否真变了执行计划“变差”不等于“变了”,AWR 是唯一能验证是否真实漂移的依据。只看 v$sql 或当前执行慢,容易误判为计划问题,实际可能是 I/O 抖动或锁争用。 运行这个查询(替换 your_sql_id):
用 DBMS_XPLAN.DISPLAY_AWR 对比两个 plan_hash_value 的实际路径光有 hash 值不够,得确认访问方式是否退化:比如从 INDEX RANGE SCAN 变成 TABLE ACCESS FULL,或 NESTED LOOPS 变成 HASH JOIN 并 spill 到 TEMP。 执行时务必加 +PEEKED_BINDS 和 +NOTE:
交叉验证 disk_reads_delta 和 elapsed_time_delta 是否同步飙升AWR 中 Physical Reads 暴增但 Elapsed Time 没涨,基本可断定是 I/O 路径恶化,而非 SQL 本身变慢;反之,若时间涨但物理读没涨,可能是 CPU 或锁问题。
排除 SPM 基线未生效或绕过的干扰很多人以为基线存在就等于生效,其实不然。DBA_SQL_PLAN_BASELINES 显示 ENABLED=YES 且 ACCEPTED=YES,只是“已入库”,不代表优化器真用了它。
真正难定位的是 plan_hash_value 相同但性能暴跌的情况——结构没变,但谓词没推入、绑定值导致基数误估、或 RAC 节点间 gc 等待激增,这些都不会改变 hash 值,却会让 AWR 的 Top 5 Timed Events 或 dba_hist_active_sess_history 暴露异常等待分布。 |
2024-05-11
2021-06-05
2022-09-01
2022-09-17
2024-05-14