学无止境
分类: Oracle
2013-12-04 15:39:53
什么是执行计划:
执行计划是由优化器产生的一组执行SQL语句及执行操作的步骤。
当语句执行时,优化器要执行很多步骤。这些步骤中的每一步要么是获取数据行,或者是准备某种处理方式,这些步骤的组合被称为执行计划。
查看执行计划的方法:
1.EXPLAIN PLAN
2.SQL Trace
3. Automatic Workload Repository
4. V$SQL_PLAN
5.SQL*Plus的AUTOTRACE
6.第三方ORACLE工具,PL/SQL developer,Toad
执行计划的用途:
1.确认当前的执行计划。
2.检验在表上创建索引的效果。
3.找到游标包含的正确访问路径。
4.检验有无索引,优化器的选择是否有差异。
5.确认优化器是否选择的预期的执行计划。
用执行计划来决定什么:
1.删除或创建索引。
2.对象的统计信息是否需要收集。
3.修改参数值。
4.升级应用或数据库。
使用SQL*Plus的autotrace:
set autotrace traceonly
set autotrace statistics
例如:
----------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
----------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 420 | 15120 | 13 (8)| 00:00:01 |
| 1 | MERGE JOIN | | 420 | 15120 | 13 (8)| 00:00:01 |
| 2 | TABLE ACCESS BY INDEX ROWID| TAB2 | 420 | 13020 | 11 (0)| 00:00:01 |
| 3 | INDEX FULL SCAN | PK_TAB2 | 420 | | 7 (0)| 00:00:01 |
|* 4 | SORT JOIN | | 420 | 2100 | 2 (50)| 00:00:01 |
| 5 | INDEX FULL SCAN | TAB1ID | 420 | 2100 | 1 (0)| 00:00:01 |
----------------------------------------------------------------------------------------
统计的含义:
db block gets 当前读的逻辑IO,通常发生在DML中,由于DML需要读块的最新值。
consistent gets 一致读,buffer cache的读,通常select语句更多,有可能是需要通过undo来构建。
physical reads 磁盘读的块数量
redo size DML语句中产生的redo的数量
sorts (memory) 内存排序的数量
sorts (disk) 使用临时磁盘存储排序的数量
DBMS_XPLAN包的使用:
1.查看V$SQL_PLAN视图中保存的过去的SQL的执行计划
SELECT PLAN_TABLE_OUTPUT FROM
TABLE(DBMS_XPLAN.DISPLAY_CURSOR('47ju6102uvq5q'));
2.查看AWR中保存的执行计划:
SELECT PLAN_TABLE_OUTPUT FROM
TABLE(DBMS_XPLAN.DISPLAY_AWR('454rug2yva18w'));