如何解读执行计划(上)

对于top sql分析和定位时候,一般要分析执行计划。在了解执行计划时候,需要知道Oracle数据库在访问我们想要记录的时候过程,叫数据访问路径(DAP:date access process,im:行访问方法)。三种访问路径:table access full、索引、rowid。每一条记录有一个唯一标识,叫rowid。索引作用:映射某一个key,这个key就是一个或者多个列的值,key与rowid之间有maping关系,我们也可以直接通过rowid访问。多表之间连接没有where条件所产生结果不是交集,而是笛卡尔积。执行计划告诉我们Oracle怎么样去执行sql语句访问数据方法以及访问这些对象的顺序,并且会显示在访问过程当使用了哪些对象。
使用explan命令输出我们查询执行计划,理论上来说explan命令可以对任何sql语句(dml、ddl)显示执行计划。如果生成ddl执行计划需要具有访问一系列数据字典权限,如果生成dml执行计划需要具有sql语句中对象权限。explan仅仅是解析执行计划,而不会执行。如果不执行仅仅是解析,有可能执行计划会失真。因为真正使用执行计划时候需要根据统计信息生成执行计划,在绝大多数情况explan命令产生执行计划与真实执行产生执行计划是一样的。
The EXPLAIN command output shows query execution plans.
The statement is only parsed (not executed).
Run utlxplan.sql to create the PLAN_TABLE.
Use v sqlplantoseeexecutionplansinthelibrarycacheUseutlxpls.sqltoformattheplanintheplantableUsetheDBMSXPLANpackageUseSQLPlusAUTOTRACEUseSQLTraceandTKPROFtkprof10046traceBestapproach:gettheruntimeplaninV SQL_PLAN
9x: Use the script below
10g: Use DBMS_XPLAN.DISPLAY_CURSOR() or EM (but tough to send from Customer to Support)
Get the Runtime plan in 10046
Appears with “STAT #” lines, but cursor must be closed
优化原则:访问方法尽可能直接找到我们想要的数据,并且用尽可能少的系统资源。
执行计划:一般以parent id为0开始执行sql语句,每一个parent都有child,如果有child先执行,如果有多个并行child,child id小的先执行。
Requirements to use AUTOTRACE:
A PLAN_TABLE
The PLUSTRACE role privileges
to retrieve statistics from some v$ views
SET AUTOTRACE {OFF|ON|TRACEONLY}
[EXPLAIN]
[STATISTICS]
TRACEONLY
Runs the query
Does not show query results
Shows statistics and execution plan
TRACEONLY EXPLAIN
Shows the execution plan without statistics
Does not execute the query(这里指select语句)
dml(insert、update、delete) is execute

Viewing Execution Plans Using DBMS_XPLAN.DISPLAY()
What is DBMS_XPLAN?
Formatting utility for execution plans
Sources: PLAN_TABLE, V$SQL_PLAN, AWR
Source: PLAN_TABLE, use DISPLAY()
Populate using EXPLAIN PLAN
Drawbacks with bind peeking as discussed
dbms_xplan.display (table_name varchar2 default ‘PLAN_TABLE’,
statement_id varchar2 default null,
format varchar2 default ‘TYPICAL’)
table_name: name of plan table
statement_id: statement id used in EXPLAIN PLAN cmd
format: BASIC, TYPICAL, ALL, SERIAL

显示已经被解析过sql语句,如果不是Oracle bug,就是真正执行计划。
Viewing Execution Plans Using DBMS_XPLAN.DISPLAY_CURSOR()
Source: V SQLPLAN,useDISPLAYCURSOR()Statementmusthavebeenparsedandinv sql_plan already
Ideally, statement was executed and actual runtime stats there
dbms_xplan.display_cursor (sql_id varchar2 default null,
cursor_child_no integer default 0,
format varchar2 default ‘TYPICAL’)
By default, will display plan for LAST executed statement by the session
Use ALTER SESSION SET STATISTICS_LEVEL = ALL with format “RUNSTATS_LAST”
Must have select privs on V SQLPLANSTATISTICSALL,V SQL, V SQLPLAN,V SESSION
优化方面:存储规化、发现存储规化毛病、坏了几块盘就不能用了、sql等等。

你可能感兴趣的:(如何解读执行计划(上))