Microsoft SQL Server 2008 R2 Service Pack 1 (SP1) または Microsoft SQL Server 2012 の修正プログラムを1つのダウンロード可能なファイルで配布します。 修正プログラムは累積的であるため、新しいリリースごとに、以前の SQL Server 2008 R2 Service Pack 1 (SP1) または Microsoft SQL Server 2012 update release に含まれていたすべての修正プログラムとすべてのセキュリティ更新プログラムが含まれています。
現象
次のような状況で問題が発生します。
-
コンピューターに Microsoft SQL Server 2008 R2 または Microsoft SQL Server 2012 のインスタンスをインストールします。
-
インスタンスでは、次のような同時実行ステートメントが実行されます。
CREATE PROC p AS RETURN (
query
); EXEC p;
または、次のコードを含むクエリを実行します。
IF EXISTS(
subquery
);
-
CPU 使用量は一貫して高く、作業スレッドは実行可能な状態です。
-
QUERY_EXEC_STATSスピンロックの競合は高です。たとえば、スピンカウント、発生する可能性のあるコリジョン、 QUERY_EXEC_STATSスピンロックのバックオフ値が急速に増加します。注: QUERY_EXEC_STATSスピンスピンを監視する方法の詳細については、「詳細情報」セクションを参照してください。
このシナリオでは、パフォーマンスが低下することがあります。
原因
この問題は、SQL Server 2008 R2 または SQL Server 2012 では、グローバル統計情報をキャッシュするのではなく、メモリ構造の一部を作成して破棄するためです。 これにより、パフォーマンスがボトルネックになります。
解決方法
累積的な更新プログラムの情報
SQL Server 2012
この問題の修正プログラムは、SQL Server 2012 の累積的な更新プログラム1で最初にリリースされました。この累積的な更新プログラムパッケージの詳細については、次の記事番号をクリックして、Microsoft サポート技術情報の記事を参照してください。
2679368 SQL Server 2012 の累積的な更新プログラムパッケージ1注: ビルドは累積的であるため、それぞれの新しい修正プログラムには、以前の SQL Server 2012 fix release に含まれていたすべての修正プログラムとセキュリティ修正プログラムが含まれています。 この修正プログラムを含む最新の修正プログラムを適用することを検討することをお勧めします。 詳細については、次のマイクロソフト サポート技術情報番号をクリックしてください。
2692828 SQL Server 2012 がリリースされた後にリリースされた SQL Server 2012 ビルド Sql server 2012 のインストールには、SQL Server 2012 修正プログラムを適用する必要があります。
SQL Server 2008 R2 SP1 の累積的な更新プログラムパッケージ5
この問題の修正プログラムは、累積的な更新プログラム5で最初にリリースされました。SQL Server 2008 R2 SP1 用の累積更新プログラムパッケージの入手方法の詳細については、次の記事番号をクリックして、Microsoft サポート技術情報の記事を参照してください。
2659694 SQL Server 2008 R2 SP1 の累積的な更新プログラムパッケージ5注: ビルドは累積的であるため、それぞれの新しい修正プログラムには、以前の SQL Server 2008 R2 SP1 修正プログラムに含まれていたすべての修正プログラムとセキュリティ修正プログラムが含まれています。 この修正プログラムを含む最新の修正プログラムを適用することを検討することをお勧めします。 詳細については、次のマイクロソフト サポート技術情報番号をクリックしてください。
2567616 SQL Server 2008 R2 SP1 がリリースされた後にリリースされた SQL Server 2008 R2 ビルド
詳細情報
QUERY_EXEC_STATSスピンロックを監視するには、次のコードに示すように、環境に合わせて遅延と反復回数を調整し、実行します。
SET NOCOUNT ONCREATE TABLE #spins([Spinlock Name] varchar(50),Collisions numeric,Spins numeric,[Spins/Collision] float,[Sleep Time (ms)] numeric,Backoffs numeric, InsertTime datetime DEFAULT GETDATE())DECLARE @counter int = 1WHILE @counter < 10 BEGIN INSERT INTO #spins ([Spinlock Name], Collisions, Spins, [Spins/Collision], [Sleep Time (ms)], Backoffs) EXECUTE ('DBCC SQLPERF (''SPINLOCKSTATS'') WITH NO_INFOMSGS') WAITFOR DELAY '00:00:05' SET @counter +=1 ENDSELECT * FROM #spins WHERE [Spinlock Name] = 'QUERY_EXEC_STATS' ORDER BY InsertTimeDROP TABLE #spins
状態
マイクロソフトでは、この問題をこの資料の対象製品として記載されているマイクロソフト製品の問題として認識しています。