【Oracle】获取执行计划之 dbms_xplan.display_awr()

【Oracle】获取执行计划之 dbms_xplan.display_awr()

前提

目标SQL的执行计划被Oracle采集到AWR Reponsitory中

操作流程

  1. 查看 CONTROL_MANAGEMENT_PACK_ACCESS、STATISTICS_LEVEL 参数

    SHOW PARAMETER control_management_pack_access
    show parameter STATISTICS_LEVEL
    

    以上两个参数用于控制诊断和调优包的使用
    CONTROL_MANAGEMENT_PACK_ACCESS 应该被设置为 DIAGNOSTIC+TUNING 诊断和调优模式
    DIAGNOSTIC 为确保启用自动数据库诊断监视器,包括 AWR、ADDM
    TUNING 显示一 sql 推断信息和调优建议,包括 SQL Tuning Advisor,、SQLAccess Advisor

    alter system set control_management_pack_access="DIAGNOSTIC+TUNING";
    
  2. 执行测试 SQL

    select count(1) from emp;
    
  3. 查询 Shared Pool 中是否已经缓存了 select count(1) from emp 的执行计划

    select t.SQL_TEXT,t.SQL_ID,t.VERSION_COUNT,t.EXECUTIONS from v$sqlarea t where t.SQL_TEXT like '%select count(1) from emp%';
    

    在这里插入图片描述

  4. 手工收集 AWR 报告,清空 Shared Pool 缓冲池

    exec dbms_workload_repository.create_snapshot();
    alter system flush shared_pool;
    select t.SQL_TEXT,t.SQL_ID,t.VERSION_COUNT,t.EXECUTIONS from v$sqlarea t where t.SQL_TEXT like '%select count(1) from emp%';
    

    在这里插入图片描述

  5. 使用 dbms_xplan.display_awr(‘sql_id’)查看执行计划

    select * from table(dbms_xplan.display_awr('9r5a71wx8rpr1'));
    

优缺点

  • 优点
    可以得到真实的执行计划
  • 缺点
    该方法不能显示谓词信息,是因为从 V$SQL_PLAN 导入 AWR 基表 WRH$_SQL_PLAN 时未将谓词字段 access_predicates 和 filter_predicates 导入

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿的向往

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值