[FIX] SQL Server 2016 で多数の DISTINCT 演算子を含むクエリのコンパイル時間が長い

適用対象: SQL Server 2016 DeveloperSQL Server 2016 EnterpriseSQL Server 2016 Enterprise Core

現象


基数推定機能 (CE) として知られている基数推定ロジックは、クエリ プランの品質を向上させるために、SQL Server 2014 (互換性レベル 120) と SQL Server 2016 (互換性レベル 130) で再設計されました。

ただし、DISTINCT 演算子または GROUP BY 演算子を使用した多くの結合を含む複雑なクエリをコンパイルすると、コンパイルには予想以上に時間がかかる場合があります。

解決方法


この問題を修正するこの更新プログラムは、SQL Server 2016 の Service Pack 1 に含まれています。

注: この更新プログラムのインストール後に、修正プログラムが有効になるようにトレース フラグ 4199 を設定する必要があります。トレース フラグ 4199 を設定するには、MSDN のトレース フラグ (Transact-SQL) を参照してください。

回避策


この問題を回避するには、次のいずれかの方法を使用します。
  • トレース フラグ 9481 を使用して、クエリ オプティマイザーの基数推定モデルを SQL Server 2012 以前のバージョンに設定します。
  • データベースの互換性レベルを SQL Server 2012 (110) 以前のバージョンに変更します。

状況


マイクロソフトでは、この問題をこの資料の対象製品として記載されているマイクロソフト製品の問題として認識しています。

関連情報


マイクロソフトでソフトウェア更新プログラムの説明に使用する用語集 を参照してください。