現象
たとえば次のようなシナリオを考えてみます。
Microsoft SQL Server に一時テーブルを作成するストアド プロシージャがあります。
ストアド プロシージャが発行するクエリを実行し、クエリは次の条件を満たしています。
- クエリは、ストアド プロシージャによって作成された一時テーブルを参照します。
- クエリには、インデックスでカバーされない WHERE 句があり、インデックスがない機能が有効になっています。
ストアド プロシージャが複数のインスタンスから同時に呼び出されることを想定します。 その後、一時テーブルが頻繁に作成および削除されるため、不足しているインデックスに対応するレコードが頻繁に作成および削除されます。
この状況で、ストアド プロシージャの保留中のクエリが取り消されると、アクセス違反エラーが発生する可能性があります。
解決策
この問題は、次の SQL Server の累積的な更新プログラムで修正されています。
SQL Server 2017 の累積的な更新プログラム 2
SQL Server 2016 RTM の累積的な更新プログラム 9
SQL Server 2016 SP1 の累積的な更新プログラム 6
SQL Server 2014 SP2 の累積的な更新プログラム 8
SQL Server の累積的な更新プログラムについて:
SQL Server 用の新しい累積的な更新プログラムには、以前の累積的な更新プログラムに含まれていたすべての修正プログラムとすべてのセキュリティ修正プログラムが含まれています。 SQL Server の最新の累積的な更新プログラムを確認してください。
SQL Server 2017 の最新の累積的な更新プログラム
SQL Server 2016 の最新の累積的な更新プログラム
SQL Server 2014 の最新の累積的な更新プログラム
回避策
この問題の回避策は、不足しているインデックスの収集を抑制するトレース フラグ (TF) 2392 を有効にすることです。
追加情報
インデックスが見つからない機能の詳細については、次のリンクを参照してください。
状態
Microsoft は、これが "適用対象" セクションに記載されている Microsoft 製品の問題であることを確認しました。
参考資料
マイクロソフトでソフトウェア更新プログラムの説明に使用する用語集を参照してください。