查询oracle sql的执行计划时,一个很重要的视图--dba_hist_sql_plan
2017-03-06 14:11
639 查看
本文的编写得到枯荣长老的大力帮助,在此表示感谢。
本文适用的Oracle db版本为oracle 10g或者更高版本.
之所以说这个视图很重要,是因为该视图中有一列是在awrsqrpt报告中没有的。这一列就是 filter_predicates列。
SELECT plan_hash_value,
TO_CHAR(RAWTOHEX(child_address)),
TO_NUMBER(child_number),
id,
LPAD(' ', DEPTH) || operation operation,
options,
object_owner,
object_name,
optimizer,
cost,
access_predicates,
filter_predicates
FROM V$SQL_PLAN
WHERE sql_id = 'bkcyk7bf380t6'
ORDER BY 1, 3, 2, 4;
重点关注optimizer列,filter_predicates列。
若是该sql不在shared pool中时,改为执行如下的sql:
set linesize 500
set pagesize 500
col plan_hash_value format 9999999999
col id format 999999
col operation format a30
col options format a15
col object_owner format a15
col object_name format a20
col optimizer format a15
col cost format 9999999999
col access_predicates format a15
col filter_predicates format a15
SELECT plan_hash_value,
id,
LPAD (' ', DEPTH) || operation operation,
options,
object_owner,
object_name,
optimizer,
cost,
access_predicates,
filter_predicates
FROM dba_hist_sql_plan
WHERE sql_id = 'fahv8x6ngrb50'
ORDER BY plan_hash_value, id;
重点关注filter_predicates列。--这一列能帮助判断不走索引的原因。这一列的查询结果若是为null,那就是正常的。若是不为null,那就需要额外关注不为空的原因,如下图所示:
本文适用的Oracle db版本为oracle 10g或者更高版本.
之所以说这个视图很重要,是因为该视图中有一列是在awrsqrpt报告中没有的。这一列就是 filter_predicates列。
SELECT plan_hash_value,
TO_CHAR(RAWTOHEX(child_address)),
TO_NUMBER(child_number),
id,
LPAD(' ', DEPTH) || operation operation,
options,
object_owner,
object_name,
optimizer,
cost,
access_predicates,
filter_predicates
FROM V$SQL_PLAN
WHERE sql_id = 'bkcyk7bf380t6'
ORDER BY 1, 3, 2, 4;
重点关注optimizer列,filter_predicates列。
若是该sql不在shared pool中时,改为执行如下的sql:
set linesize 500
set pagesize 500
col plan_hash_value format 9999999999
col id format 999999
col operation format a30
col options format a15
col object_owner format a15
col object_name format a20
col optimizer format a15
col cost format 9999999999
col access_predicates format a15
col filter_predicates format a15
SELECT plan_hash_value,
id,
LPAD (' ', DEPTH) || operation operation,
options,
object_owner,
object_name,
optimizer,
cost,
access_predicates,
filter_predicates
FROM dba_hist_sql_plan
WHERE sql_id = 'fahv8x6ngrb50'
ORDER BY plan_hash_value, id;
重点关注filter_predicates列。--这一列能帮助判断不走索引的原因。这一列的查询结果若是为null,那就是正常的。若是不为null,那就需要额外关注不为空的原因,如下图所示:
相关文章推荐
- 查询oracle sql的执行计划时,一个很重要的视图--dba_hist_sql_plan
- 查询oracle sql运行计划,一个非常重要的观点--dba_hist_sql_plan
- Oracle 性能调优之:使用 V$SQL_PLAN 视图查询内存中的执行计划
- 巧用DISPLAY_AWR函数与dba_hist_sqlstat结合查询SQL语句在指定节点指定时间范围内的历史执行计划
- 巧用DISPLAY_AWR函数与dba_hist_sqlstat结合查询SQL语句在指定节点指定时间范围内的历史执行计划
- Oracle SQL执行计划基线总结(SQL Plan Baseline)
- Scripts:根据sql_id从AWR中查询执行计划(个人比较喜欢使用这个)display_awr_plan.sql
- showplan_text查询计划查询sql执行顺序 时间 IO
- Oracle SQL执行计划基线总结(SQL Plan Baseline)
- [Oracle]如何查看SQL的执行计划 - DBMS_XPLAN Package
- Oracle 如何根据动态性能视图来查看某条SQL语句的执行计划
- Oracle SQL执行计划基线总结(SQL Plan Baseline)
- 使用V$SQL_PLAN视图获取曾经执行过的SQL语句执行计划
- oracle sql_plan 执行计划
- oracle新建用户执行sql查询语句出现错误ORA-00942:表或视图不存在
- 分析oracle的执行计划(explain plan)并对对sql进行优化实践
- 【ORACLE】记录通过执行Oracle的执行计划查询SQL脚本中的效率问题
- ORACLE如何在有视图的SQL中使用hint(提示)来设置视图内的SQL查询方式
- SQL Server查询SQL语句的执行计划
- SAP 查询跟踪监控,sql 执行计划