查询oracle sql运行计划,一个非常重要的观点--dba_hist_sql_plan

该文章的作者给予了极大的帮助长老枯荣,为了表达我的谢意。

这适用于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,那就须要额外关注不为空的原因。例如以下图所看到的:

时间: 2024-08-11 01:26:51

查询oracle sql运行计划,一个非常重要的观点--dba_hist_sql_plan的相关文章

查询oracle sql的执行计划时,一个很重要的视图--dba_hist_sql_plan

本文的编写得到枯荣长老的大力帮助,在此表示感谢. 本文适用的oracle db版本为oracle 10g或者更高版本. 之所以说这个视图很重要,是因为该视图中有一列是在awrsqrpt报告中没有的.这一列就是 filter_predicates列. SELECT plan_hash_value, TO_CHAR(RAWTOHEX(child_address)), TO_NUMBER(child_number), id, LPAD(' ', DEPTH) || operation operatio

查询Oracle正在运行SQL的SQL命令

查询Oracle正在运行SQL的SQL命令: select a.EVENT, a.SQL_ID, a.MACHINE, b.SQL_TEXT, b.SQL_FULLTEXT,b.FIRST_LOAD_TIME,b.LAST_LOAD_TIME,b.LAST_ACTIVE_TIME from v$session a, v$sql b where a.SQL_ID = b.SQL_ID and a.USERNAME is not null and a.STATUS = 'ACTIVE'

Oracle SQL操作计划基线总结(SQL Plan Baseline)

一.基础概念 Oracle 11g開始,提供了一种新的固定运行计划的方法,即SQL plan baseline,中文名SQL运行计划基线(简称基线),能够觉得是OUTLINE(大纲)或者SQL PROFILE的改进版本号.基本上它的主要作用能够归纳为例如以下两个: 1.稳定给定SQL语句的运行计划.防止运行环境或对象统计信息等等因子的改变对SQL语句的运行计划产生影响! 2.降低数据库中出现SQL语句性能退化的概率.理论上不同意一条语句切换到一个比已经运行过的运行计划慢非常多的新的运行计划上!

Oracle SQL执行计划基线总结(SQL Plan Baseline)

一.基础概念 Oracle 11g开始,提供了一种新的固定执行计划的方法,即SQL plan baseline,中文名SQL执行计划基线(简称基线),可以认为是OUTLINE(大纲)或者SQL PROFILE的改进版本,基本上它的主要作用可以归纳为如下两个: 1.稳定给定SQL语句的执行计划,防止执行环境或对象统计信息等等因子的改变对SQL语句的执行计划产生影响! 2.减少数据库中出现SQL语句性能退化的概率,理论上不允许一条语句切换到一个比已经执行过的执行计划慢很多的新的执行计划上! 注意:

使用hint优化Oracle的运行计划 以及 SQL Tune Advisor的使用

背景: 某表忽然出现查询很缓慢的情况.cost 100+ 秒以上:严重影响生产. 原SQL: explain plan for select * from ( select ID id,RET_NO retNo, FROM_SYS fromSy, TO_SYS toSys, COMMAND_CODE commandCode, COMMAND, STATUS, EXT_CODE, ORIGN_CODE orignCode,error_message errorMessage, RE_F, RET_

[Oracle] 获取运行计划的各方法总结

总的结论: 一.获取运行计划的6种方法(具体步骤已经在每一个样例的开头凝视部分说明了): 1. explain plan for获取: 2. set autotrace on . 3. statistics_level=all; 4. 通过dbms_xplan.display_cursor输入sql_id參数直接获取 5. 10046 trace跟踪 6. awrsqrpt.sql 二.适用场合分析 1.假设某SQL运行很长时间才会出结果.甚至慢到返回不了结果,这时候看运行计划就仅仅能用方法1,

闪回drop恢复表后sql运行计划异常

-----正常运行计划 set autotrace traceonly set linesize 1000 select /*+index(t idx_object_id)*/ * from t where object_id=19; Execution Plan ---------------------------------------------------------- Plan hash value: 2041828949 ------------------------------

oracle分区表运行计划

分区表有非常多优点,以大化小,一小化了,加上并行的使用,在loap中能往往能提高几十倍甚至几百倍的效果. 当然表设计得不好也会适得其反.效果比普通表跟糟糕. 为了更好的使用分区表,这里看一下分区表的运行计划. PARTITION RANGE ALL:扫描全部分区 PARTITION RANGE ITERATOR:扫描多个分区,小于全部个分区数量 PARTITION RANGE SINGLE:扫描单一的分区 KEY,表示运行时才知道哪个分区 看到keywordALL的时候就要注意了,扫描的是全部分

查看Oracle SQL执行计划的常用方式

在查看SQL执行计划的时候有很多方式 我常用的方式有三种 SQL> explain plan for 2 select * from scott.emp where ename='KING'; 已解释. 第一种 最常用的 SQL> select * from table(dbms_xplan.display); Plan hash value: 3956160932 ----------------------------------------------------------------