SQL Server 2005 更喜欢每个 CPU 使用一个核心吗?

SQL Server 2005 更喜欢每个 CPU 使用一个核心吗?

嗨伙计,

我有一个 SQL Server 2005 系统,里面有 4 个 CPU,每个 CPU 有 4 个核心。它目前主要只使用 4 个核心,即 4 个核心的峰值利用率在 90% 左右,其他核心的利用率接近 30%。我假设 4 个核心是每个 CPU 一个,但我不确定。有人知道这是预期的行为吗?增加的负载是否会分布到其他核心上,而不是进一步加载到当前的 4 个核心上。这是否表明我应该调查其他问题?

在峰值负载下,我预计至少会同时有超过 40 个连接,并且大多数(如果不是全部)连接都将设置为允许脏读。因此,我认为这与到达 SQL Server 的工作负载无关,而是它如何选择使用可用的 CPU 资源。

谢谢,

罗宾

答案1

SQL 会根据最大并行度和并行成本阈值自动管理 CPU 使用率,这两项功能均可在高级选项中使用sp_configure(请参阅联机丛书)。

您可能需要查看这些设置,并可能检查 SQL 脚本本身。

答案2

SQL 没有办法管理物理核心的线程分配。这是只有操作系统才有的特权。SQL 不强制执行亲和性掩码(缺少全局可配置的 SQL 宽亲和性掩码来限制 SQL 看到的 CPU 数量)。您看到的行为最终由主板驱动程序、CPU 驱动程序和核心操作系统驱动。我见过与多线程或驱动程序问题相关的类似行为。

理想的行为是让所有核心共享相同的 CPU 负载,也许其中一个核心由于处理某些硬件中断(网络)而具有更多的内核负载(红线)。

当然我假设你的 SQL 负载分散到各个 CPU 上,有一些非常不寻常的负载,比如请求很少但计算量非常大,这些负载无法分散,但同样,这些在 SQL 上下文中非常不寻常。

相关内容