SQL データベースでのインテリジェントなクエリ処理

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

インテリジェントなクエリ処理 (QP) 機能ファミリには、最小限の労力で実装できる、既存のワークロードのパフォーマンスを広範に改善する機能が含まれています。 次の図では、IQP 機能のファミリと、それらが SQL Server に初めて導入された時期について詳しく説明します。 Azure SQL Managed Instance とAzure SQL DatabaseのIQP機能は利用可能です。 一部の機能は、データベースの互換性レベルによって異なります。

インテリジェントなクエリ処理ファミリの機能と、それらが SQL Server に最初に導入された時期を示すダイアグラム。

インテリジェントなクエリ処理の概要については、このビデオをご覧ください。

GitHub のインテリジェント クエリ処理 (IQP) 機能のデモとサンプル コードについては、次を参照してください https://aka.ms/IQPDemos

データベースに対して適用可能なデータベース互換性レベルを有効にすることにより、自動的にワークロードをインテリジェントなクエリ処理の対象にすることができます。 これは Transact-SQL を使って設定できます。 次に例を示します。

ALTER DATABASE [WideWorldImportersDW] SET COMPATIBILITY_LEVEL = 160;

以下の表で、すべてのインテリジェントなクエリ処理について詳しく説明します。これには、データベース互換性レベルに関する要件も含まれます。 リリース ノートや詳細な説明など、すべての IQP 機能の詳細については、インテリジェント クエリ処理 (IQP) 機能の詳細を参照してください。

Azure SQL Database と SQL Server 2022 (16.x) の IQP 機能

