KB3195888 - 修正:在 SQL Server 2016 和 2017 中,高 CPU 使用率導致效能問題

套用到
SQL Server 2016 Developer - duplicate (do not use) SQL Server 2016 Enterprise - duplicate (do not use) SQL Server 2016 Enterprise Core - duplicate (do not use) SQL Server 2016 Express - duplicate (do not use) SQL Server 2016 Standard - duplicate (do not use) SQL Server 2016 Web - duplicate (do not use) SQL Server 2017 Developer on Windows SQL Server 2017 Enterprise Core on Windows SQL Server 2017 Enterprise on Windows SQL Server 2017 Standard on Windows SQL Server 2017 on Linux

症狀

當您使用新的 Microsoft SQL Server 2016 (或 2017) 執行個體,或使用從舊版 SQL Server 升級的 SQL Server 2016 (或 2017) 執行個體時,您會遇到高 CPU 使用率的效能問題。 此外,如果您查詢 sys.dm_os_spinlock_stats 資料表,您會注意到 [SECURITY_CACHE (安全性快取]) 的 [微調] 資料行中的 [微調] 值很高,而且 [CMED_HASH_SET (中繼資料快取) 資料列 ( 與資料表) 中的其他資料列相比。 例如,您注意到下列值。

具有高SECURITY_CACHE值和CMED_HASH_SET值的執行緒同步鎖定統計資料

原因

發生此問題的原因是高度並行系統中的高執行緒鎖定爭用。 在這些作業系統中,多個 CPU 執行緒會爭奪資源並旋轉較長的間隔,同時定期執行迴圈以判斷資源是否可用,而不是立即讓步。 當多個 CPU 執行緒持續 (資源的 while 迴圈) 旋轉而不是產生時,這會導致高 CPU 使用率和效能問題。

解決方式

此問題已在下列 SQL Server 累積更新中修正:

備註在 CU2) (套用 SQL Server 2016 累積更新 2 後,SECURITY_CACHE 和 CMED_HASH_SET 名稱會分別變更為 LOCK_RW_SECURITY_CACHE 和 LOCK_RW_CMED_HASH_SET。 套用 CU2 之後,值將顯示如下所示。

使用重新命名的安全性與中繼資料快取資料列進行更新後的執行緒同步鎖定統計資料

關於 SQL Server 的累積更新

SQL Server 的每個新累積更新都包含所有 Hotfix 和先前累積更新的所有安全性修正程式。 查看 SQL Server 的最新累積更新:

適用於 SQL Server 2017 的最新累積更新

適用於 SQL Server 2016 的最新累積更新

狀態

Microsoft 已確認這是「適用對象」一節中列出的 Microsoft 產品中的問題。

參考資料

了解 Microsoft 用來說明軟體更新的術語。

白皮書《診斷和解決 SQL Server 上的執行緒同步鎖定爭用》詳細討論了與執行緒同步鎖定爭用相關的問題和解決方案。