次の方法で共有


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

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceMicrosoft Fabric プレビューの SQL データベース

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

インテリジェント クエリ処理群と、それらが SQL Server に最初に導入された時期を示す図。

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

 

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

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

ALTER DATABASE [WideWorldImportersDW] SET COMPATIBILITY_LEVEL = 170;

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

Azure SQL Database と SQL Server 2025 Preview の IQP 機能

IQP Feature Azure SQL Database でのサポート SQL Server 2025 (17.x) プレビューでサポートされます Description
最適化されたハロウィンの保護 No はい。互換性レベル 170 の SQL Server 2025 (17.x) プレビュー以降 tempdb領域の消費を減らし、ハロウィーンの保護にスプールを使用しないことでクエリのパフォーマンスを向上させます。
省略可能なパラメーター プランの最適化 (OPPO) No はい。互換性レベル 170 の SQL Server 2025 (17.x) プレビュー以降 パラメーターの機密性の高いプランの最適化 (PSPO) の機能強化で導入されたアダプティブ プラン最適化 (マルチプラン) インフラストラクチャを活用します。これは、1 つのステートメントから複数のプランを生成します。 この機能では、パラメーターが NULL OR NOT NULLかどうかに基づいて実行時により最適なプランを選択できます。これにより、このようなクエリ パターンのパフォーマンスが既定で最適でないクエリのパフォーマンスが向上します。
式のカーディナリティ推定 (CE) フィードバック No はい。互換性レベル 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 Feature Azure SQL Database でのサポート SQL Server 2022 (16.x) 以降のバージョンでサポートされています Description
適応型結合 (Batch モード) はい: データベース互換性レベル 140 以上 はい: SQL Server 2017 (14.x) 以降、データベース互換性レベル 140 以上 適応型結合では、実際の入力行に基づき、実行時に結合の種類が動的に選択されます。
個別値の概数 Yes はい: SQL Server 2019 (15.x) 以降 ビッグ データ シナリオのおおよその COUNT DISTINCT を提供し、高パフォーマンスと低メモリ フットプリントの利点を提供します。
Approximate Percentile はい: データベース互換性レベル 110 以上 はい: SQL Server 2022 (16.x) 以降、互換性レベル 110 以上 近似パーセンタイル集計関数を使って迅速に意思決定できるよう、許容されるランク ベースのエラー境界で大規模なデータセットのパーセンタイルをすばやく計算します。
行ストアでの Batch モード はい: データベース互換性レベル 150 以上 はい: SQL Server 2019 (15.x) 以降、互換性レベル 150 以上 列ストア インデックスを必要としない、CPU にバインドされたリレーショナル DW ワークロードに対して Batch モードを指定します。
カーディナリティ推定 (CE) フィードバック はい: データベース互換性レベル 160 以上 はい: SQL Server 2022 (16.x) 以降、互換性レベル 160 以上 非効率な CE の前提によりクエリのパフォーマンスが低下しているワークロードに対して、繰り返し実行されるクエリの推定カーディナリティを自動的に調整して最適化を図ります。 CE フィードバックでは、クエリ実行プランの品質を向上させるために、特定のクエリとデータ分散に適合するモデルの前提条件が特定され、使用されます。
並列処理の次数 (DOP) フィードバック はい: データベース互換性レベル 160 以上 はい: データベース互換性レベル 160 以上 非効率な並列処理によりパフォーマンスに問題が生じるワークロードに対して、繰り返し実行されるクエリの並列処理の次数を自動的に調整して最適化を図ります。 クエリ ストアの有効化が必要です。
Interleaved Execution はい: データベース互換性レベル 140 以上 はい: SQL Server 2017 (14.x) 以降、データベース互換性レベル 140 以上 固定推定値ではなく、最初のコンパイルで発生した複数ステートメントのテーブル値関数の実際のカーディナリティを使用します。
メモリ許可フィードバック (Batch モード) はい: データベース互換性レベル 140 以上 はい: SQL Server 2017 (14.x) 以降、データベース互換性レベル 140 以上 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 以上 はい: SQL Server 2022 (16.x) 以降、データベース互換性レベル 160 以上 データベースと READ_WRITE モードでクエリ ストアを有効にする必要があります。
クエリ ストアを使用したプラン強制の最適化 Yes はい、SQL Server 2022 (16.x) 以降です。 繰り返し強制されるクエリに対して、コンパイルのオーバーヘッドを削減します。 詳しくは、「クエリ ストアでのプランの強制の最適化」をご覧ください。
スカラー UDF のインライン化 はい: データベース互換性レベル 150 以上 はい: SQL Server 2019 (15.x) 以降、データベース互換性レベル 150 以上 スカラー UDF は同等のリレーショナル式に変換され、この式は呼び出し側クエリに "インライン化" されます。これにより、多くの場合、パフォーマンスが大幅に向上します。
パラメーター依存プランの最適化 はい: データベース互換性レベル 160 以上 はい: SQL Server 2022 (16.x) 以降、データベース互換性レベル 160 以上 パラメーターの機密性の高いプランの最適化は、パラメーター化されたクエリの 1 つのキャッシュされたプランが、一様でないデータ分散など、すべての可能な受信パラメーター値に対して最適ではないシナリオに対処します。
テーブル変数の遅延コンパイル はい: データベース互換性レベル 150 以上 はい: SQL Server 2019 (15.x) 以降、データベース互換性レベル 150 以上 固定推定値ではなく、最初のコンパイルで発生したテーブル変数の実際のカーディナリティを使用します。

Azure SQL Managed Instance 向け IQP 機能

