症狀
當您使用新的 Microsoft SQL Server 2016 (或 2017) 執行個體,或使用從舊版 SQL Server 升級的 SQL Server 2016 (或 2017) 執行個體時,您會遇到高 CPU 使用率的效能問題。 此外,如果您查詢 sys.dm_os_spinlock_stats 資料表,您會注意到 [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 的最新累積更新:
Microsoft 已確認這是「適用對象」一節中列出的 Microsoft 產品中的問題。
參考資料
了解 Microsoft 用來說明軟體更新的術語。
白皮書《診斷和解決 SQL Server 上的執行緒同步鎖定爭用》詳細討論了與執行緒同步鎖定爭用相關的問題和解決方案。