陈焕生:深入理解陈焕生:深入理解Oracle的并行执行的并行执行(二二)
如何阅读并行执行计划
Table queue 的编号代表了并行执行计划中,数据分发的顺序。理解执行计划中的并行操作是如何被执行的,原则很简单:跟
随Tablequeue的顺序。
通过sqlmonitor报告判断sql的执行顺序,需要结合name列的tablequeue名字比如:TQ10000(代表DFO=1,tablequeue0),:
TQ10001(代表DFO=1,tablequeue1),还有PX进程的颜色,进行确定。
下面的例子为dbms_xplan。display_cursor 的输出。对于并行执行计划,会多出来三列:
1. TQ列:为Q1:00或者Q1:01,其中Q1代表第一个DFO,00或者01代表tablequeue的编号。
a. ID7~9的操作的TQ列为Q1,00,该组PX进程,作为生产者首先执行,然后通过broadcast 的分发方式,把数据发给消费
者。
b. ID10~11,3~6的操作的TQ列为Q1,01,该组PX进程作为消费者接受customer的数据之后,扫描lineorder,hashjoin,聚
合之后,又作为生产者通过tablequeue2把数据 发给QC。
2. In-‐out 列:表明数据的流动和分发。
• PCWC:parallelcombinewithchild。
• PCWP:parallelcombinewithparent。
• P-‐>P: paralleltoparallel。
• P-‐>S: paralleltoSerial。
3. PQDistribute 列:数据的分发方式。此执行计划中,我们使用了broadcast 的方式,下面的章节
我会讲述其他的分发方式。
HASH分发方式,分发方式, 两次数据分发两次数据分发
除了broadcast分发方式,另一种常见的并行分发方式为hash。为了观察使用hash分发时sql的 执行情况,我对sql使用
pq_distributehint 。
使用hash分发方式时,sql的执行时间为29s,dbtime为2.6m。相对于broadcast方式,sql的执行时间和dbtime都增加了大约
40%。