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