可以从 Oracle 数据库请求特定的并行度 (DOP)。例如,您可以在表或索引级别设置固定 DOP:
例如:
ALTER TABLES sales PARALLEL 8;
ALTER TABLE customers PARALLEL 4;
在这种情况下,仅访问 sales 表的查询使用请求的 DOP 8,而访问 customers 表的查询请求的 DOP 为 4。同时访问 sales 和 customers 表的查询使用 8 的 DOP 进行处理,并且可能分配 16 个并行服务器(生产者或消费者);无论何时指定不同的 DOP,Oracle 数据库都会使用更高的 DOP。
如果指定了 PARALLEL 子句但未列出并行度,则对象获取默认 DOP。默认并行度使用公式根据系统配置确定 DOP,如下所示:
对于单个实例,
DOP = PARALLEL_THREADS_PER_CPU x CPU_COUNT
对于 Oracle RAC 配置,
DOP = PARALLEL_THREADS_PER_CPU x CPU_COUNT x INSTANCE_COUNT
默认情况下,INSTANCE_COUNT 是集群中的所有节点。但是,如果您使用 Oracle RAC 服务来限制可以执行并行操作的节点数量,那么参与节点的数量就是属于该服务的节点数量。例如,在 4 节点 Oracle RAC 集群上,每个节点有 8 个 CPU 内核且没有 Oracle RAC 服务,default DOP would be 2 x 8 x 4 = 64。
默认的 DOP 算法旨在使用最大资源,并假定如果可以使用更多资源,操作完成得更快。默认并行性针对单用户工作负载。在多用户环境中,不建议使用默认并行。
优化器根据语句的资源需求自动确定语句的 DOP。优化器使用执行计划中所有扫描操作(全表扫描、索引快速全扫描等)的成本来确定语句所需的 DOP。
但是,优化器会限制实际的 DOP,以确保并行服务器进程不会使系统不堪重负。此限制由参数PARALLEL_DEGREE_LIMIT. 设置
为简洁起见,我在这里列出了重要的部分。
Oracle 官方文档中的所有这些以及更多内容 -
http://docs.oracle.com/cd/E11882_01/server.112/e25523/parallel002.htm#BEICCFIE
这是一个非常有趣的设置,我建议你仔细阅读整个过程,因为它很有帮助