在设置新的 SQL Server 时,我使用以下代码来确定设置的良好起点MAXDOP:
/*
This will recommend a MAXDOP setting appropriate for your machine's NUMA memory
configuration. You will need to evaluate this setting in a non-production
environment before moving it to production.
MAXDOP can be configured using:
EXEC sp_configure 'max degree of parallelism',X;
RECONFIGURE
If this instance is hosting a Sharepoint database, you MUST specify MAXDOP=1
(URL wrapped for readability)
http://blogs.msdn.com/b/rcormier/archive/2012/10/25/
you-shall-configure-your-maxdop-when-using-sharepoint-2013.aspx
Biztalk (all versions, including 2010):
MAXDOP = 1 is only required on the BizTalk …Run Code Online (Sandbox Code Playgroud) 我在 AWS i3.16xlarge 上运行 SQL Server 2022 RC1 设置,具有 2 个插槽、2 个 NUMA 节点、每个节点 32 个逻辑处理器、总共 64 个逻辑处理器。
安装程序推荐 MAXDOP 8:
但是,如果您单击该链接来配置 MAXDOP,建议会显示:
根据那篇知识库文章,MAXDOP 应该是 16,而不是 8。当然,从技术上讲,8 小于 16 - 但 2、4 或 15 也是如此。8 从哪里来?
SQL Server 安装完成且服务启动后,日志显示 SQL Server 自动实施具有 4 个节点的 Soft-NUMA,每个节点有 16 个逻辑处理器:
同样,这表明 MAXDOP 应为 16。
这是一个错误,还是我错过了一些明显的事情?是否还有另一个不成文的规则,设置将在 MAXDOP 8 处停止?
如果实例MAXDOP设置为 1 并且查询提示用于允许特定查询并行执行,SQL 是否仍使用并行成本阈值值来决定是否实际并行执行?
我一直无法挖掘出这些特定信息,尽管此链接表明如果MAXDOP为 1 ,则 CTFP 将被忽略。这在没有查询提示的情况下是有意义的,因为没有请求,无论成本如何,当MAXDOP为 1时都会并行。
谁能让我知道这两个请求的预期行为是什么?
示例 1:
Instance Maxdop: 1
CTFP: 50
Query hint: Maxdop=2
Query cost: 30
Run Code Online (Sandbox Code Playgroud)
示例 2:
Instance Maxdop: 1
CTFP: 50
Query hint: Maxdop=2
Query cost: 70
Run Code Online (Sandbox Code Playgroud) 我知道这个问题已经被问过很多次了,也有答案,但是,我仍然需要更多关于这个主题的指导。
以下是来自 SSMS 的我的 CPU 的详细信息:
下面是数据库服务器任务管理器中的 CPU 选项卡:
我MAXDOP通过以下公式将 的设置保持在 2:
declare @hyperthreadingRatio bit
declare @logicalCPUs int
declare @HTEnabled int
declare @physicalCPU int
declare @SOCKET int
declare @logicalCPUPerNuma int
declare @NoOfNUMA int
declare @MaxDOP int
select @logicalCPUs = cpu_count -- [Logical CPU Count]
,@hyperthreadingRatio = hyperthread_ratio -- [Hyperthread Ratio]
,@physicalCPU = cpu_count / hyperthread_ratio -- [Physical CPU Count]
,@HTEnabled = case
when cpu_count > hyperthread_ratio
then 1
else 0
end -- HTEnabled
from sys.dm_os_sys_info
option (recompile);
select …Run Code Online (Sandbox Code Playgroud) 我想MAXDOP在我的电脑上测试一下。所以我MAXDOP为特定查询设置为 2。但是,当我在运行查询时查看任务管理器中的逻辑处理器时,看起来它们都被使用了。我认为如果MAXDOP设置为 2 ,它只会使用 2 个逻辑处理器?有谁知道发生了什么?请看下图。
另一个问题是,DOP执行计划返回的值是1。现在我知道设置MAXDOP并不意味着SQL Server 会实际使用设置的数字。然而,考虑到我的 4 个逻辑处理器似乎都被用于处理查询,看到DOP1.
这是我运行的查询:

这是我运行时发生的情况(即看起来所有 4 个逻辑处理器都用于运行查询):

我们有一个产品系统,有时会卡住,除了更改实时系统上的 maxdop 参数之外,我们所做的任何事情都无济于事,在我们更改后,一切都恢复正常。即使我们将 maxdop 从 4 更改为 0,或者从 1 更改为 2,只要我们更改 maxdop 即可。这种情况已经持续了大约一年(在此期间,这种情况发生了大约四五次),但我们无法找到导致这种情况的原因。由于系统即将更换,并且我们有某种解决方法,我并不是寻求帮助来解决这个问题,只是为了了解更改 maxdop 时现有会话会发生什么,所以我的问题是:会发生什么当我们在实时系统中更改 maxdop 以及它们正在执行时正在进行的查询?
我正在寻找有关使用以下配置在 SQL Server 实例中设置 MAXDOP 的确认/指导:
版本:SQL Server 2008 R2 标准版处理器:2 x AMD Opteron(TM) 处理器 6234 = 24 核启用超线程
对于这个处理器,每个单独的插槽都有两个 NUMA 节点,每个节点都有 6 个内核。Microsoft 的知识库文章“最大并行度”配置选项的建议和指南 ( http://support.microsoft.com/kb/2806535 ) 建议“对于已配置 NUMA 并启用超线程的服务器,MAXDOP 值不应超过每个 NUMA 节点的物理处理器数量。” 所以我想将 MAXDOP 设置为 6(一个 NUMA 节点中的内核数。)
然而,微软关于最大并行度选项的文档http://technet.microsoft.com/en-us/library/ms181007(v=SQL.105).aspx告诉我可以用于 MAXDOP 的最大值SQL Server 2008 R2 标准版为 4。
所以,我猜测 MAXDOP 4 的版本推荐覆盖了 MAXDOP=6 的处理器/NUMA 推荐?其他任何人都有这种配置并且知道如果我尝试将 MAXDOP 设置为 6 会发生什么?
问题
自今年年初以来,由于我们系统中的 SQL 超时,我们一直在经历高度的用户中断。
有问题的 SQL-Server 实例在工作时间内的 CPU 使用率非常高(所有 16 个内核的 CPU 使用率始终高于 90%)。
我们还注意到等待时间非常长:CXPACKET 和 LATCH_EX 的组合约占所有等待的 97%。这在 CXPACKET 和 LATCH_EX 之间分成大约 50/50。
占 LATCH_EX 绝大多数 (>95%) 的非缓冲闩锁等待是 ACCESS_METHODS_DATASET_PARENT。
这表明问题与并行性有关。
等待时间比例的一个例子是:
CXPACKET : 332,301,799 ms
LATCH_EX : 267,955,752 ms
PAGEIOLATCH_SH : 2,955,160 ms
Run Code Online (Sandbox Code Playgroud)
这是 1 月 11 日 08:00-16:24 之间的时间段。
正在考虑的选项
1) 将 MAXDOP 从 0 更改为 4 到 8 之间的值
2) 将并行度的成本阈值从 50 修改为更高的数字
关于如何减轻我们所看到的非常高的 CPU 负载并减少超时的建议最受欢迎,特别是建议的行动方案是否明智,以及将 MAXDOP 和并行成本阈值更改为哪些数字。
背景资料
SQL-Server 2008 R2 在 AMD Opteron 6180 SE …
一直在与我公司的应用程序供应商就并行性进行辩论。他们坚持认为 Maxdop = 1 对 app/db 有显着的性能改进,但他们绝对没有提供这方面的证据。
我测试了各种 DOP/CT 设置,发现在使用 Maxdop 4(8 个超线程内核)和 CT 150 时,自动化测试的整体性能提高了 28%。
供应商的 DBA 最近表示:“即使 DOP 为‘1’,MSSQL 的内部进程也能使用该值,在使用它的 MSSQL 服务器中存在低于 51 的 SPID、幽灵清理等问题这个。”
我已经对此进行了研究,尽管信息很少,但 Paul Randall 至少说 Ghost 清理始终是单线程的,所以显然供应商的 dba 不正确?
当 Maxdop =1 时,对 CT 的影响有什么想法吗?
我需要了解 sql server 查询的以下行为
系统有 4 个 CPU,超线程比率为 20,使 80 个逻辑处理器在我的 sql server 实例上计数。
当前 MAXDOP 为 0,ctop 为 5
这是一个只读实例,充当 LS 的备用实例,其中完成所有报告。
进入的许多查询似乎显示并行度为 64。
问题: .1。当逻辑处理器数为 80 时,为什么并行度不是 80?
谢谢
performance sql-server sql-server-2012 maxdop query-performance
maxdop ×10
sql-server ×7
parallelism ×3
performance ×2
latch ×1
numa ×1
optimization ×1
timeout ×1