前言

分析某条SQL的性能问题,通常我们要先看SQL的执行计划,看看SQL的每一步执行是否存在问题。常用的两种方法查看SQL执行计划。

1、autotrace生成执行计划

这种方式执行方便,但是当遇到执行时间长的SQL就变得不太现实,它是先产生结果再生成执行计划的。关于Autotrace几个常用选项的说明:

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

步骤1 sqlplus登录数据库

步骤2 打开autotrace

1
SQL> set autotrace on explain

步骤3 输入要查看的SQL

1
2
3
4
5
6
7
SQL> select po.charge, po.new_charge, po.avg_charge
         from lbi_ls_basic.t_l_acct_sum_po_sum_d  po,
             lbi_dim_basic.t_d_dyn_pkgname     pkg,
             lbi_dim_basic.t_d_dyn_tenant_def     def
 where po.subcosid = pkg.productkey(+)
         and po.tenantid = def.tenantid(+); 
返回执行计划结果

步骤4 关闭autotrace

1
2
SQL> set autotrace off
----结束

2、explain plan for 生成执行计划

这种方式是直接产生执行计划,不会产生SQL结果。

步骤1 sqlplus登录数据库

步骤2 执行explain plan for语句

1
2
3
4
5
6
7
SQL> explain plan for 
select po.charge, po.new_charge,po.avg_charge
           from lbi_ls_basic.t_l_acct_sum_po_sum_d   po,
                lbi_dim_basic.t_d_dyn_pkgname       pkg,
                lbi_dim_basic.t_d_dyn_tenant_def     def
       where po.subcosid = pkg.productkey(+) and po.tenantid = def.tenantid(+)
       ;

步骤3 查询执行计划

1
2
3
SQL> select * from table(dbms_xplan.display);
返回结果:略
----结束

3、小结

以上都是不借助图形化的工具,借助图形化的工具后方便很多,比如:PL/SQL Developer强大的不行,或者Toad也行。