SQL データベースでのインテリジェントなクエリ処理
適用対象: SQL Server Azure SQL Database
Azure SQL Managed Instance
インテリジェントなクエリ処理 (QP) 機能ファミリには、最小限の労力で実装できる、既存のワークロードのパフォーマンスを広範に改善する機能が含まれています。 次の図では、IQP 機能のファミリと、SQL Serverに初めて導入された時期について詳しく説明します。 すべての IQP 機能は、Azure SQL Managed Instance および Azure SQL Database で使用できます。 一部の機能は、データベースの互換性レベルによって異なります。
インテリジェントなクエリ処理の概要については、この 6 分間のビデオをご覧ください。
GitHub のインテリジェント クエリ処理 (IQP) 機能のデモとサンプル コードについては、 を参照してください https://aka.ms/IQPDemos。
データベースに対して適用可能なデータベース互換性レベルを有効にすることにより、自動的にワークロードをインテリジェントなクエリ処理の対象にすることができます。 これは Transact-SQL を使って設定できます。 次に例を示します。
ALTER DATABASE [WideWorldImportersDW] SET COMPATIBILITY_LEVEL = 150;
以下の表で、すべてのインテリジェントなクエリ処理について詳しく説明します。これには、データベース互換性レベルに関する要件も含まれます。 リリース ノートや詳細な説明など、すべての IQP 機能の詳細については、「 インテリジェント クエリ処理 (IQP) 機能の詳細」を参照してください。
Azure SQL Database、Azure SQL Managed Instance、SQL Server 2022 (16.x) の IQP 機能
IQP の機能 | Azure SQL データベース および Azure SQL Managed Instance でのサポート | SQL Server 2022 (16.x) でサポートされます | 説明 |
---|---|---|---|
適応型結合 (バッチ モード) | はい。データベース互換性レベル 140 以降 | はい。データベース互換性レベル 140 の SQL Server 2017 (14.x) 以降 | 適応型結合では、実際の入力行に基づき、実行時に結合の種類が動的に選択されます。 |
個別の概算数 | はい | あり (SQL Server 2019 (15.x) 以降) | 高パフォーマンスと小さいメモリ占有領域の利点がある、ビッグ データシナリオに対して、おおよその COUNT DISTINCT を指定します。 |
近似百分位数 | はい。データベース互換性レベル 110 以降 | はい。互換性レベル 110 のSQL Server 2022 (16.x) 以降 | 近似パーセンタイル集計関数を使って迅速に意思決定できるよう、許容されるランク ベースのエラー境界で大規模なデータセットのパーセンタイルをすばやく計算します。 |
行ストアでのバッチ モード | はい。データベース互換性レベル 150 以降 | はい。互換性レベル 150 のSQL Server 2019 (15.x) 以降 | 列ストア インデックスを必要としない、CPU にバインドされたリレーショナル DW ワークロードに対してバッチ モードを指定します。 |
カーディナリティ推定 (CE) フィードバック | はい(プレビューでは、データベース互換性レベル 160 以降) | はい。互換性レベル 160 のSQL Server 2022 (16.x) 以降 | 非効率的な CE の前提条件によってクエリパフォーマンスが低下するワークロードを最適化するために、繰り返しクエリのカーディナリティの見積もりを自動的に調整します。 CE フィードバックでは、クエリ実行プランの品質を向上させるために、特定のクエリとデータ分散に適合するモデルの前提条件が特定され、使用されます。 |
並列処理の次数 (DOP) フィードバック | なし | はい。互換性レベル 160 のSQL Server 2022 (16.x) 以降 | 非効率的な並列処理によってパフォーマンスの問題が発生する可能性があるワークロードに対して最適化するために、繰り返しクエリの並列処理の程度を自動的に調整します。 クエリ ストアを有効にする必要があります。 |
インターリーブ実行 | はい。データベース互換性レベル 140 以降 | はい。データベース互換性レベル 140 の SQL Server 2017 (14.x) 以降 | 固定推測ではなく、最初のコンパイル時に検出された複数ステートメント テーブル値関数の実際のカーディナリティを使用します。 |
メモリ許可フィードバック (バッチ モード) | はい。データベース互換性レベル 140 以降 | はい。データベース互換性レベル 140 の SQL Server 2017 (14.x) 以降 | バッチ モード クエリにディスクへの書き込み操作がある場合は、連続実行のためにさらにメモリを追加します。 クエリで割り当てられたメモリの 50% が無駄 > になる場合は、連続実行のメモリ許可サイズを小さくします。 |
メモリ許可フィードバック (行モード) | はい。データベース互換性レベル 150 以降 | はい。データベース互換性レベル 150 SQL Server 2019 (15.x) 以降 | 行モード クエリにディスクへの書き込み操作がある場合は、連続実行のためにさらにメモリを追加します。 クエリで割り当てられたメモリの 50% が無駄 > になる場合は、連続実行のメモリ許可サイズを小さくします。 |
メモリ許可フィードバック (パーセンタイル) | なし | はい。データベース互換性レベル 140 の SQL Server 2022 (16.x)) 以降 | 過去のクエリ実行を組み込んでフィードバックを絞り込むことで、メモリ付与フィードバックの既存の制限に取り組みます。 |
メモリ許可、CE、DOP フィードバックの永続化 | なし | はい。データベース互換性レベル 140 の SQL Server 2022 (16.x)) 以降 | メモリ許可フィードバックを保持するための新しい機能を提供します。 CE と DOP のフィードバックは常に保持されます。 データベースとREAD_WRITE モードでクエリ ストアを有効にする必要があります。 |
プラン強制の最適化 | なし | はい。SQL Server 2022 (16.x) 以降)。 | 強制クエリを繰り返す場合のコンパイル オーバーヘッドを削減します。 詳しくは、「クエリ ストアでのプランの強制の最適化」をご覧ください。 |
スカラー UDF のインライン化 | はい。データベース互換性レベル 150 以降 | はい。データベース互換性レベル 150 SQL Server 2019 (15.x) 以降 | スカラー UDF は同等のリレーショナル式に変換され、この式は呼び出し側クエリに "インライン化" されます。これにより、多くの場合、パフォーマンスが大幅に向上します。 |
パラメーター センシティビティ プラン最適化 | なし | はい、データベース互換性レベル 160 (SQL Server 2022 (16.x) 以降) | パラメーターの秘密度プランの最適化は、パラメーター化されたクエリの単一のキャッシュされたプランが、一様でないデータ分散など、すべての可能な受信パラメーター値に対して最適ではないシナリオに対処します。 |
テーブル変数の遅延コンパイル | はい。データベース互換性レベル 150 以降 | はい。データベース互換性レベル 150 SQL Server 2019 (15.x) 以降 | 固定推測ではなく、最初のコンパイル時に検出されたテーブル変数の実際のカーディナリティを使用します。 |
SQL Server 2019 (15.x) の IQP 機能
IQP の機能 | SQL Server 2019 (15.x) でサポートされています | 説明 |
---|---|---|
適応型結合 (バッチ モード) | はい。データベース互換性レベル 140 の SQL Server 2017 (14.x) 以降 | 適応型結合では、実際の入力行に基づき、実行時に結合の種類が動的に選択されます。 |
個別の概算数 | はい | 高パフォーマンスと小さいメモリ占有領域の利点がある、ビッグ データシナリオに対して、おおよその 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) でサポートされます | 説明 |
---|---|---|
適応型結合 (バッチ モード) | はい。データベース互換性レベル 140 の SQL Server 2017 (14.x) 以降 | 適応型結合では、実際の入力行に基づき、実行時に結合の種類が動的に選択されます。 |
個別の概算数 | はい | 高パフォーマンスと小さいメモリ占有領域の利点がある、ビッグ データシナリオに対して、おおよその COUNT DISTINCT を指定します。 |
インターリーブ実行 | はい。データベース互換性レベル 140 以降 | 固定推定値ではなく、最初のコンパイルで発生した複数ステートメントのテーブル値関数の実際のカーディナリティを使用します。 |
メモリ許可フィードバック (バッチ モード) | はい。データベース互換性レベル 140 以降 | バッチ モード クエリにディスクへの書き込み操作がある場合は、連続実行のためにさらにメモリを追加します。 クエリで割り当てられたメモリの 50% が無駄 > になる場合は、連続実行のメモリ許可サイズを小さくします。 |
クエリ ストア要件
インテリジェントなクエリ処理機能のスイートの一部では、ユーザー データベースのメリットを得るために、クエリ ストアを有効にする必要があります。 クエリ ストアを有効にするには、「クエリ ストアを有効にする」を参照してください。
IQP の機能 | クエリ ストアを有効にしてREAD_WRITEする必要があります |
---|---|
適応型結合 (バッチ モード) | いいえ |
個別の概算数 | いいえ |
近似百分位数 | いいえ |
行ストアでのバッチ モード | いいえ |
カーディナリティ推定 (CE) フィードバック | はい |
並列処理の次数 (DOP) フィードバック | はい |
インターリーブ実行 | いいえ |
メモリ許可フィードバック (バッチ モード) | 部分的 |
メモリ許可フィードバック (行モード) | 部分的 |
メモリ許可フィードバック (パーセンタイル) | はい |
メモリ許可、CE、DOP フィードバックの永続化 | いいえ |
プラン強制の最適化 | はい |
スカラー UDF のインライン化 | いいえ |
パラメーター センシティビティ プラン最適化 | いいえ (ただし推奨) |
テーブル変数の遅延コンパイル | いいえ |
関連項目
リリース ノートや詳細な説明など、すべての IQP 機能の詳細については、「 インテリジェント クエリ処理 (IQP) 機能の詳細」を参照してください。
- 結合
- 実行モード
- クエリ処理アーキテクチャ ガイド
- プラン表示の論理操作と物理操作のリファレンス
- SQL Server 2017 の新機能
- SQL Server 2019 の新機能
- SQL Server 2022 の新機能