IQP Feature Azure SQL Managed Instance でサポートされています。 Description
適応型結合 (Batch モード) はい: データベース互換性レベル 140 以上 適応型結合では、実際の入力行に基づき、実行時に結合の種類が動的に選択されます。
個別値の概数 Yes ビッグ データ シナリオのおおよその COUNT DISTINCT を提供し、高パフォーマンスと低メモリ フットプリントの利点を提供します。
Approximate Percentile はい: データベース互換性レベル 110 以上 近似パーセンタイル集計関数を使って迅速に意思決定できるよう、許容されるランク ベースのエラー境界で大規模なデータセットのパーセンタイルをすばやく計算します。
行ストアでの Batch モード はい: データベース互換性レベル 150 以上 列ストア インデックスを必要としない、CPU にバインドされたリレーショナル DW ワークロードに対して Batch モードを指定します。
カーディナリティ推定 (CE) フィードバック はい: データベース互換性レベル 160 以上 非効率な CE の前提によりクエリのパフォーマンスが低下しているワークロードに対して、繰り返し実行されるクエリの推定カーディナリティを自動的に調整して最適化を図ります。 CE フィードバックでは、クエリ実行プランの品質を向上させるために、特定のクエリとデータ分散に適合するモデルの前提条件が特定され、使用されます。
並列処理の次数 (DOP) フィードバック はい。 Always-up-to-date 更新ポリシーのデータベース互換性レベル 160 以降。 いいえ。 SQL Server 2022 更新ポリシーの場合。 非効率な並列処理によりパフォーマンスに問題が生じるワークロードに対して、繰り返し実行されるクエリの並列処理の次数を自動的に調整して最適化を図ります。 クエリ ストアの有効化が必要です。
Interleaved Execution はい: データベース互換性レベル 140 以上 固定推定値ではなく、最初のコンパイルで発生した複数ステートメントのテーブル値関数の実際のカーディナリティを使用します。
メモリ許可フィードバック (Batch モード) はい: データベース互換性レベル 140 以上 Batch モード クエリにディスクへのスピルがある場合は、連続実行のためにさらにメモリを追加します。 クエリで割り当てられたメモリの 50% 超 (> 50%) が浪費された場合は、次回以降の実行でメモリ許可サイズを減らします。
メモリ許可フィードバック (行モード) はい: データベース互換性レベル 150 以上 行モード クエリにディスクへのスピルがある場合は、連続実行のためにさらにメモリを追加します。 クエリで割り当てられたメモリの 50% 超 (> 50%) が浪費された場合は、次回以降の実行でメモリ許可サイズを減らします。
メモリ許可フィード (バック パーセンタイル) はい: データベース互換性レベル 160 以上 過去のクエリ実行に基づいてフィードバックの精度を高めることで、システムに干渉することなくメモリ許可フィードバックの既存の制限に取り組みます。
メモリ許可、CE、および DOP フィードバックの永続化 はい: データベース互換性レベル 160 以上 メモリ許可フィードバックを永続化する新機能を提供します。 CE および DOP フィードバックは常に永続化されます。 データベースと READ_WRITE モードでクエリ ストアを有効にする必要があります。
クエリ ストアを使用したプラン強制の最適化 いいえ 繰り返し強制されるクエリに対して、コンパイルのオーバーヘッドを削減します。 詳しくは、「クエリ ストアでのプランの強制の最適化」をご覧ください。
スカラー UDF のインライン化 はい: データベース互換性レベル 150 以上 スカラー UDF は同等のリレーショナル式に変換され、この式は呼び出し側クエリに "インライン化" されます。これにより、多くの場合、パフォーマンスが大幅に向上します。
パラメーター依存プランの最適化 はい: データベース互換性レベル 160 以上 パラメーター感度最適化は、パラメーター化されたクエリに対して、単一のキャッシュプランがすべての可能な受信パラメーター値に対して最適でない場合のシナリオ、例えば一様でないデータ分布に対処します。
テーブル変数の遅延コンパイル はい: データベース互換性レベル 150 以上 固定推定値ではなく、最初のコンパイルで発生したテーブル変数の実際のカーディナリティを使用します。

SQL Server 2019 の IQP 機能

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

SQL Server 2017 の IQP 機能

IQP feature SQL Server 2017 (14.x) でサポート Description
適応型結合 (Batch モード) はい: SQL Server 2017 (14.x) 以降、データベース互換性レベル 140 以上 適応型結合では、実際の入力行に基づき、実行時に結合の種類が動的に選択されます。
個別値の概数 Yes ビッグ データ シナリオのおおよその COUNT DISTINCT を提供し、高パフォーマンスと低メモリ フットプリントの利点を提供します。
Interleaved Execution はい: データベース互換性レベル 140 以上 固定推定値ではなく、最初のコンパイルで発生した複数ステートメントのテーブル値関数の実際のカーディナリティを使用します。
メモリ許可フィードバック (Batch モード) はい: データベース互換性レベル 140 以上 Batch モード クエリにディスクへのスピルがある場合は、連続実行のためにさらにメモリを追加します。 クエリで割り当てられたメモリの 50% 超 (> 50%) が浪費された場合は、次回以降の実行でメモリ許可サイズを減らします。

クエリ ストアの要件

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

IQP feature クエリ ストアを有効にする必要があり、READ_WRITE
適応型結合 (Batch モード) No
個別値の概数 No
Approximate Percentile No
行ストアでの Batch モード No
カーディナリティ推定 (CE) フィードバック Yes
並列処理の次数 (DOP) フィードバック Yes
Interleaved Execution No
メモリ許可フィードバック (Batch モード) No
メモリ許可フィードバック (行モード) No
メモリ許可フィードバック (パーセンタイルと永続化モード) Yes
クエリ ストアを使用したプラン強制の最適化 Yes
スカラー UDF のインライン化 No
パラメーター依存プランの最適化 いいえ (ただし推奨)
テーブル変数の遅延コンパイル No