Microsoft SQL Server CPU配置
SQL Server的性能与CPU和核心配置有多种依赖性。
超线程
超线程是指同时多线程(SMT)实施、可提高x86处理器上执行计算的并行性。SMT在Intel和AMD处理器上均可用。
超线程会导致逻辑CPU在操作系统中显示为物理CPU。然后、SQL Server会看到这些额外的CPU、并将其用作核心数多于物理内核数的情况。这可以通过提高并行处理能力显著提高性能。
此处需要注意的是、每个SQL Server版本都有自己的计算能力限制。有关详细信息、请参见计算容量限制(按SQL Server版本)。
核心和许可
SQL Server许可有两种选择。第一种称为服务器+客户端访问许可证(CAL)模式;第二种是按处理器核心模式。尽管使用server + CAL策略可以访问SQL Server中提供的所有产品功能、但每个插槽的硬件限制为20个CPU核心。即使每个插槽的CPU核心数超过20个的服务器具有SQL Server Enterprise Edition + CAL、应用程序也无法在该实例上一次使用所有这些核心。
下图显示了启动后的SQL Server日志消息、指示核心限制的强制实施。
因此、要使用所有CPU、应使用每个处理器的核心许可证。有关SQL Server许可的详细信息、请参见 "SQL Server 2022:您的现代数据平台"。
CPU关联性
除非遇到性能问题、否则您不太可能需要更改处理器关联性默认值、但仍然值得了解它们是什么以及它们的工作原理。
SQL Server通过两个选项支持处理器关联性:
-
CPU相关性掩码
-
相关性I/O掩码
SQL Server使用操作系统中可用的所有CPU (如果选择了按处理器核心许可证)。此外、它还会为每个CPU创建计划程序f0r、以便充分利用任何给定工作负载的资源。多任务处理时,操作系统或服务器上的其他应用程序可以将进程线程从一个处理器切换到另一个处理器。SQL Server是一个资源密集型应用程序、发生这种情况时、性能可能会受到影响。为了最大限度地减少影响、您可以对处理器进行配置、使所有SQL Server负载都定向到一组预先选择的处理器。这可通过使用CPU相关性掩码来实现。
相关性I/O掩码选项可将SQL Server磁盘I/O绑定到一部分CPU。在SQL Server OLTP环境中、此扩展可以显著提高发出I/O操作的SQL Server线程的性能。
最大平行度(MAXDOP)
默认情况下、如果选择了按处理器核心许可证、则SQL Server会在查询执行期间使用所有可用的CPU。
尽管这对于大型查询很有用、但它可能会出现发生原因性能问题并限制并发性。一种更好的方法是、将并行处理限制为单个CPU插槽中的物理核心数。例如、在具有两个物理CPU插槽且每个插槽具有12个核心的服务器上、无论是否使用超线程、均 `MAXDOP`应设置为12。 `MAXDOP`不能限制或指定要使用的CPU。相反、它会限制单个批处理查询可使用的CPU数量。
* NetApp建议*对于数据仓库等DSS,从50开始, `MAXDOP`并根据需要进行调整。请确保在进行更改时测量应用程序中的关键查询。 |
最大工作线程数
最大工作线程数选项有助于在大量客户端连接到SQL Server时优化性能。
通常、系统会为每个查询创建一个单独的操作系统线程。如果与SQL Server同时建立了数百个连接、则每个查询一个线程的配置可能会占用过多的系统资源。该 `max worker threads`选项可以使SQL Server创建一个工作线程池、从而共同为大量查询请求提供服务、从而有助于提高性能。
默认值为0、这允许SQL Server在启动时自动配置工作线程数。这适用于大多数系统。最大工作线程数是一个高级选项、没有经验丰富的数据库管理员(Database Administrator、DBa)的帮助、不得更改。
应在何时配置SQL Server以使用更多工作线程?如果每个计划程序的平均工作队列长度超过1、则向系统添加更多线程可能会更有用、但前提是负载不受CPU制约或遇到任何其他繁重等待。如果出现上述任一情况、添加更多线程将毫无帮助、因为它们最终会等待其他系统瓶颈。有关最大工作线程数的详细信息、请参见 "配置最大工作线程数服务器配置选项"。
使用SQL Server Management Studio配置最大工作线程数。
以下示例显示了如何使用T-SQL配置最大工作线程数选项。
EXEC sp_configure 'show advanced options', 1; GO RECONFIGURE ; GO EXEC sp_configure 'max worker threads', 900 ; GO RECONFIGURE; GO