KB4316948 - FIX: クエリをコンパイルするときにアクセス違反が発生し、ヒストグラムの修正が、SQL Server 2016 年と 2017 年の既定のカーディナリティ推定で有効になります

適用先
SQL Server 2017 Developer SQL Server 2017 Enterprise SQL Server 2017 Enterprise Core SQL Server 2016 Developer - duplicate (do not use) SQL Server 2016 Enterprise - duplicate (do not use) SQL Server 2016 Enterprise Core - duplicate (do not use) SQL Server 2016 Standard - duplicate (do not use)

現象

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

  • ヒストグラムの修正が有効になっている間、既定の カーディナリティ推定 を使用してクエリを実行しようとします。
  • クエリには、いずれかの述語で使用される列の式が含まれます。

このシナリオでは、アクセス違反が発生します。 さらに、以下のエラー メッセージが表示されます。

メッセージ 596、レベル 21、状態 1、 Line LineNumber
セッションが強制終了状態であるため、実行を続行できません。
メッセージ 0、レベル 20、状態 0、Line LineNumber
現在のコマンドで重大なエラーが発生しました。  結果がある場合は破棄する必要があります。

         メモ ヒストグラム修正を有効にするには、 USE HINT('ENABLE_HIST_AMENDMENT_FOR_ASC_KEYS') クエリ オプションまたはトレース フラグ 4139 を使用します。

解決策

この問題は、SQL Serverの次の更新プログラムで修正されています。

SQL Server 2017 の累積的な更新プログラム 8

SQL Server 2016 Service Pack 2 の累積的な更新プログラム 5

ビルドSQL Serverについて

SQL Serverの各新しいビルドには、前のビルドにあったすべての修正プログラムとセキュリティ修正プログラムが含まれています。 ご使用のバージョンの SQL Server 用の最新ビルドをインストールすることをお勧めします。

SQL Server 2017 の最新ビルド

SQL Server 2016 の最新の累積的な更新プログラム

状態

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

参考資料

DBCC TRACEON - トレース フラグ (Transact-SQL)

Microsoft がソフトウェア更新プログラムの説明に使用する標準的な 用語 について説明します。