为什么我们的 8-cpu SQL Server 机器上的 CPU 使用如此不对称?

Jef*_*ood 7 central-processing-unit smp sql-server-2008

我注意到运行 SQL Server 2008 的 8 CPU 数据库服务器上的 CPU 使用率根本不平衡。

以下是前一段时间随机一天的 1 天平均值,这是典型且始终不对称的:

9、15、10、21、18、21、14、9

(这里只有缩略图,因为图片真的很高,但点击查看全尺寸图片)

我们的4-CPU Web服务器,这些都是几乎完全和完美的平衡相比,所有的时间,让我吃惊的奇怪。

现在,这是一个专用服务器,因此唯一在其上运行的是 SQL Server 2008(以及我们大量使用的内置全文索引),所以我不确定为什么 CPU 使用率会如此不对称. 想法?

小智 9

所有这些图表的比例都不同,除了 4 个图表上的峰值外,您的平均值都在 10-25% 左右。


Kyl*_*yle 9

您的文件/文件组是如何设置的?

我要抄袭自己

关于 IO 的另一个想法:我们小心地将最大最常用的表设置在包含多个文件的文件组上。这样做的性能增强之一是 SQL 会将请求线程化到文件组中的每个文件 - 因此,如果 BigOverUsedTable 在 FileGroup1 上并且 FileGroup1 中有四个文件并且您的数据库有 8 个内核,它实际上将使用四个内核来执行“选择”从 BigOverUsedTable 处理大量令人讨厌的查询” - 否则,它将只使用一个 CPU。我们从这篇 MSDN 文章中得到了这个想法:

http://msdn.microsoft.com/en-us/library/ms944351.aspx

来自 TFA:

“文件组使用并行线程来改善数据访问。当顺序访问一个表时,系统会并行地为每个文件创建一个单独的线程。当系统对具有四个文件的文件组中的一个表执行表扫描时,它使用四个单独的线程线程并行读取数据。通常,在单独的磁盘上使用多个文件可以提高性能。文件组中的文件过多会导致并行线程过多并产生瓶颈。”

由于这个建议,我们在 8 核机器上的文件组中有四个文件。它运作良好。

编辑:这现在有另一个(可能)更好的答案。这些图表超出了比例——如果你仔细观察,正如 uzbones 指出的那样,每个处理器实际上大约有 20% 的负载。

编辑:我们实际上可以看出使用多个文件文件组有帮助,因为我们没有将所有表放在包含四个文件的文件组中。对“单个文件”文件组的大查询仅使用一个 CPU,但对四个文件文件组中的表的查询却使用了 4 个 CPU。


Mat*_*ewC 6

看一下这个:

http://blogs.technet.com/mat_stephen/archive/2005/02/02/365325.aspx

SQL 可能只写入少数文件,并且每个处理器都在使用每个文件。