症状
使用 Microsoft SQL Server 2016 (或 2017) 的新实例或从早期版本的 SQL Server 升级的 SQL Server 2016 (或 2017) 实例时,由于 CPU 使用率高,会遇到性能问题。 此外,如果查询sys.dm_os_spinlock_stats表,则会发现与表) 中的其他行相比,SECURITY_CACHE (安全缓存) 和 CMED_HASH_SET (元数据) 缓存 ( (行的自旋列中具有较高的值。 例如,你注意到以下值。
原因
由于高度并发系统中的自旋锁争用率较高,因此会出现此问题。 在这些操作系统中,多个 CPU 线程在定期在循环中运行以确定资源是否可用,而不是立即生成时,争用资源并以延长间隔旋转。 当多个 CPU 线程在一 段时间内 (循环) 资源而不产生结果时,这会导致 CPU 使用率和性能问题。
解决方法
以下SQL Server累积更新修复了此问题:
备注 应用 SQL Server 2016 累积更新 2 (CU2) 后,SECURITY_CACHE和CMED_HASH_SET名称将分别更改为LOCK_RW_SECURITY_CACHE和LOCK_RW_CMED_HASH_SET。 应用 CU2 后,值如下所示。
SQL Server的每个新的累积更新都包含上一个累积更新中包含的所有修补程序和所有安全修补程序。 查看SQL Server的最新累积更新:
状态
Microsoft 已确认这是在“适用范围”部分中列出的 Microsoft 产品存在的问题。
参考
了解 Microsoft 用于描述软件更新的 术语 。
SQL Server上的诊断和解决自旋锁争用白皮书详细讨论了与自旋锁争用相关的问题和解决方法。