我们在专用机箱上安装了 SQL Server 2008 R2 (10.5),该机箱配有单个 2.4Ghz 处理器,通常 CPU 利用率为 70-80%。我们即将向应用程序添加大量用户,因此想要在机箱上添加第二个处理器(扩展)。
SQL Server 是否会自动使用第二个处理器来平衡线程,还是需要进行其他配置?换句话说,添加第二个处理器是否会将 CPU 使用率降低到每个 CPU 35-40%,从而自动平衡负载?
根据我在这里读到的内容,似乎将会:http://msdn.microsoft.com/en-us/library/ms181007.aspx
但是,我在其他地方读到过,通过将数据库表分配给不同的文件组可以提高 CPU 性能,但我不确定我们是否想在这一点上变得如此复杂。
答案1
您提供的链接是最大并行度。该功能与您询问的完全不同。
只要操作系统能够看到它,并且只要 SQL Server 中的“关联掩码”设置为 0,SQL Server 就会使用添加到您的服务器的新 CPU。您需要EXEC master.dbo.sp_configure 'affinity mask'
从查询窗口运行并查看 config_value 的结果。只要它是 0,那么 SQL 就会自动使用新 CPU。但是,在添加新 CPU 之前,您首先需要查看您正在运行的 SQL 版本。支持的最大 CPU 数量因版本而异。
下面的链接将概述每个版本的限制。如果您不知道您拥有的是哪个版本,那么您可以SELECT SERVERPROPERTY('Edition')
从同一个查询中运行以找出答案。
答案2
可以通过将表分布在文件组中来提高 CPU 性能,但这有点间接。
当 SQL Server 想要读取数据时,它会发出请求并让发出请求的线程休眠,直到 I/O 硬件满足请求。如果您的查询跨位于不同物理存储上的表,或者存储在同一文件系统中跨多个物理驱动器的表,则 SQL Server 可以发出多个 I/O 请求。这使得 I/O 更快,这意味着 CPU 休眠的时间更少。