同事反应SQL跑的时间过长,有些基本达到30几个小时;接着给出了相关的N个SQL
结构类似于
select /*+ parallel(a,8) */ ......
from a,b,....
where .......
;
1.自己先当作的手动跑了次,结构20几分钟就出结构,不过后续的几个SQL也是报1555的问题,执行的时间过长;
2.仔细观察了下HINT,将原来的HINT替换为/*+ parallel(8) */,执行,结构时间缩短了快一半;
=》这种写法是针对后面目标SQL的整个句子做并行,而不是单单的一个A表;
3.接着在想为什么有些时候慢,有些时候快,如果并行开得过大会怎么样呢?猛然间想起了parallel参数
parallel_max_servers =16,这么小,看来问题已找到,也就是说如果并行达到了16,那么后期的运行会话将以1串行度执行;
=》调大到200,发现CPU消耗过高,IO正常,降到100,并调整相应的临时表空间的大小;
结果:运行时间达到业务的需求,并且还存在进一步优化的空间;