按 SQL Server 版本划分的计算能力限制

适用范围:SQL Server

本文讨论不同 SQL Server 版本的计算能力限制,以及在具有同步多线程 (SMT) 处理器的物理和虚拟化环境中计算能力限制有何不同。 在 Intel CPU 上,SMT 称为超线程

概述

关系图显示与计算容量限制的映射。

下表描述上图中的表示法:

说明
0..1 零个或 1 个
1 恰好一个
1..* 一个或更多
0..* 零个或更多
1..2 1 个或 2 个

进一步详细阐述:

  • 每个虚拟机 (VM) 有一个或多个虚拟处理器。
  • 一个或多个虚拟处理器被分配给恰好一个虚拟机。
  • 零个或一个虚拟处理器映射到零个或多个逻辑处理器。 如果虚拟处理器到逻辑处理器的映射为:
    • 一对零:表示来宾操作系统未使用未绑定的逻辑处理器。
    • 一对多:表示过度提交。
    • 零对多:表示主机系统上没有虚拟机。 因此 VM 不使用任何逻辑处理器。
  • 插槽映射到零个或多个内核。 如果插槽到内核的映射为:
    • 一对零:表示一个空插槽。 未安装芯片。
    • 一对一:表示在插槽中安装了单核芯片。 这种映射现在已经非常罕见。
    • 一对多:表示在插槽中安装了多核芯片。 典型值为 2、4 或 8。
  • 内核映射到一个或两个逻辑处理器。 如果内核到逻辑处理器的映射为:
    • 一对一:SMT 处于关闭状态。
    • 一对二:SMT 处于打开状态。

下列定义适用于本文中使用到的术语:

  • 从 SQL Server、操作系统、应用程序或驱动程序的角度理解,线程或逻辑处理器是一种逻辑计算引擎。

  • 内核是一个处理器单元。 它可以包含一个或多个物理处理器。

  • 物理处理器可包含一个或多个内核。 物理处理器等同于处理器包或插槽。

将每个 NUMA 节点的逻辑核心数限制为 64

在每个 NUMA 节点有 64 个以上逻辑处理器的服务器上,可能会遇到堆栈转储等问题。 BIOS 或固件配置可将提供给操作系统的逻辑核心计数减少到每个 NUMA 节点最多 64 个逻辑处理器。

注意

SQL Server 2022 (16.x) 累积更新 11 引入了一个中断性变更,即如果数据库引擎检测到每个 NUMA 节点的逻辑核心数超过 64 个,则不会启动。

从 SQL Server 2022 (16.x) 累积更新 15 开始,安装程序会发出警告,指出此配置不受支持,并将导致数据库引擎服务停止和禁用。 安装程序日志中还包括该警告。

可通过禁用 SMT 来减少 Azure 虚拟机中每个 NUMA 节点的逻辑核心计数。 对于裸机 SQL Server 实例,可使用子 NUMA 群集 (SNC) 或每套接字节点数 (NPS) 选项减少逻辑核心计数。

在 Azure 虚拟机中禁用 SMT

SQL Server 对每个 NUMA 节点支持的逻辑核心数量限制为 64 个。 在某些情况下,Azure Mv3 系列 VM 可能会超过此限制,这样会阻止 SQL Server 启动,或者允许其以较低性能运行。 若要禁用 SMT,请使用 PowerShell注册表编辑器 (reg.exe) 进行以下更改。 在编辑注册表之前,请务必先备份。

  1. 检查逻辑核心数量。 如果比率为 2:1(逻辑核心数量是核心数量的两倍),则启用 SMT。

    Get-CimInstance -ClassName Win32_Processor | Select-Object -Property "NumberOfCores", "NumberOfLogicalProcessors"
    
  2. 使用以下两个注册表更改停用 SMT,然后重新启动 VM。

    reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v FeatureSettingsOverride /t REG_DWORD /d 8264 /f
    reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v FeatureSettingsOverrideMask /t REG_DWORD /d 3 /f
    
  3. 再次检查逻辑核心数量。 逻辑核心数量应与核心数量匹配。

    Get-CimInstance -ClassName Win32_Processor | Select-Object -Property "NumberOfCores", "NumberOfLogicalProcessors"
    

