注释
此功能将在Microsoft SQL Server 的未来版本中删除。 请勿在新的开发工作中使用此功能,并修改当前尽快使用此功能的应用程序。 请改用 ALTER SERVER CONFIGURATION(Transact-SQL)。
若要执行多任务,Microsoft Windows 有时会在不同处理器之间移动进程线程。 虽然从操作系统方面而言,此活动是高效的,但是在高系统负载的情况下,该活动会降低 SQL Server 的性能,因为每个处理器缓存都会不断地重载数据。 将处理器分配到特定线程可以通过消除处理器重载和减少跨处理器的线程迁移来提高这些条件下的性能(从而减少上下文切换):线程和处理器之间的此类关联称为处理器相关性。
SQL Server 通过两个关联掩码选项支持处理器相关性:关联掩码(也称为 CPU 关联掩码)和关联 I/O 掩码。 有关亲和性 I/O 掩码选项的详细信息,请参阅 亲和性 Input-Output 掩码服务器配置选项。 对于具有 33 至 64 个处理器的服务器,CPU 和 I/O 关联支持需要额外分别使用 affinity64 mask 服务器配置选项 和 affinity64 Input-Output mask 服务器配置选项。
注释
对具有 33 到 64 个处理器的服务器的关联支持仅在 64 位操作系统上可用。
SQL Server 早期版本中存在的关联掩码选项动态控制 CPU 相关性。
在 SQL Server 中,可以配置关联掩码选项,而无需重启 SQL Server 实例。 使用sp_configure时,必须在设置配置选项后运行 RECONFIGURE 或 RECONFIGURE WITH OVERRIDE。 使用 SQL Server Express 时,更改关联掩码选项需要重启。
关联掩码的更改是动态进行的,因此可以按需启动和关闭用于在 SQL Server 中绑定进程线程的 CPU 计划程序。 当服务器上的条件改变时会发生这种情况。 例如,如果将 SQL Server 的新实例添加到服务器,可能需要调整关联掩码选项以重新分发处理器负载。
对关联位掩码进行修改需要 SQL Server 启用新的 CPU 计划程序并禁用现有的 CPU 计划程序。 然后就可以在新的或剩余的计划程序上处理新批处理。
若要启动新的 CPU 计划程序,SQL Server 应创建新的计划程序并将其添加到标准计划程序列表中。 新的计划程序仅用于新加入的批处理。 当前批处理会继续在同一计划程序上运行。 当释放了现有工作线程或创建了新的工作线程后,它们就会迁移到新的计划程序。
若要关闭某个计划程序,需要等到该计划程序上的所有批处理都完成其活动并退出之后。 已关闭的计划程序标记为脱机,因此不会为其计划任何新批处理。
无论是添加还是删除新的调度器,永久性系统任务(如 lockmonitor、检查点、系统任务线程(处理 DTC)和信号进程)在服务器运行时仍然会在调度器上继续运行。 这些永久性系统任务不会动态迁移。 若要跨计划程序重新分发这些系统任务的处理器负载,必须重启 SQL Server 实例。 当 SQL Server 尝试关闭与某个永久系统任务相关联的计划程序时,该任务会继续在脱机计划程序上运行(而不迁移)。 此计划程序绑定到修改后的关联掩码中的处理器,不应将任何负载置于更改之前与其关联的处理器上。 额外的离线调度器不大可能显著影响系统的负载。 如果情况并非如此,则需要重新启动数据库服务器才能重新配置这些任务。
I/O 亲和任务(如 Lazywriter 和 Logwriter)直接受到 I/O 亲和掩码的影响。 如果未关联延迟写入器和日志写入器任务,则它们遵循为其他永久任务(如 lockmonitor 或检查点)定义的相同规则。
为了确保新的关联掩码有效,RECONFIGURE 命令会验证正常的 CPU 和 I/O 关联是否互斥。 如果情况并非如此,则会向客户端会话和 SQL Server 错误日志报告一条错误消息,指示不建议使用此类设置。 运行 RECONFIGURE WITH OVERRIDE 选项允许不相互排斥的 CPU 和 I/O 关联。
如果指定了尝试映射到不存在的 CPU 的关联掩码,则 RECONFIGURE 命令会将错误消息报告给客户端会话和 SQL Server 错误日志。 在这种情况下,使用 RECONFIGURE WITH OVERRIDE 选项不起作用,并再次报告相同的配置错误。
还可以将 SQL Server 活动排除在 Windows 2000 或 Windows Server 2003 操作系统分配的分配特定工作负荷的处理器之外。 如果将表示处理器的位设置为 1,则 SQL Server 数据库引擎会选择该处理器进行线程分配。 当你将 affinity mask
设置为 0(默认值)时,Microsoft Windows 2000 或 Windows Server 2003 的调度算法会设置线程的关联性。 如果将 affinity mask
设置为任一非零值,关联将把该值解释为一个位掩码,用于指定可选的处理器。
通过将 SQL Server 线程与在特定处理器上运行隔离,Microsoft Windows 2000 或 Windows Server 2003 可以更好地评估系统处理特定于 Windows 的进程。 例如,在运行两个 SQL Server 实例(实例 A 和 B)的 8 CPU 服务器上,系统管理员可以使用关联掩码选项将第一组 4 个 CPU 分配给实例 A,将第二组 4 个 CPU 分配给实例 B。若要配置 32 个以上的处理器,请同时设置地缘掩码和 affinity64 掩码。
affinity mask
的值如下:
一个字节
affinity mask
涵盖多处理器计算机中最多 8 个 CPU。双字节
affinity mask
在多处理器计算机中可覆盖最多 16 个 CPU。在多处理器计算机中,三字节
affinity mask
可以覆盖最多 24 个 CPU。一个四字节的
affinity mask
可以支持多处理器计算机中的最多 32 个 CPU。若要涵盖 32 个以上的 CPU,请为前 32 个 CPU 配置四字节关联掩码,并为剩余 CPU 配置最多 4 字节相关性64 掩码。
由于设置 SQL Server 处理器相关性是一项专用作,因此建议仅在必要时使用。 在大多数情况下,Microsoft Windows 2000 或 Windows Server 2003 默认相关性可提供最佳性能。 设置关联掩码时,还应考虑其他应用程序的 CPU 要求。 有关详细信息,请参阅 Windows 操作系统文档。
注释
可以使用 Windows 系统监视器查看和分析单个处理器使用情况。
指定关联 I/O 掩码选项时,必须与关联掩码配置选项结合使用。 不要在 affinity mask
交换机和关联 I/O 掩码选项中启用相同的 CPU。 与每个 CPU 对应的位应处于以下三种状态之一:
在关联掩码选项和关联 I/O 掩码选项中,两者的值均为 0。
在关联掩码选项中为 1,在关联 I/O 掩码选项中为 0。
在关联掩码选项中为 0,在关联 I/O 掩码选项中为 1。
谨慎
不要在 Windows 操作系统中配置 CPU 关联性,同时在 SQL Server 中配置关联掩码。 这些设置尝试实现相同的结果,如果配置不一致,则可能会产生不可预知的结果。 SQL Server CPU 相关性最好使用 SQL Server 中的sp_configure选项进行配置。
示例:
作为设置关联掩码选项的示例,如果选择处理器 1、2 和 5 为可用,将位 1、2 和 5 设置为 1,位 0、3、4、6 和 7 设置为 0,则指定十六进制值 0x26 或其十进制等价 38
。 从右到左对位进行编号。 相关性掩码选项开始将处理器计数从 0 到 31,以便在以下示例中,计数器 1
表示服务器上的第二个处理器。
sp_configure 'show advanced options', 1;
RECONFIGURE;
GO
sp_configure 'affinity mask', 38;
RECONFIGURE;
GO
这些是 affinity mask
适用于一个包含 8 个处理器的系统的值。
十进制值 | 二进制位掩码 | 允许 SQL Server 线程在哪些处理器上运行 |
---|---|---|
1 | 00000001 | 0 |
3 | 00000011 | 0 和 1 |
7 | 00000111 | 0、1 和 2 |
15 | 00001111 | 0、1、2 和 3 |
31 | 00011111 | 0、1、2、3 和 4 |
63 | 00111111 | 0、1、2、3、4 和 5 |
127 | 01111111 | 0、1、2、3、4、5 和 6 |
255 | 11111111 | 0、1、2、3、4、5、6 和 7 |
关联掩码选项是一个高级选项。 如果使用sp_configure系统存储过程更改设置,则只能在显示高级选项设置为 1 时更改affinity mask
。 执行 Transact-SQL RECONFIGURE 命令后,新设置将立即生效,无需重启 SQL Server 实例。
非统一内存访问 (NUMA)
使用基于硬件的非均匀内存访问(NUMA)和亲和掩码时,节点中的每个调度程序都将亲和到其自己的 CPU。 如果未设置关联掩码,则每个计划程序将关联到 NUMA 节点中的 CPU 组,映射到 NUMA 节点 N1 的计划程序可以在节点中的任何 CPU 上计划工作,但不能在与另一个节点关联的 CPU 上工作。
针对单个 NUMA 节点执行的任何操作都只能使用该节点中的缓冲区页。 当针对多个节点上的 CPU 以并行方式执行操作时,可以使用所涉及的任何节点中的内存。
许可问题
动态关联受 CPU 许可的严格约束。 SQL Server 不允许任何违反许可策略的关联掩码选项配置。
初创公司
如果指定的关联掩码违反 SQL Server 启动期间或数据库附加期间的许可策略,则引擎层将完成启动过程或数据库附加/还原作,然后将关联掩码的sp_configure运行值重置为零,并向 SQL Server 错误日志发出错误消息。
重新配置
如果指定的关联掩码在运行 Transact-SQL RECONFIGURE 命令时违反许可策略,则会向客户端会话和 SQL Server 错误日志报告一条错误消息,要求数据库管理员重新配置关联掩码。 在这种情况下,不接受 RECONFIGURE WITH OVERRIDE 命令。
另请参阅
监视资源使用情况(系统监视器)
RECONFIGURE (Transact-SQL)
服务器配置选项 (SQL Server)
sp_configure(Transact-SQL)
ALTER SERVER CONFIGURATION (Transact-SQL)