AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 319145
Accepted
Brent Ozar
Brent Ozar
Asked: 2022-11-04 08:38:35 +0800 CST2022-11-04 08:38:35 +0800 CST 2022-11-04 08:38:35 +0800 CST

为什么 SQL Server 安装程序在这里推荐 MAXDOP 8?

  • 772

我在 AWS i3.16xlarge 上运行 SQL Server 2022 RC1 设置,具有 2 个套接字、2 个 NUMA 节点、每个节点 32 个逻辑处理器、总共 64 个逻辑处理器。

安装程序推荐 MAXDOP 8:

SQL Server 设置和任务管理器

但是,如果您单击该链接来配置 MAXDOP,建议会说:

MAXDOP 建议

根据那篇知识库文章,MAXDOP 应该是 16,而不是 8。当然,从技术上讲,8 小于 16 - 但 2、4 或 15 也是如此。8 来自哪里?

SQL Server 安装完成并启动服务后,日志显示 SQL Server 正在自动实现具有 4 个节点的 Soft-NUMA,每个节点具有 16 个逻辑处理器:

SQL Server 错误日志

同样,这表明 MAXDOP 应该是 16。

这是一个错误,还是我错过了一些明显的东西?设置将在 MAXDOP 8 停止的地方是否还有其他不成文的规则?

sql-server
  • 2 2 个回答
  • 1791 Views

2 个回答

  • Voted
  1. Best Answer
    Sean Gallardy
    2022-11-04T11:25:59+08:002022-11-04T11:25:59+08:00

    安装程序推荐 MAXDOP 8

    安装程序计算 MAXDop 如下:

    Step 1: Calculate Hardware NUMA and Soft NUMA
    Step 2: Decide whether Hardware or Soft NUMA will be used
    Step 3: Divide the total logical processors by the NUMA used
    Step 4: If > 15 LPs/NUMA, MAXDop = (LPs/NUMA)/2, otherwise MAXDop = LPs/NUMA
    

    在您的具体情况下:

    64 LPs total
    HW NUMA = 2
    Soft NUMA = 4
    

    将使用软 NUMA,64 LPs/4(软)= 16。16 > 15,取 16 / 2 = 8。

    人们是否同意额外的 /2,给定 >15 LPs/NUMA 是一个讨论点。无论如何,这就是当前存在的内容,并且确实符合MSDN TechNet BOL Docs Learn 文章推荐的内容。

    • 19
  2. Joe Obbish
    2022-11-04T10:42:36+08:002022-11-04T10:42:36+08:00

    我理解您想了解为什么 SQL Server 安装程序推荐 8 用于 MAXDOP。不幸的是,在默认条件下(启用自动软 NUMA),文档将推荐几乎所有服务器的 MAXDOP 可接受范围,而不是精确的单个值。

    该文档说明了以下内容:

    上表中的NUMA节点是指SQL Server 2016(13.x)及更高版本自动创建的soft-NUMA节点,如果soft-NUMA被禁用,则指基于硬件的NUMA节点。

    您的服务器有两个启用超线程的套接字。每个插槽有 16 个物理核心,每个插槽有 32 个逻辑核心。也启用了自动软 NUMA。下面是关于 auto soft-NUMA 如何处理这种情况的估计图表,其中 A 列是每个套接字的调度程序数量:

    numa 图表

    对于您的服务器,您最终将拥有 4 个软 NUMA 节点,每个节点有 16 个逻辑处理器。这意味着第 3 行的指导适用于您的情况:

    将 MAXDOP 保持在或低于每个 NUMA 节点的逻辑处理器数

    MAXDOP 值 8 小于每个软 NUMA 节点 16 个逻辑处理器的值,因此与文档没有冲突。

    在启用自动软 NUMA 时,该文档似乎并未针对大多数情况提供准确的指导。只有第 2 行和第 4 行给出了精确的指导,而不是可接受的 MAXDOP 范围。对于第 2 行,使用自动软 NUMA 获得该结果的唯一方法是启用具有 10 到 16 个逻辑内核的超线程的单插槽服务器。对于第 4 行,在启用自动软 NUMA 的情况下无法获得该结果。

    回到 SQL Server 设置的工作原理以及选择 8 的原因,它可能没有在任何地方记录。我不再处于可以使用大型服务器进行测试的位置,因此我无法寻找导致默认值大于 8 的服务器配置。话虽如此,微软多年来一直建议在各种情况下不超过 8地方。例如:_

    在 Azure SQL 数据库中,每个新的单一数据库和弹性池数据库的默认 MAXDOP 设置为 8。此默认设置可防止不必要的资源利用,同时仍允许数据库引擎使用并行线程更快地执行查询。通常不需要在 Azure SQL 数据库工作负载中进一步配置 MAXDOP,尽管它可以作为高级性能调整练习提供好处。

    2020 年 9 月,基于 Azure SQL 数据库服务中多年的遥测,MAXDOP 8 成为新数据库的默认值,作为最广泛的客户工作负载的最佳值。此默认设置有助于防止由于过度并行导致的性能问题。

    这些报价适用于 Azure SQL 数据库,因此它们并不直接适用于您的情况,但我认为它说明了 Microsoft 持有的一般心态,即超过 MAXDOP 8 是“高级性能调整练习”。

    就个人而言,您的服务器硬件配置的 MAXDOP 8 感觉是一个合理的起点。除非有一些驱动工作量因素,否则我不会从 MAXDOP 16 开始。考虑通常认为并行工作器分布的最佳性能结果:所有工作器应该在同一个硬 NUMA 节点上的不同物理内核上。如果没有 TF 2467 或虚拟机管理程序技巧,您的工作线程将如何分布的可能性如下:

    赔率

    MAXDOP 16 只保证 9% 的时间获得最佳结果。

    就个人而言,我不相信微软在这方面的文档做得很好。其中包含许多模棱两可、误导性或完全不正确的陈述。详细的想法在这里。

    • 6

相关问题

  • SQL Server - 使用聚集索引时如何存储数据页

  • 我需要为每种类型的查询使用单独的索引,还是一个多列索引可以工作?

  • 什么时候应该使用唯一约束而不是唯一索引?

  • 死锁的主要原因是什么,可以预防吗?

  • 如何确定是否需要或需要索引

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve