查询在一个环境中而不是在其他环境中并行运行

Posted

技术标签:

【中文标题】查询在一个环境中而不是在其他环境中并行运行【英文标题】:Query running in parallel in one environment not in other 【发布时间】:2020-03-29 10:51:13 【问题描述】:

我有一个插入到选择查询中, 喜欢:

INSERT /*+ append */ INTO  
select col1,col2...........  
from table1,table2(multiple table join) 

当我比较 prod 和 UAT 之间的计划时,我看到 UAT 在 4 DOP 中运行,但 prod 没有并行运行。

查询完全相同,并在表级别检查并行性,但 prod 和 UAT 中的 degree=1。

不知道并行运行的原因是什么?

我假设当我们在内部使用/*+ append */ 时,它会选择并行,但为什么它在 prod 中被忽略了?

数据库:oracle11g

【问题讨论】:

并行执行的提示是/*+ parallel */ 数据库也可以根据可用的服务器资源“降级”查询的并行度 您检查了哪个“表”是否并行?您插入的那个还是所有加入的?什么是并行运行的:单独的选择还是整个事情?最后 /*+ APPEND */ 不需要并行执行。 @Laks 查看我的answer here,了解可能影响并行度的 39 个不同因素的列表。 我昨天遇到了这个问题。事实证明,参数 optimizer_dynamic_sampling 在一个实例(并行运行)上设置为 2,而在另一个实例(未并行运行)上设置为 4。因此,我还建议您在数据库中比较您的初始化参数,以查看是否存在任何与优化器相关的参数不匹配。通常情况下,两个数据库中的统计信息不同,这会导致执行计划不同。 【参考方案1】:

只需执行

select * from table(dbms_xplan.display_cursor('<sql_id>', childnumber, format => '+NOTE ADVANCED ADAPTIVE');

Oracle 会告诉你,在最底部有 Note 部分:

Note
-----
   - Degree of Parallelism is 96 because of table property

可能有多种原因,例如存在 TRIGGERS 或 Oracle Text 索引。

【讨论】:

尝试在上面运行时出错:错误:格式 '+NOTE ADVANCED ADAPTIVE' 对 DBMS_XPAN.DISPLAY_CURSOR 无效( 也许可以尝试删除 ADAPTIVE 部分。格式取决于 Oracle 版本。但至少从版本。 12.1 注意部分应该告诉你关于并行处理的细节

以上是关于查询在一个环境中而不是在其他环境中并行运行的主要内容,如果未能解决你的问题,请参考以下文章

DLL 在子文件夹中而不是在应用程序文件夹中

使用 jQuery 在变量中而不是在当前 DOM 中选择内容?

在运行时本地启用/禁用 OpenMP

如何在片段中而不是在活动中使用 NavController(在片段中带有 NavHost)?

RESTful API:在请求正文中而不是在 URI 中传递父资源定位器是不是更实用?

在模拟器中而不是在设备中更新位置