ORALCE执行计划参数介绍-1

来源:互联网 发布:数据库包括 编辑:程序博客网 时间:2024/04/29 19:26


 SET AUTOTRACE OFF
 此为默认值,即关闭Autotrace
 

 SET AUTOTRACE ON EXPLAIN
 只显示执行计划

 SET AUTOTRACE ON STATISTICS
  只显示执行的统计信息
 
 SET AUTOTRACE ON
  包含2,3两项内容
 
 SET AUTOTRACE TRACEONLY
  与ON相似,但不显示语句的执行结果
 

SQL> set linesize 200
SQL> set autot on;
SQL> select * from testloop where A=5;

执行计划
----------------------------------------------------------
Plan hash value: 1970519187

------------------------------------------------------------------------------
| Id  | Operation         | Name     | Rows  | Bytes | Cost (%CPU)| Time     |
------------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |          |     1 |    13 |     3   (0)| 00:00:01 |
|*  1 |  TABLE ACCESS FULL| TESTLOOP |     1 |    13 |     3   (0)| 00:00:01 |
------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - filter("A"=5)

Note
-----
   - dynamic sampling used for this statement


统计信息
----------------------------------------------------------
          4  recursive calls
          0  db block gets
         57  consistent gets
          0  physical reads
        172  redo size
        271  bytes sent via SQL*Net to client
        389  bytes received via SQL*Net from client
          1  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          0  rows processed

 

执行计划中字段解释:

       ID: 一个序号,但不是执行的先后顺序。执行的先后根据缩进来判断。

       Operation: 当前操作的内容。

       Rows: 当前操作的Cardinality,Oracle估计当前操作的返回结果集。

       Cost(CPU):Oracle 计算出来的一个数值(代价),用于说明SQL执行的代价。

       Time:Oracle 估计当前操作的时间。

谓词说明:

       Access: 表示这个谓词条件的值将会影响数据的访问路劲(表还是索引)。

       Filter:表示谓词条件的值不会影响数据的访问路劲,只起过滤的作用。

--在谓词中主要注意access,要考虑谓词的条件,使用的访问路径是否正确。


统计信息说明:
db block gets : 从buffer cache中读取的block的数量   
consistent gets: 从buffer cache中读取的undo数据的block的数量   
physical reads: 从磁盘读取的block的数量   
redo size: DML生成的redo的大小   
sorts (memory) :在内存执行的排序量   
sorts (disk) :在磁盘上执行的排序量 


       Physical Reads通常是我们最关心的,如果这个值很高,说明要从磁盘请求大量的数据到Buffer Cache里,通常意味

着系统里存在大量全表扫描的SQL语句,这会影响到数据库的性能,因此尽量避免语句做全表扫描,对于全表扫描的SQL语句

,建议增 加相关的索引,优化SQL语句来解决。
 (Physical Reads:实例启动后,从磁盘读到Buffer Cache数据块数量)
就是从磁盘上读取数据块的数量,其产生的主要原因是:
        在数据库高速缓存中不存在这些块
        全表扫描
        磁盘排序
它们三者之间的关系大致可概括为:
       逻辑读指的是Oracle从内存读到的数据块数量。一般来说是'consistent gets' + 'db block gets'。当在内存中找

不到所需的数据块的话就需要从磁盘中获取,于是就产生了'physical reads'。

 


这里会出现两种情况:

如果表没有做过分析,那么CBO可以通过动态采样的方式来获取分析数据,也可以或者正确的执行计划。
如果表分析过,但是分析信息过旧,这时CBO就不会在使用动态采样,而是使用这些旧的分析数据,从而可能导致错误的执行

计划。

 在看执行计划的时候,除了看执行计划本身,还需要看谓词和提示信息。 通过整体信息来判断SQL 效率。

 

原创粉丝点击