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等