#AUTOTRACE

AUTOTRACE的工作方式类似于EXPLAIN,区别在于AUTOTRACE将执行SQL语句,并显示执行结果,每层执行算子的统计信息,以及整条SQL语句所产生的统计信息(后两项可通过AUTOTRACE选项控制是否显示)。通过启动AUTOTRACE,用户能够精准定位到一条SQL执行过程中每层算子消耗的时间,查询/计算出来的行数等信息。如果预估值和实际值有严重偏差,则需要重新收集统计信息。

Note

统计信息显示是否有内容依赖于系统是否已开启统计信息收集开关(STATISTICS_LEVEL参数设置为ALL)。

当STATISTICS_LEVEL参数设置为TYPICAL或ALL时会统计表的变化情况,同时也会收集每个计划算子的执行时间、执行次数等信息。

STATISTICS_LEVEL参数设置为ALL将对系统造成一定性能损失,请确保只在当前SESSION设置该参数。

典型的AUTOTRACE输出如下:

ALTER SESSION SET statistics_level=ALL;


SET autotrace ON;
SELECT area_no,area_name,DHQ FROM area;
AREA_NO AREA_NAME         DHQ                   
------- ----------------- --------------------- 
01      华东            Shanghai             
02      华西            Chengdu              
03      华南            Guangzhou            
04      华北            Beijing              
05      华中            Wuhan                
				   

Execution Plan                                                   
---------------------------------------------------------------- 
SQL hash value: 4040703571                                      
Optimizer: ADOPT_C                                              
                                                                
+----+--------------------------------+----------------------+------------+----------+----------+-------------+----------+----------+----------+----------+--------------------------------+
| Id | Operation type                 | Name                 | Owner      | E - Rows | A - Rows | Cost(%CPU)  | A - Time | Loops    | Memory   | Disk     | Partition info                 |
+----+--------------------------------+----------------------+------------+----------+----------+-------------+----------+----------+----------+----------+--------------------------------+
|  0 | SELECT STATEMENT               |                      |            |          |         5|             |        29|         5|          |          |                                |
|  1 |  TABLE ACCESS FULL             | AREA                 | SYS        |    100000|         5|      442( 0)|        20|         5|          |          |                                |
+----+--------------------------------+----------------------+------------+----------+----------+-------------+----------+----------+----------+----------+--------------------------------+


Statistics
-------------------------------------------------------------------
                    0 physical reads                               
                    6 db block gets                                
                    0 consistent gets                              
                    0 redo size                                    
                    0 recursive calls                              
                    0 bytes sent via SQL*Net to client             
                    0 bytes received via SQL*Net from client       
                    0 SQL*Net roundtrips to/from client            
                    0 sorts (memory)                               
                    0 sorts (disk)                                 
                    5 rows processed
                  359 bytes sent via PX                                                                                                      

开启AUTOTRACE时的执行计划输出将比关闭时多一些信息,如下:

  • E - Rows:CBO预估行数。
  • A - Rows:实际执行行数。
  • A - Time:算子实际执行时间。
  • Loops:被调用次数。
  • Memory:内存资源占用。
  • Disk:磁盘资源占用。
  • recursive calls:递归调用次数。每次执行SQL,为此SQL产生的额外SQL调用次数。
  • db block gets:本次SQL请求的读取数据块的数量。
  • consistent gets:一致性读的数量。
  • physical reads:从硬盘读取的数据块数量。
  • redo size:redo产生的字节数。
  • rows processed:SQL查询/影响的行数。
  • bytes sent via PX:网络上PX发送的数据量。

其中,physical reads和Disk的数值应处在较低水平,如果产生了大量的物理读和硬盘资源消耗,很大概率是内存不足引起,需要调整数据库的内存参数,或调整服务器物理内存。

如果预估的行数和实际行数偏差较大,而且收集统计信息后性能仍未改善,可使用HINT手动调整执行计划。

pdf-btn 下载文档
copy-btn 复制链接