インテリジェント パフォーマンス
SQL Server と Azure SQL には、アプリケーションの一貫したパフォーマンスを提供するのに役立つ自動化が含まれています。 これらの自動化機能は、総称してインテリジェント パフォーマンスと呼ばれます。
Azure SQL のインテリジェント パフォーマンスには、インテリジェント クエリ処理、自動プラン修正、自動チューニングが含まれます。
インテリジェントなクエリの処理
インテリジェント クエリ処理 (IQP) は、クエリ プロセッサに組み込まれている新しい機能のスイートです。 最新のデータベース互換性レベルを使用して有効にします。 アプリケーションでは、最新のデータベース互換性レベルを使用することで、パフォーマンスを向上させることができます。 コードの変更は必要ありません。 IQP の例としては "テーブル変数の遅延コンパイル" があり、テーブル変数を使用したクエリの実行を速くすることができます。
Azure SQL Database と Azure SQL Managed Instance では、IQP を使用するために必要な、SQL Server 2019 以降のバージョンと同じデータベース互換性レベル (150) がサポートされています。
自動プラン修正
クエリ プランの回帰は、SQL Server で最も解決が困難なパフォーマンスの問題の 1 つを表します。 クエリ プランの回帰は、同じクエリが再コンパイルされ、新しいプランのパフォーマンスが悪化する場合に発生します。
SQL Server 2017 および Azure SQL Database では、クエリ ストア内のデータを分析することにより、自動プラン修正の概念が導入されました。 SQL Server 2017 以降および Azure SQL Database のデータベースで、クエリ ストアを有効にすると、SQL Server エンジンによってクエリ プランの回帰が検索され、レコメンデーションが提供されます。 これらのレコメンデーションは、sys.dm_db_tuning_recommendations
動的管理ビュー (DMV) で確認できます。 これらのレコメンデーションには、パフォーマンスが良好な状態であったときのクエリ プランを手動で強制する T-SQL ステートメントが含まれます。
これらのレコメンデーションで自信を得た場合は、回帰が発生したときに、SQL Server で自動的にプランを強制させることができます。 自動プラン修正を有効にするには、ALTER DATABASE
と AUTOMATIC_TUNING
引数を使用します。
Azure SQL Database では、Azure portal または REST API の自動チューニング オプションを使用して、自動プラン修正を有効にすることもできます。 自動プラン修正のレコメンデーションは、クエリ ストアが有効にされている (Azure SQL Database と Azure SQL Managed Instance の既定値) すべてのデータベースで常に有効になります。 新しいデータベースの場合、自動プラン修正 (FORCE_PLAN
) は Azure SQL Database で既定で有効にされます。
Azure SQL Database の自動チューニング
自動プラン修正は、Azure SQL と SQL Server での自動チューニングの例ですが、Azure SQL Database の自動チューニングに固有の側面は、自動インデックス作成です。
Note
自動インデックス作成は、現在、SQL Managed Instance では使用できません
クラウドには、Microsoft が、プランのレコメンデーションと別に、パフォーマンスのレコメンデーションと自動化の形式で追加のサービスを提供する方法があります。 この機能は、Azure SQL Database の自動チューニングと呼ばれます。 これらのサービスは、Azure SQL Database のインスタンスからのパフォーマンス データを分析するバックグラウンド プログラムとして実行されます。 これらのサービスは、すべてのデータベース サブスクリプションの価格に含まれています。
自動チューニングで対処するように設計されている主なシナリオは、インデックスに関係します。 自動チューニングでは、クエリ ストアおよび DMV を含むデータベースのテレメトリのデータが分析され、アプリケーションのパフォーマンスを向上できるインデックスの作成が推奨されます。 また、自動チューニングを有効にして、クエリのパフォーマンスを向上させることができるインデックスを自動的に作成させることもできます。 自動チューニングでは、インデックスの変更も監視され、クエリのパフォーマンスを向上させないインデックスの削除が推奨されたり、自動的に削除されたりします。
Azure SQL Database の自動チューニングには、インデックスを推奨するために保守的なアプローチが採用されています。 つまり、sys.dm_db_missing_index_details
のような DMV に表示される可能性のあるレコメンデーションやクエリ表示プランが、自動チューニングのレコメンデーションとしてすぐに表示されない場合があることを意味します。 自動チューニング サービスでは、長時間クエリを監視し、機械学習アルゴリズムを使用して、クエリのパフォーマンスに本当に影響を与えるレコメンデーションが作成されます。
インデックスに関するレコメンデーションの自動チューニングでは、インデックスによって、挿入、更新、削除などの操作で発生する可能性があるオーバーヘッド パフォーマンスが考慮されていないことに注意してください。 通常、自動インデックス機能によって作成される新しい非クラスター化インデックスは、パフォーマンスに大きなプラスの影響を与えます。
パラメーター化クエリは、自動チューニングに関する追加のシナリオを表します。 パラメーター化されていない値を含むクエリは、パフォーマンスのオーバーヘッドにつながる可能性があります。パラメーター化されていない値が異なるたびに、実行プランが再コンパイルされるためです。 多くの場合、パラメーター値の異なる同じクエリによって同一の実行プランが生成されます。 しかし、これらのプランは個別にプラン キャッシュに追加されます。 実行プランを再コンパイルするプロセスにより、データベース リソースが消費され、クエリ実行時間の増加とプラン キャッシュのオーバーフローが発生します。 このようなイベントは、プランがキャッシュから削除される原因となります。
パラメーター依存プラン (PSP) の最適化を使用して、このシナリオに対処できます。 PSP 最適化を使用すると、パラメーター化された 1 つのステートメントに対して複数のアクティブなキャッシュされたプランが自動的に有効になります。 キャッシュされた実行プランは、お客様が指定したランタイム パラメーター値に基づいて、さまざまなデータ サイズに対応します。
Azure SQL Database の自動チューニングによるインデックスの例
次は、経時的なワークロード分析に基づいてデータベースに対してインデックスが推奨される Azure portal の例です。 このようなレコメンデーションを生成するのに十分なアクティビティをサンドボックスの Azure SQL Database にまだ送信していません。 CREATE INDEX
のレコメンデーションは、この演習の短い時間枠ではなく、ワークロードが取得されるにつれて時間の経過とともに生成されます。
Azure portal の [パフォーマンスの概要] では、クエリ ストアで示されているように、リソースを消費する上位 5 つのクエリのパフォーマンス情報を表示できます。 また、レコメンデーションもあります。
この Azure portal には、Query Performance Insights も用意されており、これはクエリ ストアに基づくビジュアル レポート ツールです。 この例では、Query Performance Insights によって、最も多くのリソースを消費する特定のクエリを表示し、クエリのパフォーマンスを向上させる方法をアドバイスします。
さらに、Azure portal には、パフォーマンスのレコメンデーションを直接表示する方法もあります。
このビューには、特定のレコメンデーションと任意の自動チューニング アクションの履歴が表示されます。 インデックスの場合、インデックスとテーブルの詳細が表示されます。 [自動化] オプションを使用すると、自動チューニングが有効になります。
自動チューニング オプションは、データベース サーバー レベルまたはデータベース レベルで設定できます。 このシナリオで自動チューニングを有効にした場合は、インデックスが自動的に作成されます。
sys.database_automatic_tuning_options
DMV を使用して自動チューニング オプションを表示することもできます。
Note
Azure SQL Managed Instance または SQL Server では、インデックスおよびパラメーター依存プランのレコメンデーションと自動化は利用できません。 自動プラン修正を利用できます。
推奨されているインデックスを選択すると、特定のインデックスに関する詳細が表示されます。
必要なインデックス、テーブル、領域に関する詳細が表示されます。 推奨されるインデックスを適用するか、インデックスが適用される T-SQL スクリプトを表示するかを選択できます。
インデックスは、オンライン インデックスとして適用される非クラスター化インデックスであることに注意してください。 手動または自動チューニングを使用して、推奨事項に基づいてインデックスが適用されている場合、レコメンデーション エンジンでは、適用されたインデックスを持つ期間に対するクエリのパフォーマンスも監視されます。 インデックスが適用される前と比較して、クエリのパフォーマンスが低下している場合は、インデックスを削除できます。