广告位联系
返回顶部
分享到

Oracle数据库如何通过AWR找出执行计划突变

oracle 来源:互联网 作者:佚名 发布时间:2026-08-29 21:58:46 人浏览
摘要

先查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):

1

2

3

4

5

6

7

SELECT plan_hash_value, COUNT(*), MIN(sample_time), MAX(sample_time)

FROM dba_hist_sql_plan p

JOIN dba_hist_sqlstat s USING (sql_id, plan_hash_value)

WHERE sql_id = 'your_sql_id'

  AND sample_time > SYSDATE - 7

GROUP BY plan_hash_value

ORDER BY MIN(sample_time);

  • 返回多行 → 计划确实漂移过,继续往下查
  • 只有一行 → 执行路径没变,问题大概率在统计信息、绑定变量窥探失效、内存压力或 RAC 节点间不一致
  • dba_hist_sql_plan 默认每 SQL 最多存 1000 行计划(受 _cursor_plan_cache_threshold 控制),高频 SQL 可能被截断,结果为空 ≠ 没历史计划

用 DBMS_XPLAN.DISPLAY_AWR 对比两个 plan_hash_value 的实际路径

光有 hash 值不够,得确认访问方式是否退化:比如从 INDEX RANGE SCAN 变成 TABLE ACCESS FULL,或 NESTED LOOPS 变成 HASH JOIN 并 spill 到 TEMP。

执行时务必加 +PEEKED_BINDS 和 +NOTE:

1

2

3

4

5

6

SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_AWR(

  sql_id      => 'your_sql_id',

  plan_hash_value => 1234567890,

  db_id       => 123456789, -- 从 dba_hist_sqlstat 查

  format      => 'BASIC +PEEKED_BINDS +NOTE'

));

  • 不加 +PEEKED_BINDS → 看不到绑定变量实际值,无法判断谓词是否被推入索引层
  • 不加 +NOTE → 无法确认 SPM 基线是否启用(如出现 SQL plan baseline used)
  • 若提示 “no rows selected” → 不是计划不存在,而是该 plan_hash_value 在 AWR 中未记录完整访问路径(常见于并行计划或递归调用)

交叉验证 disk_reads_delta 和 elapsed_time_delta 是否同步飙升

AWR 中 Physical Reads 暴增但 Elapsed Time 没涨,基本可断定是 I/O 路径恶化,而非 SQL 本身变慢;反之,若时间涨但物理读没涨,可能是 CPU 或锁问题。

  • 查 disk_reads_delta 突增时段(比如某小时从 500 涨到 12 万),记下 sql_id 和 snap_id
  • 用同一 snap_id 范围查 dba_hist_sql_plan,确认该 sql_id 是否出现新 plan_hash_value,且旧计划消失
  • RAC 环境下必须分 instance_number 查,否则 dba_hist_seg_stat 中的 physical_writes 是四节点叠加值,会掩盖真实热点

排除 SPM 基线未生效或绕过的干扰

很多人以为基线存在就等于生效,其实不然。DBA_SQL_PLAN_BASELINES 显示 ENABLED=YES 且 ACCEPTED=YES,只是“已入库”,不代表优化器真用了它。

  • 用 DBMS_XPLAN.DISPLAY_AWR(..., 'ADVANCED') 查输出中的 Note 行,明确是否有 SQL plan baseline used
  • 若没这行,检查 optimizer_use_sql_plan_baselines 是否为 TRUE,以及该 SQL 是否被设为 FIXED=YES 后又未演进新计划
  • RAC 下必须逐实例查 gv$sql,确保所有 inst_id 下都显示该 Note;单节点加载基线后,其他实例不会自动同步

真正难定位的是 plan_hash_value 相同但性能暴跌的情况——结构没变,但谓词没推入、绑定值导致基数误估、或 RAC 节点间 gc 等待激增,这些都不会改变 hash 值,却会让 AWR 的 Top 5 Timed Events 或 dba_hist_active_sess_history 暴露异常等待分布。


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 :
相关文章
  • Oracle数据库如何通过AWR找出执行计划突变
    先查DBA_HIST_SQLSTAT确认plan_hash_value是否真变:若7天内返回多行则确已漂移,仅一行则问题不在执行路径;再用DBMS_XPLAN.DISPLAY_AWR加+PEEKED_BINDS和
  • Oracle存储过程 procedure不允许使用return语句的解决
    Oracle存储过程中RETURN语句的使用存在严格限制:在存储过程(PROCEDURE)中不允许使用RETURN语句,否则会引发PLS-00372编译错误;而在函数(FUNCTIO
  • Oracle中的触发器(trigger)用法介绍
    1、触发器的定义 数据库触发器是一个与表相关联、存储PL/SQL语句的东西。 每当一个特定的数据操作语句(insert、update、delete)在指定的表
  • Oracle数据库高可用之DG+RAC介绍

    Oracle数据库高可用之DG+RAC介绍
    一、DG的概念和原理 Oracle Data Guard是Oracle数据库的一种高可用性解决方案,它通过在主数据库和一个或多个辅助数据库之间自动复制和同步数
  • Oracle归档日志爆满的急救指南
    作为运维工程师,你一定遇到过这样的紧急情况:/oracle/app/archivelog目录突然爆满,数据库挂起无法写入,业务全线中断。你慌忙执行了网上
  • Oracle授予普通用户kill session权限的方法
    开发A在测试环境操作时有时会遇到阻塞问题,需要找DBA帮忙查看阻塞会话及kill session,后来觉得太麻烦想要个kill会话的权限,查了下Oracl
  • Oracle日期时间查询方式
    一、查询近一个月的数据 如果是月份的话,oracle中可以使用add_months()函数来实现,如: 1 ADD_MONTHS(sysdate,-1) = CREATE_DATE 表示创建日期 CREATE_
  • Oracle登录时忘记用户名或密码该怎么解决
    (注意:Oracle12c规定用户名都必须以C##开头,否则无法使用。) 1.用户名:sys密码:change_on_install或者manager as sysdba 2.用户名:system密码:manager
  • Oracle记录登录用户IP的方法
    在运维场景中,在定位到某个SQL引起系统故障之后,想知道是哪台机器发过来的,方便定位源头,该如何解决? 在 Oracle 数据库中记录登录
  • 使用Oracle通过gateway连接MSSQL的流程

    使用Oracle通过gateway连接MSSQL的流程
    环境概述 某医院的his系统Oracle数据库要和体检系统进行数据通讯,需要从Oracle能查到sqlserver的数据。本次通过Oracle gateway来解决此问题。
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计