查看oracle的执行计划

oracle 常用有下面7种读取执行计划的方法,图太丑建议复制出来看

序号 方法 简介 SQL语句是否真实执行过 是否真实执行计划 特性 物理\逻辑读\递归调用 运行时间 处理行数 表访问次数 等待事件 解析时间
1 explain plan 存储在计划表中的执行计划(默认plan_table) 计划表
2 set autotrace SET AUTOTRACE OFF 此为默认值,即关闭AUTOTRACE                  
SET AUTOTRACE ON 包含SQL语句的执行结果、SQL语句执行结果的数量、执行计划和统计信息内容  
SET AUTOTRACE ON EXPLAIN 包含SQL语句的执行结果、SQL语句执行结果的数量和执行计划  
SET AUTOTRACE ON STATISTICS 包含SQL语句的执行结果、SQL语句执行结果的数量和统计信息内容  
SET AUTOTRACE TRACEONLY 包含SQL执行结果的数量、执行计划和统计信息内容,但不显示SQL语句的执行结果  
SET AUTOTRACE TRACEONLY EXPLAIN 同EXPLAIN PLAN命令,对于SELECT语句不会执行,只显示目标SQL的执行计划,但是对于DML语句还是会执行的,而且显示SQL语句执行结果的数量和执行计划 DQL,DML  
SET AUTOTRACE TRACEONLY STATISTICS 显示SQL语句执行结果的数量和统计信息,不显示执行计划和SQL执行结果 DQL,DML  
3 DBMS_XPLAN DBMS_XPLAN.DISPLAY EXPLAIN PLAN FOR SQL语句;
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY(NULL,NULL,'ADVANCED'));
不确定 计划表
DBMS_XPLAN.DISPLAY_CURSOR('kɜːsə) ALTER SESSION SET STATISTICS_LEVEL=ALL ; 库存中的游标缓存
执行SQL SELECT /*+ GATHER_PLAN_STATISTICS*/ …
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(NULL,NULL,'ALLSTATS LAST'));
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR('&SQLID',0,'BASIC LAST ALLSTATS ADVANCED'));
DBMS_XPLAN.DISPLAY_CURSOR 没有设置STATISTICS_LEVEL=ALL或没有使用/*+ GATHER_PLAN_STATISTICS*/的Hint:
SELECT  * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR('&SQLID')); --从内存得到执行计划
DBMS_XPLAN.DISPLAY_AWR DISPLAY_AWR函数显示存储在AWR历史数据的执行计划。SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_AWR('&SQLID')); AWR仓库基表WRH$SQL_PALN
DBMS_XPLAN.DISPLAY_SQLSET DISPLAY_SQLSET函数显示存储在一个SQL调优集中的语句的执行计划,SQL调优集查询DBA_SQLSET_STATEMENTS,查询执行计划的SQL语句为:SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_SQLSET('&SQLSET','&SQLID',NULL,'BASIC ALLSTATS ADVANCED')); SQL set视图
DBMS_XPLAN.DISPLAY_SQL_PLAN_BASELINE DISPLAY_SQL_PLAN_BASELINE函数显示存储在数据字典当中SQL执行计划基线的计划。执行计划基线所属SQL的句柄名称(SQL_HANDLE)可以通过视图DBA_SQL_PLAN_BASELINES查询,查询执行计划的SQL语句为:SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_SQL_PLAN_BASELINE(SQL_HANDLE => ));  
4 SQL_TRACE、事件10046、10053跟踪 1(传统方法)step 1 ALTER SESSION SET EVENTS '10046 TRACE NAME CONTEXT  FOREVER,LEVEL 12';
step 2
执行SQL语句
step 3 ALTER SESSION SET EVENTS '10046 TRACE NAME CONTEXT OFF';
step 4 TKPROF
格式化TRACE文件
 
2 dbms_support
3 dbms_monitor
step 1 dbms_monitor.session_trace_enable(session_id>=123,serial_num=123456,waits=true,binds=false);
dbms_monitor.session_trace_disable(session_id>=123,serial_num=123456)

5 awrsqrpt.sql @?/rdbms/admin/awrsqrpt.sql  
SELECT OUTPUT FROM TABLE(DBMS_WORKLOAD_REPOSITORY.AWR_SQL_REPORT_HTML(V_DBID,V_INST_ID,V_MIN_SNAP_ID,V_MAX_SNAP_ID,V_SQLID));
6 SQL实时监控特性:DBMS_SQLTUNE.REPORT_SQL_MONITOR SELECT DBMS_SQLTUNE.REPORT_SQL_MONITOR('&SQLID') FROM DUAL ;  
SELECT DBMS_SQLTUNE.REPORT_SQL_MONITOR(SQL_ID=>'&SQLID',TYPE=>'ACTIVE',REPORT_LEVEL=>'ALL') AS REPORT FROM DUAL;
7 v$sqlv$sql_plan select * from v$sql_plan where sql_id='xxxxxxx' 来自数据字典,不是很直观故不太常用 1 1 1 1 1 1

猜你喜欢

转载自blog.csdn.net/kuyushow/article/details/79438795