IQP の機能 Azure SQL Database でのサポート SQL Server 2022 (16.x) でサポートされます 説明
適応型結合 (バッチ モード) はい、データベース互換レベルが 140 以上です はい、SQL Server 2017 (14.x) 以降、データベース互換レベル 140 以上です 適応型結合では、実際の入力行に基づき、実行時に結合の種類が動的に選択されます。
個別の概算数 はい はい、SQL Server 2019 (15.x) 以降です 高パフォーマンスと小さいメモリ占有領域の利点がある、ビッグ データシナリオに対して、おおよその COUNT DISTINCT を指定します。
近似パーセンタイル はい、データベース互換レベルが 110 以上です はい、SQL Server 2022 (16.x) 以降、互換レベル 110 以上です 近似パーセンタイル集計関数を使って迅速に意思決定できるよう、許容されるランク ベースのエラー境界で大規模なデータセットのパーセンタイルをすばやく計算します。
行ストアでのバッチ モード はい、データベース互換レベルが 150 以上です はい、SQL Server 2019 (15.x) 以降、互換性レベル 150 以上です 列ストア インデックスを必要としない、CPU にバインドされたリレーショナル DW ワークロードに対してバッチ モードを指定します。
カーディナリティ推定 (CE) のフィードバック なし はい、SQL Server 2022 (16.x) 以降、互換レベル 160 以上です クエリを繰り返すカーディナリティの見積もりを自動的にチューニングして、非効率的な CE の前提条件によってクエリ パフォーマンスが低下するワークロードを最適化します。 CE フィードバックでは、クエリ実行プランの品質を向上させるために、特定のクエリとデータ分散に適合するモデルの前提条件が特定され、使用されます。
並列処理の次数 (DOP) フィードバック なし はい、SQL Server 2022 (16.x) 以降、互換レベル 160 以上です 自動では、クエリを繰り返す並列処理の次数が自動的にチューニングされ、過剰な並列処理によってパフォーマンスの問題が発生するおそれがあるワークロードに合わせて最適化されます。 クエリ ストアを有効にしておく必要があります。
インターリーブ実行 はい、データベース互換レベルが 140 以上です はい、SQL Server 2017 (14.x) 以降、データベース互換レベル 140 以上です 固定推定値ではなく、最初のコンパイルで発生した複数ステートメントのテーブル値関数の実際のカーディナリティを使用します。
メモリ許可フィードバック (バッチ モード) はい、データベース互換レベルが 140 以上です はい、SQL Server 2017 (14.x) 以降、データベース互換レベル 140 以上です バッチ モード クエリにディスクへの書き込み操作がある場合は、連続実行のためにさらにメモリを追加します。 クエリで > 50% を超える、割り当てられたメモリが浪費される場合は、連続実行のためにメモリ許可サイズチューニングを減らします。
メモリ許可フィードバック (行モード) はい、データベース互換レベルが 150 以上です はい、SQL Server 2019 (15.x) 以降、データベース互換レベル 150 以上です 行モード クエリにディスクへの書き込み操作がある場合は、連続実行のためにさらにメモリを追加します。 クエリで > 50% を超える、割り当てられたメモリが浪費される場合は、連続実行のためにメモリ許可サイズチューニングを減らします。
メモリ許可フィードバック (パーセンタイル) はい、すべてのデータベースで有効です はい、SQL Server 2022 (16.x) 以降、データベース互換レベル 140 以上です 過去のクエリ実行を組み込んでフィードバックを絞り込むことで、メモリ許可フィードバックの既存の制限に取り組みます。
メモリ許可フィードバックの永続化 はい、すべてのデータベースで有効です はい、SQL Server 2022 (16.x) 以降、データベース互換レベル 140 以上です メモリ許可フィードバックを保持するための新しい機能を提供します。 データベースでクエリ ストアを有効にし、READ_WRITE モードにする必要があります。
CE フィードバックの永続化 なし はい、SQL Server 2022 (16.x) 以降、データベース互換レベル 160 以上です データベースでクエリ ストアを有効にし、READ_WRITE モードにする必要があります。
DOP フィードバックの永続化 なし はい、SQL Server 2022 (16.x) 以降、データベース互換レベル 160 以上です データベースでクエリ ストアを有効にし、READ_WRITE モードにする必要があります。
プラン強制の最適化 なし はい、SQL Server 2022 (16.x) 以降です。 強制クエリを繰り返すためのコンパイル オーバーヘッドが減ります。 詳しくは、「クエリ ストアでのプランの強制の最適化」をご覧ください。
スカラー UDF のインライン化 はい、データベース互換レベルが 150 以上です はい、SQL Server 2019 (15.x) 以降、データベース互換レベル 150 以上です スカラー UDF は同等のリレーショナル式に変換され、この式は呼び出し側クエリに "インライン化" されます。これにより、多くの場合、パフォーマンスが大幅に向上します。
パラメーター センシティビティ プラン最適化 なし はい、SQL Server 2022 (16.x) 以降、データベース互換レベル 160 以上です パラメーター センシティビティ プラン最適化では、パラメーター化クエリに対してプランが 1 つキャッシュされているだけでは、たとえばユニフォーム以外のデータの配布では、入ってくる可能性がある、あらゆるパラメーター値に最適ではないシナリオに対処します。
テーブル変数の遅延コンパイル はい、データベース互換レベルが 150 以上です はい、SQL Server 2019 (15.x) 以降、データベース互換レベル 150 以上です 固定推定値ではなく、最初のコンパイルで発生したテーブル変数の実際のカーディナリティを使用します。

Azure SQL Managed Instance の IQP 機能

