SQL调优之一:获取执行计划的N种方式

1, EXPLAIN PLAN

example:

EXPLAIN PLAN
 FOR
SELECT last_name FROM employees;

set long 99999
set line 200 pages 300
select * from table(dbms_xplan.display());

特点:

  • explain plan不支持date绑定变量的数据类型隐式转换
  • 当有绑定变量的时候,explain plan 不一定代表真实的执行计划
  • explain plan的结果都只是估算,并不是真正执行的结果

 

2,SQL_TRACE

example:

https://docs.oracle.com/cd/B28359_01/server.111/b28274/sqltrace.htm#PFGRF01010

需要使用TKPROF工具对trace文件进行格式化,可以使用DBMS_SESSION or DBMS_MONITOR来替代使用这个参数,更加灵活,不过一般不需要,alter session,然后在当前session运行命令即可。

特点:

  • 真实执行计划
  • 可以获得绑定变量值
  • 可以获得详细的执行统计信息

 

3,10053事件

example:

alter session set events '10053 trace name context forever, level 1';

SELECT last_name FROM employees;

alter session set events '10053 trace name context off';

 

特点:

  • 真实执行计划
  • 用来查看优化器的成本计算过程

 

4, AUTOTRACE

example:

SET AUTOTRACE OFF ---------------- 不生成AUTOTRACE 报告,这是缺省模式
SET AUTOTRACE ON EXPLAIN ------ AUTOTRACE只显示优化器执行路径报告
SET AUTOTRACE ON STATISTICS -- 只显示执行统计信息
SET AUTOTRACE ON ----------------- 包含执行计划和统计信息
SET AUTOTRACE TRACEONLY ------ 同set autotrace on,但是不显示查询输出

 

特点:

  • 可以选择显示执行统计信息
  • 可以选择显示输出
  • 真实执行计划,相当于执行SQL后自动从plan table获取执行计划

 

 

5,DBMS_XPLAN

example:

真实计划:

select * from table(dbms_xplan.display_cursor('sql_id',null,'ALLSTATS LAST));

历史计划:

select * from table(dbms_xplan.display_awr('sql_id','plan_hash_value'));

 

6,其他

awrsqrpt

sqlt

sqlhc

pl/sql

sql developer

toad等

posted @ 2019-09-14 11:15  Ryan_Wo  阅读(515)  评论(0编辑  收藏  举报