KB2649913 - 修正: SQL Server 2005 から SQL Server 2008、SQL Server 2008 R2、または SQL Server 2012 にアップグレードした後に、sp_cursoropen ストアド プロシージャを使用するクエリを実行すると、パフォーマンスが低下する場合がある

適用先
SQL Server 2008 R2 Datacenter SQL Server 2008 R2 Developer SQL Server 2008 R2 Enterprise SQL Server 2008 R2 Express SQL Server 2008 R2 Express with Advanced Services SQL Server 2008 R2 Standard SQL Server 2008 R2 Standard Edition for Small Business SQL Server 2008 R2 Workgroup SQL Server 2008 Developer SQL Server 2008 Enterprise SQL Server 2008 Express SQL Server 2008 Express with Advanced Services SQL Server 2012 Developer SQL Server 2012 Enterprise SQL Server 2012 Express SQL Server 2012 Standard

Microsoft では、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 更新プログラム リリースに含まれていたすべての修正プログラムおよびすべてのセキュリティ更新プログラムが含まれています。

現象

たとえば次のようなシナリオを考えてみます。

  • Microsoft SQL Server 2005 から Microsoft SQL Server 2008、Microsoft SQL Server 2008 R2、または Microsoft SQL Server 2012 にアップグレードします。
  • sp_cursoropen ストアド プロシージャを使用するクエリを実行し、rowcount パラメーターを指定してテーブルの最初の数行を取得します。

このシナリオでは、SQL Server 2005 で同じクエリを実行する場合よりもパフォーマンスが低下することがあります。

原因

この問題は、クエリ オプティマイザが動的なカーソル プランではなく、静的なカーソル プランを使用しているために発生します。 静的カーソル プランの場合、SQL Server はすべての行を取得し、カーソル作業テーブルに挿入します。 ただし、動的なカーソル プランの場合、SQL Server では必要な行のみがフェッチされます。

解決策

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

SQL Server 2012

この問題の修正プログラムは、SQL Server 2012 の累積的な更新プログラム 1 で最初にリリースされました。 この累積的な更新プログラム パッケージの関連情報を参照するには、以下の「サポート技術情報」 (Microsoft サポート技術情報) をクリックしてください。

2679368 SQL Server 2012 の累積的な更新プログラム パッケージ 1 注: ビルドは累積的であるため、新しくリリースされた修正プログラムには、以前の SQL Server 2012 リリースに含まれていたすべての修正プログラムおよびセキュリティ更新プログラムが含まれています。 マイクロソフトでは、この修正プログラムを含む最新の修正プログラム リリースを適用することを検討することをお勧めします。 詳細については、次のマイクロソフト サポート技術情報番号をクリックしてください。

2692828 SQL Server 2012 以降にリリースされた SQL Server 2012 ビルド インストールされている SQL Server 2012 には、SQL Server 2012 修正プログラムを適用する必要があります。

SQL Server 2008 R2 SP1 の累積的な更新プログラム パッケージ 5

この修正プログラムを適用した後、トレース フラグ 4199 を有効にします。

この問題の修正プログラムは、累積的な更新プログラム 5 で最初にリリースされました。 SQL Server 2008 R2 SP1 用のこの累積的な更新プログラム パッケージを入手する方法の詳細については、以下のサポート技術情報番号をクリックしてください。

2659694 SQL Server 2008 R2 SP1 の累積的な更新プログラム パッケージ 5 注: ビルドは累積的であるため、新しい修正プログラムの各リリースには、以前の SQL Server 2008 R2 SP1 更新プログラムのリリースに含まれていたすべての修正プログラムおよびセキュリティ更新プログラムが含まれています。 この修正プログラムが含まれている最新リリースの修正の適用を検討することを推奨します。 詳細については、次のマイクロソフト サポート技術情報番号をクリックしてください。

2567616 2008 R2 SP1 以降にリリースされた SQL Server 2008 R2 ビルドSQL Server

回避策

この問題を回避するには、クエリに FAST クエリ ヒントを追加します。

追加情報

クエリ ヒントの使用方法の詳細については、次の MSDN Web サイトを参照してください。

クエリ ヒントの使用方法に関する一般的な情報 トレース フラグ 4199 の詳細については、次の Web サイトを参照してください。

トレース フラグ 4199 に関する一般情報

状態

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