oracle优化4(sql语句性能诊断,sql执行计划)

什么是优化

优化是选择最有效的执行计划来执行SQL语句的过程,这是在处理任何数据的语句(SELECT,INSERT,UPDATEDELETE)中的一个重要步骤。对Oracle来说,执行这样的语句有许多不同的方法,譬如说,将随着以什么顺序访问哪些表或索引的不同而不同。所使用的执行计划可以决定语句能执行得有多快。Oracle中称之为优化器(Optimizer)的组件用来选择这种它认为最有效的执行计划。

 

 

什么是执行计划

在运行一条DML语句时,oracle可能需要执行多个步骤。例如,从数据库物理文件中获取数据行,或将数据整理为提交语句的用户所需的形式。Oracle运行一条语句的所有步骤被告称为语句的执行计划(execution plan)。执行计划中包括语句所需数据所在数据表的访问方式,以及数据表的访问顺序(即关联顺序)。

 

如果查看执行计划

EXPLAIN PLAN

SQL*PLUS autotrace feature

 

EXPLAIN PLAN

1解释执行计划

执行文件:rdbms/admin/utlxplan.sql

Explain plan for select语句

2查看执行计划的信息

1)、查询plan_table

select * from plan_table;

2)、使用脚本 utlxpls.sql

3)、使用包:dbms_xplan

select * from table(dbms_xplan.display);

 

说明:产生的计划需要按照从里到外,从上到下的次序解读分析的结果. EXPLAIN PLAN分析的结果是用缩进的格式排列的, 最内部的操作将被最先解读, 如果两个操作处于同一层中,带有最小操作号的将被首先执行

如:

SELECT * FROM dept, emp WHERE emp.deptno = dept.deptno

 

14 rows selected.

Execution Plan

----------------------------------------------------------

   0      SELECT STATEMENT Optimizer=CHOOSE

   1    0   NESTED LOOPS

   2    1     TABLE ACCESS (FULL) OF 'EMP'

   3    1     TABLE ACCESS (BY INDEX ROWID) OF 'DEPT'

   4    3       INDEX (UNIQUE SCAN) OF 'PK_DEPT' (UNIQUE)

 

通过以上分析,可以得出实际的执行步骤是:

1.  TABLE ACCESS (FULL) OF 'EMP'

2.  INDEX (UNIQUE SCAN) OF 'PK_DEPT' (UNIQUE)

3.  TABLE ACCESS (BY INDEX ROWID) OF 'DEPT'

4.  NESTED LOOPS (JOINING 1 AND 3)

 

SQL*PLUS autotrace feature

使用autotrace

语法:set autotrace { off | on | traceonly | explain | statistics  }

SET AUTOTRACE OFF 此为默认值,即关闭Autotrace
SET AUTOTRACE ON EXPLAIN
只显示执行计划
SET AUTOTRACE ON STATISTICS  
只显示执行的统计信息
SET AUTOTRACE ON
包含2,3两项内容

SET AUTOTRACE TRACEONLY   ON相似,但不显示语句的执行结果。

 

Autotrace执行计划的各列的涵义
ID_PLUS_EXP
:每一步骤的行号
PARENT_ID_PLUS_EXP
:每一步的Parent的级别号
PLAN_PLUS_EXP
:实际的每步
OBJECT_NODE_PLUS_EXP
   Dblink或并行查询时才会用到

AUTOTRACE Statistics
常用列解释
db block gets
:从buffer cache中读取的block的数量
consistent gets
:从buffer cache中读取的undo数据的block的数量
physical reads
:从磁盘读取的block的数量
redo size DML
:生成的redo的大小
sorts (memory)
:在内存执行的排序量
sorts (disk)
在磁盘上执行的排序量
posted @ 2011-04-03 10:28  liuqun  阅读(668)  评论(0编辑  收藏  举报