インテリジェント クエリ処理 (QP) 機能群には、最小限の労力で実装できる、既存のワークロードのパフォーマンスを広範に改善する機能が含まれています。 次の図は、IQP 機能のファミリと、SQL Serverに初めて導入された時期について詳しく説明しています。 すべての IQP 機能は、Azure SQL Managed InstanceおよびAzure SQL Databaseで使用できます。 一部の機能は、データベースの互換性レベルに依存します。
インテリジェント クエリ処理の概要については、このビデオをご覧ください。
インテリジェント クエリ処理 (IQP) 機能のデモとサンプル コードについては、GitHub サンプル リポジトリを参照してください。
データベースに対して適用可能なデータベース互換性レベルを有効にすることにより、自動的にワークロードをインテリジェント クエリ処理の対象にすることができます。 これは、Transact-SQLを使用して設定できます。 例えば次が挙げられます。
ALTER DATABASE [WideWorldImportersDW]
SET COMPATIBILITY_LEVEL = 170;
以下の表で、すべてのインテリジェント クエリ処理について詳しく説明します。これには、データベース互換性レベルに関する要件も含まれます。 リリース ノートや詳細な説明など、すべての IQP 機能の詳細については、 インテリジェント クエリ処理機能の詳細を参照してください。
Azure SQL Database および SQL Server 2025 の IQP 機能
| IQP 機能 | Azure SQL Databaseでサポートされます | SQL Server 2025 (17.x) でサポートされます | Description |
|---|---|---|---|
| 省略可能なパラメーター プランの最適化 (OPPO) | はい(データベース互換性レベル 170 以降) | はい。データベース互換性レベル 170 の SQL Server 2025 (17.x) 以降 | パラメーターの機密性の高いプランの最適化 (PSPO) の機能強化で導入されたアダプティブ プラン最適化 (マルチプラン) インフラストラクチャを活用します。これは、1 つのステートメントから複数のプランを生成します。 この機能では、パラメーターが NULL OR NOT NULLかどうかに基づいて実行時により最適なプランを選択できます。これにより、このようなクエリ パターンのパフォーマンスが既定で最適でないクエリのパフォーマンスが向上します。 |
| 式のカーディナリティ推定 (CE) フィードバック | はい(データベース互換性レベル 170 以降) | はい。データベース互換性レベル 160 の SQL Server 2025 (17.x) 以降 | CE フィードバックを拡張して、以前の実行から学習し、それらの式の将来の実行に適切な CE モデルの選択を自動的に適用することで、クエリ間で式を繰り返すカーディナリティ推定を向上させます。 |
| OPTIMIZED_SP_EXECUTESQL | Yes | はい。SQL Server 2025 (17.x) 以降 | コンパイル ストームの影響を効果的に軽減します。 コンパイル ストームは、多数のクエリが同時にコンパイルされ、パフォーマンスの問題やリソースの競合が発生する状況です。 この機能を有効にすると、 sp_executesql の呼び出しが、コンパイルの観点からストアド プロシージャやトリガーなどのオブジェクトのように動作できるようになります。 |
Azure SQL Database および SQL Server 2022 の IQP 機能
| IQP 機能 | Azure SQL Databaseでサポートされます | SQL Server 2022 (16.x) 以降のバージョンでサポートされています | Description |
|---|---|---|---|
| 適応型結合 (Batch モード) | はい: データベース互換性レベル 140 以上 | はい。データベース互換性レベル 140 の SQL Server 2017 (14.x) 以降 | 適応型結合では、実際の入力行に基づき、実行時に結合の種類が動的に選択されます。 |
| 個別値の概数 | Yes | はい。2019 SQL Server 以降 (15.x) | ビッグ データ シナリオのおおよその COUNT DISTINCT を提供し、高パフォーマンスと低メモリ フットプリントの利点を提供します。 |
| 近似百分位数 | はい: データベース互換性レベル 110 以上 | はい。互換性レベル 110 の SQL Server 2022 (16.x) 以降 | 近似パーセンタイル集計関数を使って迅速に意思決定できるよう、許容されるランク ベースのエラー境界で大規模なデータセットのパーセンタイルをすばやく計算します。 |
| 行ストアでの Batch モード | はい: データベース互換性レベル 150 以上 | はい。互換性レベル 150 の SQL Server 2019 (15.x) 以降 | 列ストア インデックスを必要としない、CPU にバインドされたリレーショナル DW ワークロードに対して Batch モードを指定します。 |
| カーディナリティ推定 (CE) フィードバック | はい: データベース互換性レベル 160 以上 | はい、SQL Server 2022 (16.x) から、互換性レベル 160 で | 非効率な CE の前提によりクエリのパフォーマンスが低下しているワークロードに対して、繰り返し実行されるクエリの推定カーディナリティを自動的に調整して最適化を図ります。 CE フィードバックでは、クエリ実行プランの品質を向上させるために、特定のクエリとデータ分散に適合するモデルの前提条件が特定され、使用されます。 |
| 並列処理の次数 (DOP) フィードバック | はい: データベース互換性レベル 160 以上 | はい: データベース互換性レベル 160 以上 | 非効率な並列処理によりパフォーマンスに問題が生じるワークロードに対して、繰り返し実行されるクエリの並列処理の次数を自動的に調整して最適化を図ります。 クエリ ストアを有効にする必要があります。 |
| インターリーブ実行 | はい: データベース互換性レベル 140 以上 | はい。データベース互換性レベル 140 の SQL Server 2017 (14.x) 以降 | 固定推定値ではなく、最初のコンパイルで発生した複数ステートメントのテーブル値関数の実際のカーディナリティを使用します。 |
| メモリ許可フィードバック (Batch モード) | はい: データベース互換性レベル 140 以上 | はい。データベース互換性レベル 140 の SQL Server 2017 (14.x) 以降 | Batch モード クエリにディスクへのスピルがある場合は、連続実行のためにさらにメモリを追加します。 クエリで割り当てられたメモリの 50% 超 (> 50%) が浪費された場合は、次回以降の実行でメモリ許可サイズを減らします。 |
| メモリ許可フィードバック (行モード) | はい: データベース互換性レベル 150 以上 | はい、SQL Server 2019 (15.x) 以降、データベース互換性レベル 150 に対応しています。 | 行モード クエリにディスクへのスピルがある場合は、連続実行のためにさらにメモリを追加します。 クエリで割り当てられたメモリの 50% 超 (> 50%) が浪費された場合は、次回以降の実行でメモリ許可サイズを減らします。 |
| メモリ許可フィード (バック パーセンタイル) | はい: すべてのデータベースで有効化済み | はい、SQL Server 2022 (16.x) 以降では、データベース互換性レベル140と共に開始します。 | 過去のクエリ実行に基づいてフィードバックの精度を高めることで、システムに干渉することなくメモリ許可フィードバックの既存の制限に取り組みます。 |
| メモリ許可フィードバックの永続化 | はい: すべてのデータベースで有効化済み | SQL Server 2022 (16.x) 以降、データベース互換性レベル 140 で開始します。 | メモリ許可フィードバックを永続化する新機能を提供します。 データベースと READ_WRITE モードでクエリ ストアを有効にする必要があります。 |
| CE フィードバックの永続化 | はい: データベース互換性レベル 160 以上 | はい。データベース互換性レベル 160 の SQL Server 2022 (16.x) 以降 | データベースと READ_WRITE モードでクエリ ストアを有効にする必要があります。 |
| クエリ ストア を使用して計画の最適化を強制 | Yes | はい。SQL Server 2022 (16.x) 以降)。 | 繰り返し強制されるクエリに対して、コンパイルのオーバーヘッドを削減します。 詳細については、「クエリ ストアを使用した最適化プランの強制」を参照してください。 |
| スカラー UDF のインライン化 | はい: データベース互換性レベル 150 以上 | はい、SQL Server 2019 (15.x) およびデータベース互換性レベル 150 から開始します。 | スカラー UDF は同等のリレーショナル式に変換され、この式は呼び出し側クエリに "インライン化" されます。これにより、多くの場合、パフォーマンスが大幅に向上します。 |
| パラメーター依存プランの最適化 | はい: データベース互換性レベル 160 以上 | はい。データベース互換性レベル 160 の SQL Server 2022 (16.x) 以降 | パラメーターの機密性の高いプランの最適化は、パラメーター化されたクエリの 1 つのキャッシュされたプランが、一様でないデータ分散など、すべての可能な受信パラメーター値に対して最適ではないシナリオに対処します。 |
| テーブル変数の遅延コンパイル | はい: データベース互換性レベル 150 以上 | はい、SQL Server 2019 (15.x) 以降で、データベース互換性レベル 150 で開始されます。 | 固定推定値ではなく、最初のコンパイルで発生したテーブル変数の実際のカーディナリティを使用します。 |
Azure SQL Managed Instanceの IQP 機能
| IQP 機能 | Azure SQL Managed Instanceでサポートされています | Description |
|---|---|---|
| 適応型結合 (Batch モード) | はい: データベース互換性レベル 140 以上 | 適応型結合では、実際の入力行に基づき、実行時に結合の種類が動的に選択されます。 |
| 個別値の概数 | Yes | ビッグ データ シナリオのおおよその COUNT DISTINCT を提供し、高パフォーマンスと低メモリ フットプリントの利点を提供します。 |
| 近似百分位数 | はい: データベース互換性レベル 110 以上 | 近似パーセンタイル集計関数を使って迅速に意思決定できるよう、許容されるランク ベースのエラー境界で大規模なデータセットのパーセンタイルをすばやく計算します。 |
| 行ストアでの Batch モード | はい: データベース互換性レベル 150 以上 | 列ストア インデックスを必要としない、CPU にバインドされたリレーショナル DW ワークロードに対して Batch モードを指定します。 |
| カーディナリティ推定 (CE) フィードバック | はい: データベース互換性レベル 160 以上 | 非効率な CE の前提によりクエリのパフォーマンスが低下しているワークロードに対して、繰り返し実行されるクエリの推定カーディナリティを自動的に調整して最適化を図ります。 CE フィードバックでは、クエリ実行プランの品質を向上させるために、特定のクエリとデータ分散に適合するモデルの前提条件が特定され、使用されます。 |
| 式のカーディナリティ推定 (CE) フィードバック | はい。Azure SQL Managed Instance のデータベース互換性レベル 160 以降では、SQL Server 2025 または 常に最新の更新ポリシーが適用されます。 いいえ。SQL Server 2022 更新ポリシー。 | CE フィードバックを拡張して、以前の実行から学習し、それらの式の将来の実行に適切な CE モデルの選択を自動的に適用することで、クエリ間で式を繰り返すカーディナリティ推定を向上させます。 |
| 並列処理の次数 (DOP) フィードバック | Azure SQL Managed Instance でデータベース互換性レベル 160 以降は、SQL Server 2025 または Always-up-to-date更新ポリシーから開始します。 いいえ。SQL Server 2022 更新ポリシー。 | 非効率な並列処理によりパフォーマンスに問題が生じるワークロードに対して、繰り返し実行されるクエリの並列処理の次数を自動的に調整して最適化を図ります。 クエリ ストアを有効にする必要があります。 |
| インターリーブ実行 | はい: データベース互換性レベル 140 以上 | 固定推定値ではなく、最初のコンパイルで発生した複数ステートメントのテーブル値関数の実際のカーディナリティを使用します。 |
| メモリ許可フィードバック (Batch モード) | はい: データベース互換性レベル 140 以上 | Batch モード クエリにディスクへのスピルがある場合は、連続実行のためにさらにメモリを追加します。 クエリで割り当てられたメモリの 50% 超 (> 50%) が浪費された場合は、次回以降の実行でメモリ許可サイズを減らします。 |
| メモリ許可フィードバック (行モード) | はい: データベース互換性レベル 150 以上 | 行モード クエリにディスクへのスピルがある場合は、連続実行のためにさらにメモリを追加します。 クエリで割り当てられたメモリの 50% 超 (> 50%) が浪費された場合は、次回以降の実行でメモリ許可サイズを減らします。 |
| メモリ許可フィード (バック パーセンタイル) | はい: データベース互換性レベル 160 以上 | 過去のクエリ実行に基づいてフィードバックの精度を高めることで、システムに干渉することなくメモリ許可フィードバックの既存の制限に取り組みます。 |
| メモリ許可、CE、および DOP フィードバックの永続化 | はい: データベース互換性レベル 160 以上 | メモリ許可フィードバックを永続化する新機能を提供します。 CE および DOP フィードバックは常に永続化されます。 データベースと READ_WRITE モードでクエリ ストアを有効にする必要があります。 |
| 省略可能なパラメーター プランの最適化 (OPPO) | はい、Azure SQL Managed Instanceで、データベース互換性レベル 170 以降、SQL Server 2025 または 常に最新の更新ポリシー から始まります。 いいえ。SQL Server 2022 更新ポリシー。 | パラメーターの機密性の高いプランの最適化 (PSPO) の機能強化で導入されたアダプティブ プラン最適化 (マルチプラン) インフラストラクチャを活用します。これは、1 つのステートメントから複数のプランを生成します。 この機能では、パラメーターが NULL OR NOT NULLかどうかに基づいて実行時により最適なプランを選択できます。これにより、このようなクエリ パターンのパフォーマンスが既定で最適でないクエリのパフォーマンスが向上します。 |
| クエリ ストア を使用したプランの最適化強制 | いいえ | 繰り返し強制されるクエリに対して、コンパイルのオーバーヘッドを削減します。 詳細については、「クエリ ストアを使用した最適化プランの強制」を参照してください。 |
| パラメーター依存プランの最適化 | はい: データベース互換性レベル 160 以上 | パラメーター感度最適化は、パラメーター化されたクエリに対して、単一のキャッシュプランがすべての可能な受信パラメーター値に対して最適でない場合のシナリオ、例えば一様でないデータ分布に対処します。 |
| スカラー UDF のインライン化 | はい: データベース互換性レベル 150 以上 | スカラー UDF は同等のリレーショナル式に変換され、この式は呼び出し側クエリに "インライン化" されます。これにより、多くの場合、パフォーマンスが大幅に向上します。 |
| テーブル変数の遅延コンパイル | はい: データベース互換性レベル 150 以上 | 固定推定値ではなく、最初のコンパイルで発生したテーブル変数の実際のカーディナリティを使用します。 |
SQL Server 2019 の IQP 機能
| IQP 機能 | SQL Server 2019 (15.x) でサポートされます | Description |
|---|---|---|
| 適応型結合 (Batch モード) | はい。データベース互換性レベル 140 の SQL Server 2017 (14.x) 以降 | 適応型結合では、実際の入力行に基づき、実行時に結合の種類が動的に選択されます。 |
| 個別値の概数 | Yes | ビッグ データ シナリオのおおよその COUNT DISTINCT を提供し、高パフォーマンスと低メモリ フットプリントの利点を提供します。 |
| 行ストアでの Batch モード | はい: データベース互換性レベル 150 以上 | 列ストア インデックスを必要としない、CPU にバインドされたリレーショナル DW ワークロードに対して Batch モードを指定します。 |
| インターリーブ実行 | はい: データベース互換性レベル 140 以上 | 固定推定値ではなく、最初のコンパイルで発生した複数ステートメントのテーブル値関数の実際のカーディナリティを使用します。 |
| メモリ許可フィードバック (Batch モード) | はい: データベース互換性レベル 140 以上 | Batch モード クエリにディスクへのスピルがある場合は、連続実行のためにさらにメモリを追加します。 クエリで割り当てられたメモリの 50% 超 (> 50%) が浪費された場合は、次回以降の実行でメモリ許可サイズを減らします。 |
| メモリ許可フィードバック (行モード) | はい: データベース互換性レベル 150 以上 | 行モード クエリにディスクへのスピルがある場合は、連続実行のためにさらにメモリを追加します。 クエリで割り当てられたメモリの 50% 超 (> 50%) が浪費された場合は、次回以降の実行でメモリ許可サイズを減らします。 |
| スカラー UDF のインライン化 | はい: データベース互換性レベル 150 以上 | スカラー UDF は同等のリレーショナル式に変換され、この式は呼び出し側クエリに "インライン化" されます。これにより、多くの場合、パフォーマンスが大幅に向上します。 |
| テーブル変数の遅延コンパイル | はい: データベース互換性レベル 150 以上 | 固定推定値ではなく、最初のコンパイルで発生したテーブル変数の実際のカーディナリティを使用します。 |
SQL Server 2017 の IQP 機能
| IQP 機能 | SQL Server 2017 (14.x) でサポートされます | Description |
|---|---|---|
| 適応型結合 (Batch モード) | はい。データベース互換性レベル 140 の SQL Server 2017 (14.x) 以降 | 適応型結合では、実際の入力行に基づき、実行時に結合の種類が動的に選択されます。 |
| 個別値の概数 | Yes | ビッグ データ シナリオのおおよその COUNT DISTINCT を提供し、高パフォーマンスと低メモリ フットプリントの利点を提供します。 |
| インターリーブ実行 | はい: データベース互換性レベル 140 以上 | 固定推定値ではなく、最初のコンパイルで発生した複数ステートメントのテーブル値関数の実際のカーディナリティを使用します。 |
| メモリ許可フィードバック (Batch モード) | はい: データベース互換性レベル 140 以上 | Batch モード クエリにディスクへのスピルがある場合は、連続実行のためにさらにメモリを追加します。 クエリで割り当てられたメモリの 50% 超 (> 50%) が浪費された場合は、次回以降の実行でメモリ許可サイズを減らします。 |
クエリ ストア要件
ユーザーデータベースに利益をもたらすためには、インテリジェントクエリ処理機能のいくつかでクエリ ストアを有効にする必要があります。 クエリ ストアを有効にするには、「
| IQP 機能 | クエリ ストアを有効にし、READ_WRITEする必要があります |
|---|---|
| 適応型結合 (Batch モード) | No |
| 個別値の概数 | No |
| 近似百分位数 | No |
| 行ストアでの Batch モード | No |
| カーディナリティ推定 (CE) フィードバック | Yes |
| 並列処理の次数 (DOP) フィードバック | Yes |
| インターリーブ実行 | No |
| メモリ許可フィードバック (Batch モード) | No |
| メモリ許可フィードバック (行モード) | No |
| メモリ許可フィードバック (パーセンタイルと永続化モード) | Yes |
| クエリ ストア を使用して計画の最適化を強制 | Yes |
| スカラー UDF のインライン化 | No |
| パラメーター依存プランの最適化 | いいえ (ただし推奨) |
| テーブル変数の遅延コンパイル | No |
関連コンテンツ
- インテリジェントなクエリ処理機能の詳細
- Joins (SQL Server)
- 実行モード
- クエリ処理アーキテクチャ ガイド
- 論理操作と物理操作のリファレンス
- SQL Server 2017 の新機能
SQL Server 2019 SQL Server 2022 の新機能は何か - メモリ許可フィードバック
- インテリジェントなクエリ処理のデモンストレーション
- 定数のたたみ込みと式の評価
- GitHubでのインテリジェントクエリ処理デモ
- SQL Server データベース エンジンおよびAzure SQL Databaseのパフォーマンス センター
- モニターのパフォーマンスを クエリ ストア を使用して監視する
クエリ ストア