現象
Microsoft SQL Server 2012 または SQL Server 2014 データベースには、多くの統計情報とテーブルがあり、テーブルには多くの列が含まれていることを前提としています。 多くのアドホッククエリを実行してそれらのテーブルからデータを同時に取得すると、実行中に CMEMTHREAD 待機が発生する可能性があります。
解決方法
累積的な更新情報
この問題は、SQL Server の次の累積的な更新プログラムで最初に修正されました。
SQL Server 用の新しい累積更新プログラムには、以前の累積的な更新プログラムに含まれていたすべての修正プログラムとすべてのセキュリティ修正が含まれています。 SQL Server の最新の累積的な更新プログラムをダウンロードしてインストールすることをお勧めします。
詳細情報
SQL Server 2012 でクエリをコンパイルまたは再コンパイルするときに、エンジンは統計ヒストグラムから入力を取得する必要があります。 システムテーブルスキャンを実行してから、メモリまたはキャッシュに含まれるテーブルの特定のヒストグラムを読み込む必要があります。 これらのシステムテーブルエントリ (統計情報) は、システムテーブルキャッシュ (CACHESTORE_SYSTEMROWSET) に格納されます。 キャッシュ内のこれらのエントリを作成するために使用されるメモリオブジェクトは区分されておらず、グローバルです。 そのため、この操作で同時にメモリ割り当てを実行する場合は、このメモリオブジェクトで CMEMTHREAD の待機が発生します。 これは通常、コンパイルまたは再コンパイルが必要な多数のクエリを送信するときに発生します。 この修正プログラムでは、システムテーブルキャッシュを使用する同時メモリ割り当てによって競合が発生せず、 CMEMTHREAD が待機するように、グローバルメモリオブジェクトが分割されるように変更しています。同様の問題の詳細については、「 KB 3026082: FIX: システムテーブルの行セットキャッシュでのスピン SOS_CACHESTORE の競合により、SQL Server 2012 または2014で CPU 使用率が高くなる」を参照してください。
状態
マイクロソフトでは、この問題をこの資料の対象製品として記載されているマイクロソフト製品の問題として認識しています。