IQP の機能 Azure SQL Managed Instance でサポートされる 説明
適応型結合 (バッチ モード) はい、データベース互換レベルが 140 以上です 適応型結合では、実際の入力行に基づき、実行時に結合の種類が動的に選択されます。
個別の概算数 はい 高パフォーマンスと小さいメモリ占有領域の利点がある、ビッグ データシナリオに対して、おおよその COUNT DISTINCT を指定します。
近似パーセンタイル はい、データベース互換レベルが 110 以上です 近似パーセンタイル集計関数を使って迅速に意思決定できるよう、許容されるランク ベースのエラー境界で大規模なデータセットのパーセンタイルをすばやく計算します。
行ストアでのバッチ モード はい、データベース互換レベルが 150 以上です 列ストア インデックスを必要としない、CPU にバインドされたリレーショナル DW ワークロードに対してバッチ モードを指定します。
カーディナリティ推定 (CE) のフィードバック なし クエリを繰り返すカーディナリティの見積もりを自動的にチューニングして、非効率的な CE の前提条件によってクエリ パフォーマンスが低下するワークロードを最適化します。 CE フィードバックでは、クエリ実行プランの品質を向上させるために、特定のクエリとデータ分散に適合するモデルの前提条件が特定され、使用されます。
並列処理の次数 (DOP) フィードバック なし 自動では、クエリを繰り返す並列処理の次数が自動的にチューニングされ、過剰な並列処理によってパフォーマンスの問題が発生するおそれがあるワークロードに合わせて最適化されます。 クエリ ストアを有効にしておく必要があります。
インターリーブ実行 はい、データベース互換レベルが 140 以上です 固定推定値ではなく、最初のコンパイルで発生した複数ステートメントのテーブル値関数の実際のカーディナリティを使用します。
メモリ許可フィードバック (バッチ モード) はい、データベース互換レベルが 140 以上です バッチ モード クエリにディスクへの書き込み操作がある場合は、連続実行のためにさらにメモリを追加します。 クエリで > 50% を超える、割り当てられたメモリが浪費される場合は、連続実行のためにメモリ許可サイズチューニングを減らします。
メモリ許可フィードバック (行モード) はい、データベース互換レベルが 150 以上です 行モード クエリにディスクへの書き込み操作がある場合は、連続実行のためにさらにメモリを追加します。 クエリで > 50% を超える、割り当てられたメモリが浪費される場合は、連続実行のためにメモリ許可サイズチューニングを減らします。
メモリ許可フィードバック (パーセンタイル) なし 過去のクエリ実行を組み込んでフィードバックを絞り込むことで、メモリ許可フィードバックの既存の制限に取り組みます。
メモリ許可、CE 、と DOPのフィードバックの永続化 はい、データベース互換レベルが 160 以上です メモリ許可フィードバックを保持するための新しい機能を提供します。 CE および DOP フィードバックは常に保持されます。 データベースでクエリ ストアを有効にし、READ_WRITE モードにする必要があります。
プラン強制の最適化 なし 強制クエリを繰り返すためのコンパイル オーバーヘッドが減ります。 詳しくは、「クエリ ストアでのプランの強制の最適化」をご覧ください。
スカラー UDF のインライン化 はい、データベース互換レベルが 150 以上です スカラー UDF は同等のリレーショナル式に変換され、この式は呼び出し側クエリに "インライン化" されます。これにより、多くの場合、パフォーマンスが大幅に向上します。
パラメーター センシティビティ プラン最適化 なし パラメーター センシティビティ プラン最適化では、パラメーター化クエリに対してプランが 1 つキャッシュされているだけでは、例えばユニフォーム以外のデータの配布では、入ってくる可能性がある、あらゆるパラメーター値に最適ではないシナリオに対処します。
テーブル変数の遅延コンパイル はい、データベース互換レベルが 150 以上です 固定推定値ではなく、最初のコンパイルで発生したテーブル変数の実際のカーディナリティを使用します。

SQL Server 2019 (15.x) の IQP 機能