减少裸机实例上的逻辑核心计数

下表介绍了如何减少 SQL Server 裸机实例上的逻辑核心计数。

Intel CPU 上,可以启用子 NUMA 群集 (SNC),以前称为 Cluster-on-Die (CoD),从而在单个物理套接字中生成两个 NUMA 域。

配置设置 说明
SNC 已停用(默认值) 停用子 NUMA 群集。
SNC 已停用 启用子 NUMA 群集。

AMD CPU 上,可以启用每个套接字 (NPS) 选项的各种节点。

配置设置 说明
NPS0 在双套接字系统中,NUMA 显示为跨节点交错的所有内存通道的单一节点。
NPS1(默认值) 此配置为每个套接字显示一个 NUMA 节点。
NPS2 此配置为每个套接字显示两个 NUMA 节点,类似于 SNC。
NPS4 此配置为每个套接字显示四个 NUMA 节点。

注解

具有多个物理处理器的系统或是具有含多个内核和/或 SMT 的物理处理器的系统,可支持操作系统同时执行多项任务。 每个执行线程都显示为一个逻辑处理器。 例如,如果计算机具有两个启用 SMT 的四核处理器,且每个内核两个线程,则有 16 个逻辑处理器:2 个处理器 x 每个处理器 4 个内核 x 每个内核 2 个线程。 值得注意的是:

  • 来自 SMT 内核的单线程的逻辑处理器计算能力不及来自禁用 SMT 的同一内核的逻辑处理器计算能力。

  • SMT 内核中两个逻辑处理器的计算能力超过了禁用 SMT 的同一内核的计算能力。

每个 SQL Server 版本都有以下两种计算能力限制:

  • 插槽(或物理处理器或处理包)的最大数目

  • 操作系统报告的最大内核数

这些限制适用于单个 SQL Server实例。 它们代表单个实例使用的最大计算能力。 它们不会限制可能部署实例的服务器。 实际上,在同一物理服务器上部署多个 SQL Server 实例可以有效使用物理服务器的计算能力,因为插槽和/或内核超出了容量限制允许的数量。

下表指定每个版本的 SQL Server的单个实例的计算能力限制:

SQL Server 版本 单个实例的最大计算能力(SQL Server 数据库引擎) 单个实例的最大计算能力(AS、RS)
Enterprise Edition:基于内核的许可 1 操作系统支持的最大值 操作系统支持的最大值
开发人员 操作系统支持的最大值 操作系统支持的最大值
Standard 限制为 4 个插槽或 24 核,取二者中的较小值 限制为 4 个插槽或 24 核,取二者中的较小值
Express 限制为 1 个插槽或 4 核,取二者中的较小值 限制为 1 个插槽或 4 核,取二者中的较小值

1 Enterprise Edition 配合服务器 + 客户端访问许可证 (CAL) 授权将每个 SQL Server 实例的最大内核数限制为 20。 (此授权不可用于新协议。)基于内核的服务器许可模型没有限制。

在虚拟环境中,计算能力的限制基于逻辑处理器的数量,而不是内核数。 这是因为处理器体系结构对来宾应用程序不可见。

例如,如果服务器的四个插槽中插入了四核处理器,同时该服务器每个内核可支持两个 SMT 线程,这样在启用 SMT 时就有 32 个逻辑处理器。 但在禁用 SMT 时只有 16 个逻辑处理器。 可以将这些逻辑处理器映射至服务器上的虚拟机。 这些虚拟机在该逻辑处理器上的计算负载会映射到主机服务器中物理处理器上的执行线程。

如果每个虚拟处理器的性能很重要,最好禁用 SMT。 可以在 BIOS 安装期间为处理器进行 BIOS 设置,从而配置 SMT,但这通常是服务器范围的操作,会影响服务器上运行的所有工作负荷。 可以考虑将要在虚拟环境中运行的工作负载与受益于物理操作系统环境中的 SMT 性能提升的工作负载分隔开。

获取帮助

参与编辑 SQL 文档

你是否知道你可以自行编辑 SQL 内容? 你如果这样做,不仅可以帮助改进我们的文档,还可以获得页面贡献者的殊荣。

有关详细信息,请参阅如何参与 SQL Server 文档编辑