2.3 执行计划各个列的含义
在执行计划中,除了ID、Operation和Name之外,还有其他一些列。这些列的数据是根据需要从PLAN_TABLE、V$SQL_PLAN、V$SQL_PLAN_STATISTICS_ALL等表和视图中读取的。它们可以帮助我们进一步理解该执行计划(例如优化器对各个操作的估算数据、实际运行中各个操作的性能数据等)。以下就是各个列的描述。
Rows/E-Rows:优化器估算出当前操作返回给上一级操作的数据记录数,如果计划中同时输出收集到实际记录数,则会显示为E-Rows以和实际记录数区别,在优化器中,又称为数据集的势(Cardinality);
Bytes/E-Bytes:优化器估算出当前操作返回给上一级操作的数据的字节数,如果计划中同时输出收集到实际字节数,则会显示为E-Bytes以和实际字节数区别;
TempSpc/E-Temp:优化器估算出完成当前操作(仅部分操作需要临时空间,如SORT、Hash Join)所需要的临时表空间的大小,如果计划中同时输出收集到实际临时空间大小,则会显示为E-Temp以和实际临时空间大小区别;
Cost(%CPU):优化器估算出完成当前操作的代价(包含子操作的代价),它是IO代价和CPU代价总和。其中,IO代价是最基本的代价。而对于CPU代价,在默认情况下,优化器会将CPU代价计算在内,并且将CPU代价根据系统配置由特定的转换公式转换为IO代价。也可以通过优化器参数_optimizer_cost_model指定是否在代价模型中包括CPU代价。括号中数据即为CPU代价在总代价中的比例;
Time/E-Time:优化器估算出完成当前操作所需要的时间,这个时间是其子操作的累计时间,如果计划中同时输出收集到实际时间,则会显示为E-Time以和实际时间区别;
Pstart:分区裁剪(Partition Prunning)后,访问的起始分区,仅在含有分区表访问操作的执行计划中出现;
Pstop:分区裁剪(Partition Prunning)后,访问的结束分区,仅在含有分区表访问操作的执行计划中出现;
Inst:分布式查询中,远程对象所在的数据库实例名;
TQ:并行查询中的表队列(Table Queue),我们会在相关操作中进一步阐述该列数据;
IN-OUT:并行查询或分布式查询中数据传输方式;
PQ Distrib:并行查询中,并行服务进程之间的数据分发方式;
Starts:当前操作实际被启动的次数,如果输出格式中指定了LAST关键字,则为计划最后一次执行中当前操作实际被启动的次数,否则为所有被启动次数总和;
Rows:当前操作实际返回的记录数,如果输出格式中指定了LAST关键字,则为最后一次执行的记录数,否则为所有执行的记录数总和;
Time:执行当前操作的实际时间,如果输出格式中指定了LAST关键字,则为最后一次执行的时间,否则为所有执行的时间总和;
Buffers:当前操作中发生读内存的次数,如果输出格式中指定了LAST关键字,则为最后一次执行的读内存次数,否则为所有执行的读内存次数总和。内存读次数包括一致性读(Consistent Read,CR)和当前模式读(Current Get,CU);
Reads:当前操作中发生读磁盘的次数,如果输出格式中指定了LAST关键字,则为最后一次执行的读磁盘次数,否则为所有执行的读磁盘次数总和;
Writes:当前操作中发生写磁盘的次数,如果输出格式中指定了LAST关键字,则为最后一次执行的写磁盘次数,否则为所有执行的写磁盘次数总和;
OMem:当前操作完成所有内存工作区(Work Area)操作所总共使用私有内存(PGA)中工作区的大小。需要使用内存工作区的操作为:哈希操作,如哈希分组(Hash Group)、哈希关联(Hash Join)和排序(Sort)操作,它们分别占有工作区中哈希区(Hash Area)和排序区(Sort Area)进行工作,这个数据是由优化器统计数据以及前一次执行的性能数据估算得出的;
1Mem:当工作区大小无法满足操作所需要的大小时,需要将部分数据写入临时磁盘空间中(如果仅需要写入一次就可以完成操作,就称为一次通过,One-Pass;否则为多次通过,Multi-Pass)。该列数据为语句最后一次执行中,单次写磁盘所需要的内存大小,这个数据是由优化器统计数据以及前一次执行的性能数据估算得出的;
Used-Mem:语句最后一次执行中,当前操作所使用的内存工作区大小,括号里面为(发生磁盘交换的次数,1次即为One-Pass,大于1次则为Multi-Pass,如果没有使用磁盘,则显示OPTIMAL);
Used-Tmp:语句最后一次执行中,当前操作所使用的临时段的大小,无法一次在工作区完成操作的数据被临时写入该段;
O/1/M:语句所有的执行总共使用内存或磁盘完成操作的执行次数,分别是Optimal(优化的,仅适用内存完成操作)/One-Pass/Multi-Pass;
Max-Tmp:语句所有执行中,当前操作所使用的临时段的最大空间。