近日开发说某个系统上有个sql执行时间忽快忽慢,让我帮忙看下,此sql是4个表(2个千万,2个十万)进行inner join操作,最后进行count(*)聚合操作,执行时间1--10S不等。查看执行计划发现使用了PX并行和BUFFER SORT操作,难怪忽快忽慢的,但是sql并没有显式加parallel,参数parallel_server也没有启用,这个并行和BUFFER SORT是从那来的呢?
下面通过实验来重现上面的情况:
1. PX并行和BUFFER SORT:
select /*+ parallel(e 4) parallel(d 4) */ e.ename, d.dname
from scott.emp e, scott.dept d,scott.emp m
where e.deptno = d.deptno
and d.deptno = m.deptno
and e.deptno = 10;
Execution plan:
----------------------------------------------------------------------------
| Id | Operation | Name | TQ |IN-OUT| PQ Distrib |
----------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | | | |
| 1 | PX COOR