KB3195888 - 修正: CPU 使用率が高いと、SQL Server 2016 および 2017 でパフォーマンスの問題が発生する

適用先
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 用の次の累積的な更新プログラムで修正されました。

注釈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 でのスピンロック競合の診断と解決に関するホワイト ペーパーでは、スピンロック競合に関連する問題と解決策について詳しく説明しています。