KB3026083 - 修正: アドホック SQL Server プラン キャッシュでスピンロック競合がSOS_CACHESTORE発生すると、SQL Server での CPU 使用率が高くなる

適用先
SQL Server 2012 Developer SQL Server 2012 Enterprise SQL Server 2012 Standard SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2014 Web - duplicate (do not use) 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 Standard - duplicate (do not use) SQL Server 2017 Developer SQL Server 2017 Enterprise SQL Server 2017 Enterprise Core

現象

同じハッシュ バケット内で発生する同時挿入が多すぎる場合、またはアドホック SQL Server プラン キャッシュがエントリ制限の 160,036 に達すると、スピンロックで重大SOS_CACHESTORE競合が発生します。 この状況では、Microsoft SQL Server で高い CPU 使用率が発生します。

原因

この問題は、SQL Server プラン キャッシュがエントリ制限に達し、新しいプランを挿入するために低コストのプランを破棄する必要がある場合に発生します。 これにより、SQL Server プラン キャッシュのハッシュ テーブル バケットの同期を提供する SOS_CACHESTORE スピンロックに対して激しい競合が発生します。

解決策

累積的な更新プログラムの情報

この問題は、次の SQL Server の累積的な更新プログラムで最初に修正されました。

SQL Server 用の累積的な更新プログラムについて

SQL Server 用の新しい累積的な更新プログラムには、以前の累積的な更新プログラムに含まれていたすべての修正プログラムとすべてのセキュリティ修正プログラムが含まれています。 SQL Server の最新の累積的な更新プログラムを確認してください。

詳細情報

プラン キャッシュには 2 つの制限があります。合計サイズとすべてのプランの合計数です。 サイズとエントリ数の制限については、次のホワイト ペーパーで説明しています。

キャッシュ内部の計画

プラン キャッシュが保持できるエントリの最大数は、バケット数の 4 倍です。 この情報を確認するには、次のクエリを実行します。


select name, type, buckets_count 
from sys.dm_os_memory_cache_hash_tables
where name IN ( 'SQL Plans' , 'Object Plans' , 'Bound Trees' )
 
select name, type, pages_kb, entries_count 
from sys.dm_os_memory_cache_counters
where name IN ( 'SQL Plans' , 'Object Plans' ,  'Bound Trees' )

たとえば、64 ビット システムでは、SQL Server プラン キャッシュのバケット数は 40,009 です。 したがって、SQL Server プラン キャッシュ内に収まるエントリの最大数は 160,036 です。

さまざまなアドホック クエリを使用するワークロードがある場合、この制限がボトルネックになる可能性があります。 この修正プログラムによる変更は、この状況を解決します。 この修正プログラムをインストールし、スタートアップ トレース フラグ "-T 174" を使用して変更を有効にすると、64 ビット システムではバケット数が 160,001 に増加します。 プラン キャッシュは、最大 640,004 のプランを保持できます。

状態

Microsoft は、これが "適用対象" セクションに記載されている Microsoft 製品の問題であることを確認しました。