服务器配置:关联 I/O 掩码

适用范围:SQL Server

为了执行多任务, Windows 有时会在不同的处理器之间移动进程线程。 虽然从操作系统方面而言,此活动是高效的,但是在高系统负载的情况下,该活动会降低 SQL Server 的性能,因为每个处理器缓存都会不断地重载数据。 如果将各个处理器分配给特定线程,则通过消除处理器的重新加载需要,可以提高在这些条件下的性能;线程与处理器之间的这种关联称为“处理器关联”。

SQL Server 通过以下两个关联掩码选项来支持处理器关联:affinity mask(也称为“CPU 关联掩码”)和 affinity I/O mask。 有关 affinity mask 选项的详细信息,请参阅配置关联掩码服务器配置选项。 对具有 33 至 64 个处理器的服务器的 CPU 和 I/O 关联支持还要求分别使用 affinity64 maskaffinity64 I/O 掩码服务器配置选项。

注意

对具有 33 到 64 个处理器的服务器的关联支持仅在 64 位操作系统上可用。

affinity I/O mask 选项将 SQL Server 磁盘 I/O 绑定到 CPU 的指定子集。 在高端 SQL Server 联机事务处理 (OLTP) 环境中,此扩展可以提高 SQL Server 线程执行 I/O 的性能。 此增强功能不支持对各个磁盘或磁盘控制器的硬件关联。

affinity I/O mask 的值指定了在多处理器计算机中有哪些 CPU 可用于处理 SQL Server 磁盘 I/O 操作。 该掩码是一个位图,其中最右边的位指定顺序最低的 CPU(0),该位左边的位指定顺序次低的 CPU(1),依此类推。 若要配置 32 个以上的处理器,请同时设置 affinity I/O maskaffinity64 I/O mask.

affinity I/O mask 的值如下:

掩码中的字节数 CPU 数
1 字节 最多 8 个 CPU
2 字节 最多 16 个 CPU
3 字节 最多 24 个 CPU
4 字节 最多 32 个 CPU

若要涵盖 32 个以上的 CPU,可为前 32 个 CPU 配置一个 4 字节affinity I/O mask,为其余的 CPU 配置一个最多 4 字节的 affinity64 I/O mask

相关性 I/O 模式中的位 1 指定相应的 CPU 有资格执行 SQL Server 磁盘 I/O 操作。 位 0 指定不应为相应的 CPU 计划任何 SQL Server 磁盘 I/O 操作。 如果将所有位设置为 affinity I/O mask 或不指定 0,则 SQL Server 磁盘 I/O 将由任何可处理 SQL Server 线程的 CPU 执行。

因为设置 SQL Server affinity I/O mask 选项是一项专用操作,所以只在需要时使用。 大多数情况下,默认 Windows 关联可提供最佳性能。

指定“affinity I/O mask”选项后,必须将其与“affinity mask”选项一起使用。 请勿在“affinity I/O mask”开关和“affinity mask”选项中启用相同的 CPU。 每个 CPU 对应的位必须处于下列三种状态之一:

  • affinity I/O mask 选项和 affinity mask 选项中的 0
  • affinity I/O mask 选项中的 1affinity mask 选项中的 0
  • affinity I/O mask 选项中的 0affinity mask 选项中的 1

affinity I/O mask选项是一个高级选项。 如果使用 sp_configure 系统存储过程来更改该设置,则只有在 show advanced options 设置为 1 时才能更改 affinity I/O mask。 在 SQL Server 中,重新配置“affinity I/O mask”选项要求重启 SQL Server 实例。

注意

请不要在 Windows 操作系统中配置 CPU 关联后,还在 SQL Server 中配置affinity mask。 这些设置实现的效果相同,如果配置不一致,则会得到意外的结果。 最好使用 SQL Server 中的 sp_configure 系统存储过程配置 SQL Server CPU 关联。