oracle使用并行踩过的坑
Posted kakaisgood
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle使用并行踩过的坑相关的知识,希望对你有一定的参考价值。
https://blog.51cto.com/wyzwl/1948035
一、并行机制的简述
并行处理的机制实际上就是把一个要扫描的数据集分成很多小数据集,Oracle会根据初始化参数 PARALLEL_MIN_SERVERS=n的值启动几个并行服务进程同时处理这些小数据集,最后将这些结果汇总,作为最终的处理结果返回给用户。
二、并行使用场景
1、Parallel query(并行查询)
执行并行查询是需要符合以下条件:
A、SQL语句中有Hint提示,比如Parallel或者 Parallel_index。
B、SQL语句中引用的对象被设置了并行属性。
C、多表关联中,至少有一个表执行全表扫描(Fulltable scan)或者跨分区的Index range SCAN。
2、Parallel DDL(并行DDL操作,如建表,建索引等)
如:createtable xx parallel 4 as select * from xxx;
create index xxx on tab_xx(column) parallel 4;
3、Parallel DML(并行DML操作,如insert、update、delete等)
如:insert/*+parallel(t 2) */ into t select /*+parallel(t1 2) */ * from t1;
下面从以上三个场景各举一例来说一下并行易踩的坑。
三、并行对执行计划的影响
某日,开发突然找过来:喂、DBA吗?有个测试环境的SQL执行计划和生产环境不一样,严重影响测试进度。记得当时差不多是这样的,对方向我扔了一条执行计划有问题的SQL,然后不说话。作为一个菜鸟,赶紧把生产执行计划和测试环境对比了一下,发现果真不一样,折腾了好久,才发现该SQL中的某个表并行度为8,导致了执行计划异常。记得该表是TB级的大小,是个多表管理的查询语句,并行度为8之后走了全表扫描(Full table scan),可以想象是又多慢。因为是测试环境,谁做什么操作之后没有关闭并行就不深究了。下面看一下oracle联机文档:http://download.oracle.com/docs/cd/E11882_01/server.112/e10821/ex_plan.htm#PFGRF94687对并行处理的执行计划的解读。