Oracle Parallel Hint 中的并行度
Posted
技术标签:
【中文标题】Oracle Parallel Hint 中的并行度【英文标题】:Degree of Parallelism in Parallel Hint in Oracle 【发布时间】:2020-06-11 23:43:12 【问题描述】:Oracle 中决定 Dop in Parallel 提示的因素是什么。
例如。
SELECT /*+ PARALLEL(employees 3) */ e.last_name, d.department_name
FROM employees e, departments d
WHERE e.department_id=d.department_id;
如何判断 3 是正确的 DOP?
【问题讨论】:
为什么首先使用并行提示,而不是让数据库在后台为您管理它? @GMB Oracle 不管理并行性,必须专门启用它。 (我想您可以将 PARALLEL_DEGREE_POLICY 设置为 AUTO,然后让 Oracle 选择,但我认为几乎没有人会这样做,因为需要谨慎使用并行性。) @SI1234 您能否为您的问题添加更多细节?您是试图最大化单个查询而不关心系统的其余部分,还是试图为整个系统找到和谐的平衡?另外,您能简要介绍一下您的数据库环境吗?您的示例查询对于并行性来说可能是一个糟糕的选择——像 EMPLOYEES 和 DEPARTMENTS 这样的小表通常不够大,以至于并行性的好处超过了成本。并行性通常用于大型数据仓库操作。 @JonHeller 我提到的查询是一个示例查询。我正在尝试理解并行提示的概念以及如果我们使用它在数据仓库应用程序中如何确定并行提示中的 DOP。 【参考方案1】:我维护的大部分系统现在都不是 OTLP Datawarehouse,而是介于两者之间。因此,有时有必要使用并行性,但您不想将所有资源(所有 CPU 内核)用于单个报告。从理论上讲,您可以通过配置文件限制 DOP,但资源限制是 Oracle 中存在问题的组件。 Oracle 中的 Adaptive DOP 默认情况下由空闲 CPU 资源的数量决定,因此这样的查询通常有大量的并行工作者,这完全杀死了磁盘 IO。
Oracle 会话工作进程是单线程的,它们都不会使用超过单个 CPU 内核。所以 DOP 应该始终对应于 CPU 内核的数量以及是否受 CPU 限制。
【讨论】:
以上是关于Oracle Parallel Hint 中的并行度的主要内容,如果未能解决你的问题,请参考以下文章
oracle 并行查询为啥只有一个进程在读。 我写了一个查询语句在里面些了个 /*+ parallel .....*/