IQP の機能 SQL Server 2019 (15.x)でサポートされています 説明
適応型結合 (バッチ モード) はい、SQL Server 2017 (14.x) 以降、データベース互換レベル 140 以上です 適応型結合では、実際の入力行に基づき、実行時に結合の種類が動的に選択されます。
個別の概算数 はい 高パフォーマンスと小さいメモリ占有領域の利点がある、ビッグ データシナリオに対して、おおよその COUNT DISTINCT を指定します。
行ストアでのバッチ モード はい、データベース互換レベルが 150 以上です 列ストア インデックスを必要としない、CPU にバインドされたリレーショナル DW ワークロードに対してバッチ モードを指定します。
インターリーブ実行 はい、データベース互換レベルが 140 以上です 固定推定値ではなく、最初のコンパイルで発生した複数ステートメントのテーブル値関数の実際のカーディナリティを使用します。
メモリ許可フィードバック (バッチ モード) はい、データベース互換レベルが 140 以上です バッチ モード クエリにディスクへの書き込み操作がある場合は、連続実行のためにさらにメモリを追加します。 クエリで > 50% を超える、割り当てられたメモリが浪費される場合は、連続実行のためにメモリ許可サイズチューニングを減らします。
メモリ許可フィードバック (行モード) はい、データベース互換レベルが 150 以上です 行モード クエリにディスクへの書き込み操作がある場合は、連続実行のためにさらにメモリを追加します。 クエリで > 50% を超える、割り当てられたメモリが浪費される場合は、連続実行のためにメモリ許可サイズチューニングを減らします。
スカラー UDF のインライン化 はい、データベース互換レベルが 150 以上です スカラー UDF は同等のリレーショナル式に変換され、この式は呼び出し側クエリに "インライン化" されます。これにより、多くの場合、パフォーマンスが大幅に向上します。
テーブル変数の遅延コンパイル はい、データベース互換レベルが 150 以上です 固定推定値ではなく、最初のコンパイルで発生したテーブル変数の実際のカーディナリティを使用します。

SQL Server 2017 (14.x) の IQP 機能

IQP の機能 SQL Server 2017 (14.x)でサポートされています 説明
適応型結合 (バッチ モード) はい、SQL Server 2017 (14.x) 以降、データベース互換レベル 140 以上です 適応型結合では、実際の入力行に基づき、実行時に結合の種類が動的に選択されます。
個別の概算数 はい 高パフォーマンスと小さいメモリ占有領域の利点がある、ビッグ データシナリオに対して、おおよその COUNT DISTINCT を指定します。
インターリーブ実行 はい、データベース互換レベルが 140 以上です 固定推定値ではなく、最初のコンパイルで発生した複数ステートメントのテーブル値関数の実際のカーディナリティを使用します。
メモリ許可フィードバック (バッチ モード) はい、データベース互換レベルが 140 以上です バッチ モード クエリにディスクへの書き込み操作がある場合は、連続実行のためにさらにメモリを追加します。 クエリで > 50% を超える、割り当てられたメモリが浪費される場合は、連続実行のためにメモリ許可サイズチューニングを減らします。

クエリ ストアの要件

インテリジェントなクエリ処理機能のスイートの一部では、ユーザー データベースのメリットを得るためにクエリ ストアを有効にする必要があります。 クエリ ストアを有効にする必要がある場合は、「クエリ ストアを有効にする」を参照してください。

IQP の機能 クエリ ストアを有効にし、READ_WRITE モードにする必要があります
適応型結合 (バッチ モード) いいえ
個別の概算数 いいえ
近似パーセンタイル いいえ
行ストアでのバッチ モード いいえ
カーディナリティ推定 (CE) のフィードバック はい
並列処理の次数 (DOP) フィードバック はい
インターリーブ実行 いいえ
メモリ許可フィードバック (バッチ モード) いいえ
メモリ許可フィードバック (行モード) いいえ
メモリ許可フィードバック(パーセンタイルと永続化モード) はい
プラン強制の最適化 はい
スカラー UDF のインライン化 いいえ
パラメーター センシティビティ プラン最適化 いいえ (ただし推奨)
テーブル変数の遅延コンパイル いいえ

リリース ノートや詳細な説明など、すべての IQP 機能の詳細については、インテリジェント クエリ処理 (IQP) 機能の詳細を参照してください。