次の方法で共有


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

適用対象: SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceMicrosoft Fabric SQL Database

インテリジェントなクエリ処理 (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 機能の詳細については、 インテリジェント クエリ処理機能の詳細を参照してください。

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

IQP の機能 Azure SQL Database でのサポート SQL Server 2025 (17.x) プレビューでサポートされます 説明
最適化されたハロウィンの保護 いいえ はい。互換性レベル 170 の SQL Server 2025 (17.x) プレビュー以降 tempdb領域の消費を減らし、ハロウィーンの保護にスプールを使用しないことでクエリのパフォーマンスを向上させます。
パラメータープランの最適化のオプション (OPPO) いいえ はい。互換性レベル 170 の SQL Server 2025 (17.x) プレビュー以降 パラメーターの機密性の高いプランの最適化 (PSPO) の機能強化で導入されたアダプティブ プラン最適化 (マルチプラン) インフラストラクチャを活用します。これは、1 つのステートメントから複数のプランを生成します。 この機能では、パラメーターが NULL OR NOT NULLかどうかに基づいて実行時により最適なプランを選択できます。これにより、このようなクエリ パターンのパフォーマンスが既定で最適でないクエリのパフォーマンスが向上します。
式のカーディナリティ推定 (CE) フィードバック いいえ はい。互換性レベル 160 の SQL Server 2025 (17.x) プレビュー以降 CE フィードバックを拡張し、以前の実行から学習し、それらの式の将来の実行に適切な CE モデルの選択を自動的に適用することで、クエリ間で式を繰り返すカーディナリティ推定を向上させます
OPTIMIZED_SP_EXECUTESQL はい はい。SQL Server 2025 (17.x) プレビュー以降 コンパイル ストームの影響を効果的に軽減します。 コンパイル ストームとは、多数のクエリが同時にコンパイルされ、パフォーマンスの問題やリソースの競合が発生する状況を指します。 この機能を有効にすると、 sp_executesql の呼び出しが、コンパイルの観点からストアド プロシージャやトリガーなどのオブジェクトのように動作できるようになります。

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

SQL Server 2019 の 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 の IQP 機能

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

クエリ ストアの要件

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

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