统计信息说明:
recursive calls
递归调用。 为了执行用户发出的sql语句,Oracle可能需要执行一些附加语句。 这些附加语句称为“recursive calls”或“recursive SQL statements”。 发出DDL语句后,Oracle始终是隐式的
db block gets
从buffer cache获取的块数当前请求的块数。 当前模式块是指操作期间正好提取的块数,而不是一致性读取的块数。 单个查询中读取的块通常位于查询开始时所在的数据库中,而当前块不是当前时间之前或之后的数据块数。
consistent gets
从Buffer cache读取的还原数据的block的数量、数据请求总数、回退段buffer中的数据完整性读取所需的数据块、此处的概念在您处理该操作时以完整性读取状态处理多个块发生这些块的主要原因是,由于您在查询过程中在其他会话中操作了数据块,导致查询的块发生了更改。 但是,由于查询是在这些更改之前调用的,因此必须查询回退段中数据块的预更新映像以确保数据完整性。 这样就产生了一致的读音。
physical reads
物理读取是指从磁盘中读取的数据块的数量。 其主要原因如下
1 :数据库高速缓存中不存在这些块。
2 :全表扫描
3 :磁盘排序
redo size
DML生成的重做的大小
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’sguideandreferencerelease 11.1
数据库块获取,一致
t gets 、 physical reads这三者的关系可以概括为:逻辑读指的是ORACLE从内存读到的数据块块数量,一般来说是:consistent gets + db block gets. 当在内存中找不到所需要的数据块的话,就需要从磁盘中获取,于是就产生了物理读。
-----------------------------------------------------------------------------------------------------
Plan hash Value
这一行是这一条语句的的hash值,我们知道ORACLE对每一条ORACLE语句产生的执行计划放在SHARE POOL里面,第一次要经过硬解析,产生hash值。下次再执行时比较hash值,如果相同就不会执行硬解析。
COST
COST没有单位,是一个相对值,是SQL以CBO方式解析执行计划时,供ORACLE来评估CBO成本,选择执行计划用的。没有明确的含义,但是在对比是就非常有用。
公式:COST=(Single Block I/O COST + MultiBlock I/O Cost + CPU Cost)/ Sreadtim
对上面执行计划列字段的解释:
Id: 执行序列,但不是执行的先后顺序。执行的先后根据Operation缩进来判断(采用最右最上最先执行的原则看层次关系,在同一级如果某个动作没有子ID就最先执行。一般按缩进长度来判断,缩进最大的最先执行,如果有2行缩进一样,那么就先执行上面的。)
Operation:当前操作的内容。
Name:操作对象
Rows:也就是10g版本以前的Cardinality(基数),Oracle估计当前操作的返回结果集行数。
Bytes:表示执行该步骤后返回的字节数。
Cost(CPU):表示执行到该步骤的一个执行成本,用于说明SQL执行的代价。
Time:Oracle 估计当前操作的时间。
谓词说明:
Predicate Information (identified by operation id):
---------------------------------------------------
2 - filter("B"."MGR" IS NOT NULL)
4 - access("A"."EMPNO" = "B"."MGR")
Access: 表示这个谓词条件的值将会影响数据的访问路劲(全表扫描还是索引)。
Filter:表示谓词条件的值不会影响数据的访问路劲,只起过滤的作用。
在谓词中主要注意access,要考虑谓词的条件,使用的访问路径是否正确。
动态分析
如果在执行计划中有如下提示:
Note
------------
-dynamic sampling used for the statement
这提示用户CBO当前使用的技术,需要用户在分析计划时考虑到这些因素。 当出现这个提示,说明当前表使用了动态采样。我们从而推断这个表可能没有做过分析。
这里会出现两种情况:
(1) 如果表没有做过分析,那么CBO可以通过动态采样的方式来获取分析数据,也可以或者正确的执行计划。
(2) 如果表分析过,但是分析信息过旧,这时CBO就不会在使用动态采样,而是使用这些旧的分析数据,从而可能导致错误的执行计划。
摘录自: 作者: 潇湘ldqc 出处: http://www.cnblogs.com/kerrycode/