“最大并行度”= 1 的服务器范围设置是否会导致 Brent Ozar 的 sp_BlitzCache 将执行计划标记为“强制序列化”?

D-K*_*D-K 6 sql-server parallelism sql-server-2016 sp-blitz sp-blitzcache

我正在使用 Brent Ozar 的 sp_BlitzCache 存储过程,并试图确定它报告的原因:

“您计划中的某些内容正在强制进行串行查询。如果这不是故意的,则需要进一步调查。”

经过调查,我发现服务器配置已设置:

'Max Degree of Parallelism = 1' 
Run Code Online (Sandbox Code Playgroud)

(这是我要正确配置的清单。这是无知的日子。)

这是否是 Brent 报告强制序列化的原因?

在此处输入图片说明

Eri*_*ing 5

补充一点,该检查将发现查询被迫运行单线程的任何原因:

WITH XMLNAMESPACES('http://schemas.microsoft.com/sqlserver/2004/07/showplan' AS p)
UPDATE  ##BlitzCacheProcs
    SET is_forced_serial = 1
FROM    #query_plan qp
WHERE   qp.SqlHandle = ##BlitzCacheProcs.SqlHandle
AND     SPID = @@SPID
AND     query_plan.exist('/p:QueryPlan/@NonParallelPlanReason') = 1
AND     (##BlitzCacheProcs.is_parallel = 0 
           OR ##BlitzCacheProcs.is_parallel IS NULL)
OPTION (RECOMPILE);
Run Code Online (Sandbox Code Playgroud)

有一次,Microsoft 记录了查询无法并行的原因列表,以及如何在查询计划 XML 中表示,但在实践中(Azure SQL DB 中最近发生了一些变化)一个非常有限的原因列表特别冒泡。

大多数情况下,您从NonParallelPlanReason 中得到的只是CouldNotGenerateValidParallelPlan。这就是为什么我写支票是为了寻找任何一般的原因。

它可能更具表现力,或者在并行限制版本(如 Express Edition)中跳过,但现在它只会在任何地方发出警告。


nbk*_*nbk 3

是的,这会导致这个问题。

如果没有什么反对的(其他服务、虚拟机等),则使用 cpu 的数量作为值,而使用超线程则使用所有虚拟 cpu 的数量。

欲了解更多信息和建议,您可以查看

https://learn.microsoft.com/en-US/sql/database-engine/configure-windows/configure-the-max- Degree-of-parallelism-server-configuration-option?view=sql-server-ver15