coo*_*rsh 8 performance cpu-usage sql-server-2012
使用 Server + Cal 许可模型安装 SQL Server Enterprise 2012 后,在一台有 2 个处理器、每个处理器有 16 个内核(并且不涉及超线程)的计算机上并将服务器置于极其繁重的负载下,第一个处理器上的 16 个内核未得到充分利用,第二个 CPU 上的前 4 个内核被大量使用,最后 12 个内核根本没有使用(因为此 sql server 版本的 20 个内核限制)。CPU 总利用率显示为 25% 左右。不幸的是,即使任务均匀分布在 20 个内核上,服务器的性能也极差。
Windows Server 在 ESX Server 下的 VMWare 虚拟映像上运行,但所有 CPU 都分配给了 Windows Server。
我们尝试更改关联设置(例如,将大多数内核分配给 CPU,将其他内核分配给 I/O),但这并没有帮助解决性能问题。
将产品版本升级到 SQL Server Enterprise Core 2012 不仅使 SQL Server 能够利用第二个处理器上以前未使用的 12 个内核,而且还使所有处理器的任务分布更加均匀。为了解决积压的请求,CPU 利用率跃升至 90% 左右,一旦被赶上,则下降到 33% 左右,但自从我们故障转移到新更新的版本后,性能显着提高,性能问题也消失了。
我想知道是否有人知道什么可能导致 SQL Server 不均匀地分配负载,几乎完全依赖于有 12 个内核空闲的第二个处理器的前 4 个内核,并且只为第一个上的 16 个内核中的每一个分配几个任务处理器。另外,有没有什么方法可以让我们在不升级产品版本的情况下在使用的 20 个内核之间更均匀地分配负载?
该问题的另一面是产品升级做了什么导致 SQL Server 开始在它识别的所有核心之间均匀分配负载?
感谢回答这些问题和/或链接的任何见解,它们可能有助于我更好地理解如何理解正在发生的事情。
小智 4
性能不均匀可能是 20 核限制与 sql server 在 NUMA 计算机上调度线程的方式相结合的结果。不幸的是,SQL Server 2012 没有使用任何智能来决定使用哪 20 个核心,从而导致每个 NUMA 节点的核心数量不平衡。如果 32 个核心分布在 2 个 NUMA 节点上,您可能最终会得到 16/4 的分配。这是有问题的,因为 SQL 会尝试以循环方式均匀地平衡 NUMA 节点之间的活动(假设您没有强制使用资源调控器的关联性)。
在您的情况下,1/2 负载分配给 4 个核心,1/2 分配给 16 个核心。4 核节点上的瓶颈有效地充当节流阀,将机器的容量限制为 2x 4 核 = 8 核 = 25% CPU 使用率。
一旦升级到核心版本,sql 就会利用 2 个 numa 节点上的所有 32 个核心(16/16 分割)。性能提升等
可以提高性能的一种选择是利用 sql server 资源调控器将大部分工作负载关联到一个 numa 节点。例如,您可以创建一个资源池WEB_APP,并将其关联为仅在16核numa节点上运行。分配给 WEB_APP 池的负载可以利用 50% 的服务器容量,加上 4 核节点的剩余 12.5% 容量。
另一个选项是将 sql server 可用的核心限制为每个 numa 节点的 10 个。