暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

如何启用和禁用并行

原创 刘旭 2020-03-28
2351

并行概述

与Oracle中的许多可调优选项一样,在一个环境中获得的最好性能可能并不适合另一个环境。在数据库中设置和配置并行时,除了正确设置数据库参数外,并行执行性能还受到系统资源(特别是IO、CPU和内存)可用性的影响。在第一次设置并行时,建议从默认值开始。在进行任何更改之前,确定这些设置是否足够。

并行最适合用于什么?

  1. 需要大表扫描、连接或分区索引扫描的查询
  2. 创建大型索引
  3. 创建大型表(包括物化视图)
  4. 批量插入、更新和删除

并行执行的工作原理

并行是指将一个任务分解,而不是让一个进程在一个查询中完成所有的工作,而是让多个进程同时完成部分工作。

哪些场景不适合使用并行

  1. 事务非常短(几秒钟或更少)的环境。这包括大多数OLTP系统。
  2. CPU、内存或I/O资源被大量利用的环境。

以下是在各场景并行的设置和取消

在数据库级别

设置 PARALLEL_MAX_SERVERS = N。其中 N 是默认值,可以根据以下推荐的公式得出:
默认值 = PARALLEL_THREADS_PER_CPU * CPU_COUNT * concurrent_parallel_users * 5
在实例中,以默认并行度运行的 concurrent_parallel_users 的数量取决于实例的内存初始化参数设置。例如,如果设置了 MEMORY_TARGET 或 SGA_TARGET 初始化参数,则 concurrent_parallel_users = 4。如果未设置 MEMORY_TARGET 或 SGA_TARGET,则检查 PGA_AGGREGATE_TARGET。如果为 PGA_AGGREGATE_TARGET 设置了值,则 concurrent_parallel_users = 2。如果没有为 PGA_AGGREGATE_TARGET 设置值,则 concurrent_parallel_users = 1。

在会话级别

在会话级别为 DML、DDL 和 QUERY 操作启用并行,可以使用以下命令:

ALTER SESSION ENABLE PARALLEL DDL;
ALTER SESSION ENABLE PARALLEL QUERY;
ALTER SESSION FORCE PARALLEL [DML|DDL|QUERY] PARALLEL <DEGREE>; -- Degree 的值可以是 2,4,8 或者 16 等等...
ALTER SESSION FORCE PARALLEL [DML|DDL|QUERY];

复制

在语句级别

Parallel Hint 可以像下面这样使用:
/*+ PARALLEL / - 如果在对象级别没有设置 DOP(Degree of Parallel),则会使用默认 DOP
(或者) /
+ PARALLEL(4) /
(或者) /
+ PARALLEL(emp, 4) /
12c 中的新 Hint:ENABLE_PARALLEL_DML。这适用于 12c 或更高版本。
/
+ enable_parallel_dml parallel(x) / – (x)是可选的,其中 x 是所请求的并行度
例如:insert /
+ parallel(8) enable_parallel_dml / into t1 select * from t1_1;
注意:
Hint “enable_parallel_dml”可以在/
+ */分隔符中以任何顺序出现

在对象级别

在对象级别启用并行:
ALTER TABLE <TABLE_NAME> PARALLEL ;
ALTER INDEX <INDEX_NAME> PARALLEL ;

取消并行

在数据库级别

要在数据库级别禁用并行,必须设置:
PARALLEL_MIN_SERVERS = 0
PARALLEL_MAX_SERVERS = 0

在会话级别

在会话级别为 DML、DDL 和 QUERY 操作禁用并行,使用下面的命令:
ALTER SESSION DISABLE PARALLEL DML;
ALTER SESSION DISABLE PARALLEL DDL;
ALTER SESSION DISABLE PARALLEL QUERY;

在对象级别

禁用对象级别的并行:
ALTER TABLE <TABLE_NAME> PARALLEL 1;
ALTER INDEX <INDEX_NAME> PARALLEL 1;

注意:所有具有并行 hint 的语句仍将并行执行,因为语句级的 PARALLEL hint 优先于会话和对象级别。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

目录
  • 并行概述
  • 并行最适合用于什么?
  • 并行执行的工作原理
  • 哪些场景不适合使用并行
  • 以下是在各场景并行的设置和取消
  • 在数据库级别
  • 在会话级别
  • 在语句级别
  • 在对象级别
  • 取消并行
    • 在数据库级别
    • 在会话级别
    • 在对象级别