www.6766.comORACLE数据库查看执行计划的方法

3: 在SQL*PLUS下(有些命令在PL/SQL下无效卡塔尔试行如下命令: 复制代码 代码如下: SQLSET TIMING ON
–调整展现施行时间计算数据 SQLSET AUTOTRACE ON EXPLAIN
–这样设置包罗实行安插、脚本数据输出,未有总计音信SQL执行需求查阅实施安排的SQL语句 SQLSET AUTOTRACE OFF
–不生成AUTOTRACE报告,那是缺省情势 SQL SET AUTOTRACE ON
–那样设置满含试行计划、总计音信、以至脚本数据输出
SQL实施须求查阅实践计划的SQL语句 SQLSET AUTOTRACE OFF SQL SET AUTOTRACE
TRACOONLY –那样设置会有进行陈设、总括音讯,不会有脚本数据输出
SQL实施供给查阅施行陈设的SQL语句 SQLSET AUTOTRACE TRA主管NLY STAT
–那样设置只含有有总结新闻 SQL实行必要查阅施行布置的SQL语句

———- Parse 2 0.00 0.00 0 0 0 0 Execute 1 0.00 0.00 0 0 0 0 Fetch 1
0.00 0.00 0 7 0 14 ——- —— ——– ———- ———-
———- ———- ———- total 4 0.00 0.00 0 7 0 14 Misses in
library cache during parse: 1 Optimizer mode: CHOOSE Parsing user id: 89
(ETL) Rows Execution Plan ——-
————————————————— SELECT STATEMENT
MODE: CHOOSE TABLE ACCESS MODE: ANALYZED (FULL) OF ‘EMP’ (TABLE)
********************************************************************************
ALTER SESSION SET SQL_TRACE = FALSE call count cpu elapsed disk query
current rows ——- —— ——– ———- ———- ———-
———- ———- Parse 1 0.00 0.00 0 0 0 0 Execute 1 0.00 0.00 0 0
0 0 Fetch 0 0.00 0.00 0 0 0 0 ——- —— ——– ———-
———- ———- ———- ———- total 2 0.00 0.00 0 0 0 0
Misses in library cache during parse: 1 Optimizer mode: CHOOSE Parsing
user id: 89 (ETL)
********************************************************************************
OVERALL TOTALS FOR ALL NON-RECURSIVE STATEMENTS call count cpu elapsed
disk query current rows ——- —— ——– ———- ———-
———- ———- ———- Parse 5 0.00 0.00 0 0 0 0 Execute 5
0.00 0.00 0 0 0 2 Fetch 1 0.00 0.00 0 7 0 14 ——- —— ——–
———- ———- ———- ———- ———- total 11 0.00
0.00 0 7 0 16 Misses in library cache during parse: 2 Misses in library
cache during execute: 1 OVERALL TOTALS FOR ALL RECURSIVE STATEMENTS call
count cpu elapsed disk query current rows ——- —— ——–
———- ———- ———- ———- ———- Parse 0 0.00 0.00
0 0 0 0 Execute 0 0.00 0.00 0 0 0 0 Fetch 0 0.00 0.00 0 0 0 0 ——-

TKPROF的赞助音讯如下

2.实践陈设中字段解释

4.1 在大局启用,在参数文件,研讨SQL试行时,发现后台

SQL SET AUTOTRACE ON;

复制代码 代码如下: TKPROF 选项 选项 说明TRACEFILE 追踪输出文件的名称 OUTPUTFILE 已安装格式的文书的名目
SORT=option 语句的排序依次 PRAV4INT=n 打字与印刷前 n 个语句 EXPLAIN=user/password
以钦赐的客商名运营 EXPLAIN PLAN INSERT=filename 生成 INSERT 语句 SYS=NO
忽视作为客户 sys 运行的递归 SQL 语句 AGGREGATE=[Y|N] 假设指定AGGREGATE = NO TKPROF 不凑合照通 SQL 文本的三个客户 RECOHighlanderD=filename
记录在追踪文件中窥见的口舌 TABLE=schema.tablename
将施行安顿归入钦点的表并不是缺省的PLAN_TABLE 可以在操作系统中键入
tkprof 以获得全体可用选项和输出的列表 注 排序选项有 排序 选项表明 prscnt
execnt fchcnt 调用深入分析推行提取的次数 prscpu execpu fchcpu
解析实行提取所占领的 CPU 时间 prsela exela fchela
深入分析施行提取所占用的时刻 prsdsk exedsk fchdsk
剖判实施提取时期的磁盘读取次数 prsqry exeqry fchqry
深入分析施行提取时期用于不断读取的缓冲区数 prscu execu fchcu
深入分析施行提取时期用于当前读取的缓冲区数 prsmis exemis
解析施行时期库高速缓存未命中的次数 exerow fchrow 剖判实施时期管理的行数
userid 解析游标的客商的顾客 ID TKPROF 总计数据 Count: 实践调用数 CPU:
CPU 的选用秒数 Elapsed: 总共用去的岁月 Disk: 物理读取次数 Query:
持续读取的逻辑读取数 Current: 当前方式下的逻辑读取数 Rows: 已管理行数
TKPROF 总括音信 计算 含义 Count
深入分析或举办语句的次数以致为语句发出的领取调用数 CPU
各类阶段的拍卖时间以秒为单位假诺在分享池中找到该语句对于剖判阶段为 0
Elapsed 占用时间以秒为单位平日不是特别管用因为别的进度影响占用时间 Disk
从数据库文件读取的轮廓数据块假若该多少被缓冲则该计算或然相当低 Query
为持续读取检索的逻辑缓冲区常常用于 SELECT 语句 Current
在日前格局下搜寻的逻辑缓冲区平时用于 DML 语句 Rows
外界语句所管理的行对于 SELECT 语句在领取阶段显示它对于 DML
语句在实行阶段展现它 Query 和Current 的总的数量为所访问的逻辑缓冲区的总额
推行上面镇定自若:tkprof
D:ORACLEPRODUCT10.2.0DB_1RDBMSTRACE/wgods_ora_3940.trc
h:out.txtoutputfile explain=etl/etl
实践上边命令后,能够查阅生成的文本文件 复制代码 代码如下: TKPROF: Release 10.2.0.1.0 –
Production on 星期二 七月 23 16:56:41 2013 Copyright (c卡塔尔(قطر‎ 壹玖捌贰, 二零零六,
Oracle. All rights reserved. Trace file:
D:ORACLEPRODUCT10.2.0DB_1RDBMSTRACE/wgods_ora_3940.trc
Sort options: default
********************************************************************************
count = number of times OCI procedure was executed cpu = cpu time in
seconds executing elapsed = elapsed time in seconds executing disk =
number of physical reads of buffers from disk query = number of buffers
gotten for consistent read current = number of buffers gotten in current
mode (usually for update) rows = number of rows processed by the fetch
or execute call
********************************************************************************
ALTER SESSION SET SQL_TRACE = TRUE call count cpu elapsed disk query
current rows ——- —— ——– ———- ———- ———-
———- ———- Parse 0 0.00 0.00 0 0 0 0 Execute 1 0.00 0.00 0 0
0 0 Fetch 0 0.00 0.00 0 0 0 0 ——- —— ——– ———-
———- ———- ———- ———- total 1 0.00 0.00 0 0 0 0
Misses in library cache during parse: 0 Misses in library cache during
execute: 1 Optimizer mode: CHOOSE Parsing user id: 89 (ETL)
********************************************************************************
begin :id := sys.dbms_transaction.local_transaction_id; end; call
count cpu elapsed disk query current rows ——- —— ——–
———- ———- ———- ———- ———- Parse 2 0.00 0.00
0 0 0 0 Execute 2 0.00 0.00 0 0 0 2 Fetch 0 0.00 0.00 0 0 0 0 ——-

total 0 0.00 0.00 0 0 0 0 Misses in library cache during parse: 0 user
SQL statements in session. internal SQL statements in session. SQL
statements in session. statement EXPLAINed in this session.
********************************************************************************
Trace file:
D:ORACLEPRODUCT10.2.0DB_1RDBMSTRACE/wgods_ora_3940.trc
Trace file compatibility: 10.01.00 Sort options: default session in
tracefile. user SQL statements in trace file. internal SQL statements in
trace file. SQL statements in trace file. unique SQL statements in trace
file. SQL statements EXPLAINed using schema: ETL.prof$plan_table
Default table was used. Table was created. Table was dropped. lines in
trace file. elapsed seconds in trace file.
4.3追踪此外顾客的进度,在重重时候大家供给追踪别的客商的经过,并非当下客户,能够经过ORACLE提供的种类包
DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION来成功。 比方: 复制代码 代码如下: SELECT SID, SE逍客IAL#,
USERNAME FROM V$SESSION WHERE USERNAME = ‘ETL’ EXEC
DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION(61,76,TRUE); EXEC
DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION(61,76,FALSE卡塔尔; 5 利用10046事变
复制代码 代码如下: ALTE哈弗 SESSION SET
TRACEFILE_IDENTIFIER = 10046; ALTER SESSION SET EVENTS=’10046 trace
name context forever, level 8′; SELECT * FROM SCOTT.EMP; ALTEQX56 SESSION
SET EVENTS =’10046 trace name context off’;
然后你可以用脚本查看追踪文件的职分 SELECT T.VALUE || ‘/’ ||
LOWEPAJERO(RTWranglerIM(I.INSTANCE, CH凯雷德(0State of QatarState of Qatar卡塔尔国 || ‘_ora_’ || P.SPID || ‘.trc’
TRACE_FILE_NAME FROM ( SELECT P.SPID FROM V$MYSTAT M, V$SESSION S,
V$PROCESS P WHERE M.STATISTIC# =1 AND S.SID = M.SID AND P.ADDR =
S.PADDR ) P, ( SELECT T.INSTANCE FROM V$THREAD T, V$PARAMETER V WHERE
V.NAME =’thread’ AND (V.VALUE = 0 OR T.THREAD# = TO_NUMBER(V.VALUE)) )
I, (SELECT VALUE FROM V$PARAMETER WHERE NAME=’user_dump_dest’卡塔尔(قطر‎ T
查询结果为wgods_ora_28279.trc文件,
不过去相应目录却还未找到呼应的追踪文件,而是如下trace文件:wgods_ora_28279_10046.trc
6 利用10053事变 有一些相近10046,在这里略过、 7 系统视图
通过上边一些种类视图,你能够观察局部散装的实行安顿的连锁音讯,有乐趣的话能够多去商讨一下。
复制代码 代码如下: SELECT * FROM
V$SQL_PLAN SELECT * FROM V$RSRC_PLAN_CPU_MTH SELECT * FROM
V$SQL_PLAN_STATISTICS SELECT * FROM V$SQL_PLAN_STATISTICS_ALL
SELECT * FROM V$SQLAREA_PLAN_HASH SELECT * FROM
V$RSRC_PLAN_HISTOLANDY 三、看懂实践安插 1.实践顺序
实行各种的口径是:由上至下,从右向左
由上至下:在推行布置中貌似包涵八个节点,相通品级(或并列State of Qatar的节点,靠上的事情未发生前实践,靠下的后推行从右向左:在有个别节点下还设有多个子节点,先从最靠右的子节点开端试行。
当然,你在PL/SQL工具中也得以透过它提供的功能来查阅实行各类。如下图所示:

Cannot SET AUTOTRACE

风度翩翩、什么是实施安顿
实践布署:一条查询语句在ORACLE中的试行进度或访谈路线的陈诉。
二、如何查看实施布署 1:
在PL/SQL下按F5翻看施行陈设。第三方工具toad等。
很两人感觉PL/SQL的实践陈设只得看看基数、优化器、花费等基本音信,其实那几个能够在PL/SQL工具里面安装的。可以看看超多其余新闻,如下所示
2: 在SQL*PLUS(PL/SQL的通令窗口和SQL窗口均可卡塔尔国下施行上边步骤 复制代码 代码如下: SQLEXPLAIN PLAN FOCRUISER SELECT
* FROM SCOTT.EMP; –要剖析的SQL脚本 SQLSELECT * FROM
TABLE(DBMS_XPLAN.DISPLAY);


total 4 0.00 0.00 0 0 0 2 Misses in library cache during parse: 0
Optimizer mode: CHOOSE Parsing user id: 89 (ETL)
********************************************************************************
SELECT * FROM SCOTT.EMP call count cpu elapsed disk query current rows

错误等。

参照他事他说加以考察文书档案:SQLPlus User’s Guide and Reference Release 11.1


4:SQL_TRACE可以看成参数在大局启用,也足以因而命令情势在实际SESSION启用

复制代码 代码如下: SQL ALTE凯雷德 SESSION SET
SQL_TRACE=TRUE; SQL SELECT * FROM SCOTT.EMP; SQL ALTER SESSION SET
SQL_TRACE =FALSE; 那么那个时候怎么着查占星关信息?不管您在SQL*PLUS抑或PL/SQL
DEVELOPEEscort工具里面执行上边脚本过后都看不到什么新闻,你能够通过下边脚本查询到trace日志音信复制代码 代码如下: SELECT T.VALUE || ‘/’
|| LOWE科雷傲(RTMuranoIM(I.INSTANCE, CH奥迪Q5(0State of Qatar卡塔尔(قطر‎卡塔尔(قطر‎ || ‘_ora_’ || P.SPID || ‘.trc’
TRACE_FILE_NAME FROM ( SELECT P.SPID FROM V$MYSTAT M, V$SESSION S,
V$PROCESS P WHERE M.STATISTIC# =1 AND S.SID = M.SID AND P.ADDR =
S.PADDR ) P, ( SELECT T.INSTANCE FROM V$THREAD T, V$PARAMETER V WHERE
V.NAME =’thread’ AND (V.VALUE = 0 OR T.THREAD# = TO_NUMBER(V.VALUE)) )
I, (SELECT VALUE FROM V$PARAMETER WHERE NAME=’user_dump_dest’) T

SQL 名词解释: recursive calls 递归调用 db block gets 从buffer
cache中读取的block的多寡当前乞请的块数目,当前方式块意思正是在操作中正巧提取的块数目,实际不是在意气风发致性读的情况下而发生的平常情状下,二个查询提取的块是在询问查询初步的卓殊时间点上存在的数据库,当前块是在这里个时候存在数据块,并非其一时间点之前如故现在的的数据块数目。
consistent gets 从buffer
cache中读取的undo数据的block的数目多少乞请总的数量在回滚段Buffer中的数据大器晚成致性读所急需的数据块,,这里的定义是在你管理你这几个操作的时侯须求在风姿罗曼蒂克致性读状态上管理多少个块,那一个块发生的关键原因是因为您在询问进程中,由于别的对话对数码
块进行操作,而对所要查询的块有了改良,不过出于大家的询问是在那个修正以前调用的,所要要求对回滚
段中的数据块的前影象开展询问,以保险数据的生机勃勃致性。那样就发生了大器晚成致性读。
physical reads 物理读 就是从磁盘上读取数据块的数额。其发出的机要缘由是:
1:在数据库高速缓存中子虚乌有此些块。 2:全表扫描 3:磁盘排序 redo size
DML生成的redo的尺寸 sorts (memory卡塔尔 在内部存款和储蓄器实行的排序量 sorts (disk卡塔尔在磁盘推行的排序量 2091 bytes sent via SQL*Net to client
从SQL*Net向客商端发送了2091字节的数据 416 bytes received via SQL*Net
from client 客商端向SQL*Net发送了416字节的多少。 参谋文书档案:SQLPlus
User’s Guide and Reference Release 11.1 db block gets 、 consistent gets
、 physical
reads这三者的关联能够包罗为:逻辑读指的是ORACLE从内部存款和储蓄器读到的数量块块数量,平时的话是:
consistent gets + db block gets.
当在内部存款和储蓄器中找不到所要求的数据块的话,就须求从磁盘中获得,于是就爆发了物理读。
3.具体内容查看 1 Plan hash Value
那生龙活虎行是这一条语句的的hash值,大家领略ORACLE对每一条ORACLE语句产生的试行陈设泄在SHARE
POOL里面,第一遍要由此硬深入分析,发生hash值。后一次再实施时相比hash值,借使后生可畏致就不会进行硬拆解剖判。
2 COST
COST未有单位,是三个相对值,是SQL以CBO情势深入剖析实施布置时,供ORACLE来评估CBO开销,选取试行安排用的。未有鲜明的意义,不过在相比是就可怜实用。
公式:COST=/ Sreadtim 3 对地点试行安插列字段的解释: Id:
实行类别,但不是施行的前后相继顺序。施行的前后相继依照Operation缩进来剖断Operation:当前操作的源委。 Name:操作对象
Rows:也正是10g版本以前的Cardinality(基数State of Qatar,Oracle推测当前操作的回来结果集行数。
Bytes:表示实施该步骤后回来的字节数。
Cost:表示实践到该手续的叁个实行开支,用于评释SQL推行的代价。
Time:Oracle 估算当前操作的日子。 4.谓词表达: Predicate Information
(identified by operation id卡塔尔(قطر‎:
————————————————— 2 – filter(“B”.”MGRAV4″
IS NOT NULLState of Qatar 4 – access(“A”.”EMPNO” = “B”.”名爵CRUISER”卡塔尔国 Access:
表示这几个谓词条件的值将会潜移暗化多少的访谈路劲。
Filter:表示谓词条件的值不会影响多少的拜访路劲,只起过滤的效率。
在谓词中要害注意access,要盘算谓词的标准,使用的拜见路线是或不是无误。 5、
动态深入深入分析
假诺在实践布署中犹如下提醒: Note ———— -dynamic
sampling used for the statement
那提示客商CBO当前选取的才能,要求顾客在深入分析安排时思考到这几个要素。
当现身那一个提醒,表明当前表使用了动态采集样板。大家所以推断那么些表或许没有做过解析。
这里汇合世二种状态:
要是表未有做过解析,那么CBO能够因而动态采集样本的方法来拿到深入分析数据,也得以也许准确的实行安排。
借使表深入分析过,然则剖判信息过旧,那时CBO就不会在接纳动态采集样板,而是采纳那些旧的解析数据,从而也许招致错误的实行陈设。
四、表访问情势 1.Full Table Scan (FTS卡塔尔国 全表扫描 2.Index Lookup
索引围观 There are 5 methods of index lookup: index unique scan
–索引独一扫描
通过独一索引查找二个数值日常回来单个ROWID,假若存在UNIQUE或PEvoqueIMAGL450Y
KEY约束,ORACLE 平时达成唯朝气蓬勃性扫描 Method for looking up a single key
value via a unique index. always returns a single value, You must supply
AT LEAST the leading column of the index to access data via the index.
index range scan –索引局地扫描 Index range scan is a method for
accessing a range values of a particular column. AT LEAST the leading
column of the index must be supplied to access data via the index. Can
be used for range operations (e.g. = = between卡塔尔国 .
使用三个目录存取多行数据,在独一索引上使用索引范围扫描的超级气象是在谓词(WHERE
约束标准卡塔尔(قطر‎中动用了节制操作符号(如, , =, =,BWTEENState of Qatar index full scan
–索引全局扫描 Full index scans are only available in the CBO as
otherwise we are unable to determine whether a full scan would be a good
idea or not. We choose an index Full Scan when we have statistics that
indicate that it is going to be more efficient than a Full table scan
and a sort. For example we may do a Full index scan when we do an
unbounded scan of an index and want the data to be ordered in the index
order. index fast full scan –索引飞速全局扫描,不带order by情状下常产生Scans all the block in the index, Rows are not returned in sorted order,
Introduced in 7.3 and requires V733_PLANS_ENABLED=TRUE and CBO, may be
hinted using INDEX_FFS hint, uses multiblock i/o, can be executed in
parallel, can be used to access second column of concatenated indexes.
This is because we are selecting all of the index. index skip scan
–索引跳跃扫描,where条件列是非索引的前提情状下常产生 Index skip scan
finds rows even if the column is not the leading column of a
concatenated index. It skips the first column(s卡塔尔(قطر‎ during the search.
3.Rowid 物理ID扫描 This is the quickest access method available.Oracle
retrieves the specified block and extracts the rows it is interested in.
–Rowid扫描是最快的寻访数据方式

留意:PL/SQL Developer 工具并不完全帮助具有的SQL*Plus命令,像SET
AUTOTRACE ON 就疑似此,在PL/SQL Developer工具下进行此命令会报错

SET AUTOT[RACE] {ON | OFF | TRACE[ONLY]} [EXP[LAIN]]
[STAT[ISTICS]]


发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图