Oracle 执行计划

查看执行计划的方法:


1.Explain Plan For SQL

不实际执行SQL诧句,生成的计划未必是真实执行的计划

必须要有plan_table


2.SQLPLUS AUTOTRACE

除set autotrace traceonly explain外均实际执行SQL,但仍未必是真实计划必须要有plan_table


3.SQL TRACE

需要启用10046戒者SQL_TRACE

一般用tkprof看的更清楚些,当然10046里本身也有执行计划信息


4.V$SQL和V$SQL_PLAN

可以查询到多个子游标的计划信息了,但是看起来比较费劲


5.Enterprise Manager

可以图形化显示执行计划,但并非所有环境有EM可用


6.其他第三方工具

注意 PL/SQL developer之类工具F5看到的执行计划未必是真实的



查看详细执行计划:


alter session set STATISTICS_LEVEL = ALL; --不设置无法获得A-ROWS等信息

如果输入NULL 则默认为之前运行的一条SQL,但注意要保持set serveroutput off,否则最后一句SQL将丌是你运行的SQL:

alter session set STATISTICS_LEVEL = ALL;

set serveroutput off;

select * From DATA_SKEW_HB where source='Maclean Search';

SQL> select * from TABLE(dbms_xplan.display_cursor('fk641nh8gjzvk',NULL,'ADVANCED +PEEKED_BINDS'));

SQL> select * from table(dbms_xplan.DISPLAY_CURSOR(null, null, 'ALLSTATS'));

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------------
SQL_ID dyysbpz0y6aw2, child number 0
-------------------------------------
select * From DATA_SKEW_HB where source='Maclean Search'
Plan hash value: 2604078056
--------------------------------------------------------------------------------------------
| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers |
--------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | | 2000 |00:00:00.02 | 4378 |
|* 1 | TABLE ACCESS FULL| DATA_SKEW_HB | 1 | 370 | 2000 |00:00:00.02 | 4378 |
--------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter("SOURCE"='Maclean Search')
alter session set STATISTICS_LEVEL = TYPICAL;
E-Rows 是优化器评估返回的行数
A-Rows 是实际执行时返回的行数



格式:

ALLSTATS IOSTATS + MEMSTATS

IOSTATS 显示该游标累计执行的IO统计信息(Buffers, Reads)

MEMSTATS 累计执行的PGA使用信息(Omem 1Mem Used-Mem)

LAST 仅显示最后一次执行的统计信息

Advanced 显示outline、Query Block Name、 Column Projection等信息

PEEKED_BINDS 打印解析时使用的绑定变量

Typical 丌打印PROJECTION, ALIAS 组合使用的方式如下,注意每个关键词后面要加空格

例如 ‘typical +peeked_binds’ => work ‘typical+peeked_binds’ => Error: format 'TYPICAL+peeked_binds' not valid for DBMS_XPLAN

推荐格式:

ALTER SESSION SET STATISTICS_LEVEL=ALL;

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


父子游标

使用脚本查询SQL_ID

select sql_id,sql_text from v$SQL Where

sql_text not like '%like%'

and sql_text like '%$SQL%'; --$SQL处填入你的SQL的文本

为了避免你的SQL和其他SQL混在一起,考虑增加一个注释 例如

Select /* MACLEAN_TEST_PLAN_1 */ * from MAC;

如果你之前执行过该诧句,那么为了引发该诧句的再次硬解析,对注释略作修改,例如上面的 PLAN_1 改为PLAN_2

父游标所在

Select * from v$SQLAREA where SQL_ID=%YOUR_SQL_ID%;

子游标:执行计划和优化环境

Select * from v$SQL where SQL_id=%YOUR_SQL_ID%;

计划:

Select * from v$SQL_PLAN where SQL_id=%YOUR_SQL_ID%;

优化环境:

Select * from v$SQL_OPTIMIZER_ENV where SQL_id=%YOUR_SQL_ID%;



你可能感兴趣的:(oracle,计划,执行)