現象
Microsoft SQL Server 2012 Service Pack 2 (SP2) がコンピューターに適用されていることを前提としています。 Sp_executesqlストアドプロシージャでcdc.fn_cdc_get_net_changes_<Capture_instance> Change Data capture (cdc) クエリを呼び出します。これは、SQL server Management STUDIO Server (SSMS)、Cdc 自体、sql server Integration Services (SSIS) パッケージなどのアプリケーションソースから入手できます。 この状況では、SQL Server 2012 のパフォーマンスが低下します。注:パフォーマンスが低下する可能性があります。 たとえば、SQL Server 2012 SP1 では数秒後にクエリを終了することができます。 ただし、SQL Server 2012 SP2 では、同じクエリを実行するには数時間かかることがあります。 さらに、統計情報の更新によっても問題が解決されません。
原因
この問題は、 cdc.fn_cdc_get_net_changes_<capture_instance>クエリのパフォーマンスに重大な影響を与える基数の見積に関する問題が原因で発生します。
解決方法
この問題は、SQL Server の次の累積的な更新プログラムで最初に修正されました。
SQL Server 2012 SP2 の累積更新プログラム3 /en-us/help/3002049
SQL Server 用の新しい累積更新プログラムには、以前の累積的な更新プログラムに含まれていたすべての修正プログラムとすべてのセキュリティ修正が含まれています。 SQL Server の最新の累積的な更新プログラムを確認します。
回避策
この問題を回避するには、クエリで オプション (Recompile) クエリヒントを使用します。 SSIS CDC コンポーネントからクエリがトリガーされた場合は、次の例のように、plan guide を作成することによって オプション (Recompile) のヒントが強制されることがあります。Exec sp_create_plan_guide @name = N'CDC_Query1_PlanGuide', @stmt = N'select [__$start_lsn],[__$operation],[__$update_mask],[Column1],[Column2],[Column3] from [cdc].[fn_cdc_get_net_changes_dbo_Table1](CONVERT(binary(10), @cs, 1), CONVERT(binary(10), @ce, 1), @mode)',@type = N'SQL',@module_or_batch = NULL, @params = N'@ce nvarchar(22),@mode nvarchar(14),@cs nvarchar(22)', @hints = N'OPTION (RECOMPILE)'; 注:この例のクエリを、直面しているクエリに置き換える必要があります。 これは プロファイラー トレースから利用できるため、余分な文字が誤って追加されることはありません。 さらに、プランガイドが正常に動作するように、選択 クエリが1行に配置されていることを確認します (たとえば、キャリッジリターンや改行がないようにしてください)。 また、 DBCC FREE・キャッシュ を使用して、キャッシュから古いプランを抜き合わせすることが必要になる場合もあります。
状態
マイクロソフトでは、この問題をこの資料の対象製品として記載されているマイクロソフト製品の問題として認識しています。