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 报告强制序列化的原因?
补充一点,该检查将发现查询被迫运行单线程的任何原因:
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)中跳过,但现在它只会在任何地方发出警告。
是的,这会导致这个问题。
如果没有什么反对的(其他服务、虚拟机等),则使用 cpu 的数量作为值,而使用超线程则使用所有虚拟 cpu 的数量。
欲了解更多信息和建议,您可以查看