現象
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の累積的な更新プログラムで修正されました。
注 2016 累積更新プログラム 2 (CU2) SQL Server適用すると、SECURITY_CACHE名とCMED_HASH_SET名がそれぞれLOCK_RW_SECURITY_CACHEとLOCK_RW_CMED_HASH_SETに変更されます。 CU2 が適用されると、値は次のように表示されます。
SQL Serverの各新しい累積的な更新プログラムには、以前の累積的な更新プログラムに含まれていたすべての修正プログラムとすべてのセキュリティ修正プログラムが含まれています。 SQL Serverの最新の累積的な更新プログラムを確認してください。
状態
マイクロソフトでは、この問題をこの資料の対象製品として記載されているマイクロソフト製品の問題として認識しています。
参考資料
Microsoft がソフトウェア 更新 プログラムの説明に使用する用語について説明します。
SQL Serverのスピンロック競合の診断と解決に関するホワイト ペーパーでは、スピンロック競合に関連する問題と解決策について詳しく説明しています。