Azure SQL Database の Query Performance Insight
適用対象: Azure SQL データベース
Query Performance Insight は、単一およびプールされたデータベースに対するインテリジェントなクエリ分析を提供します。 これは、ワークロードで最もリソースを消費し、長時間実行されるクエリを特定するのに役立ちます。 これにより、ワークロードの全体的なパフォーマンスを向上させるため、およびコストをかけているリソースを効率的に使用するために、最適化するクエリを見つけることができます。 Query Performance Insight を使用すると、以下が提供され、データベースのパフォーマンスのトラブルシューティングに費やす時間を短縮できます。
- データベース リソース (DTU) の消費量の詳細な情報
- CPU、期間、および実行回数別の上位データベース クエリの詳細 (パフォーマンス向上のためのチューニングの対象となる可能性があります)
- クエリの詳細にドリルダウンして、クエリ テキストやリソース使用率の履歴を表示する機能
- データベース アドバイザーからのパフォーマンスに関する推奨事項を示す注釈
前提条件
Query Performance Insight では、 クエリ ストア がデータベース上で実行されている必要があります。 既定では、Azure SQL Database のすべてのデータベースに対して自動的に有効になります。 クエリ ストアが実行されていない場合、Azure portal で有効にするように求められます。
Note
ポータルで "クエリ ストアはこのデータベースで適切に構成されていません" というメッセージが表示された場合は、クエリ ストア構成の最適化に関する記述を参照してください。
アクセス許可
Query Performance Insight を使用するには、次の Azure ロール ベースのアクセス制御 (Azure RBAC) 権限が必要です。
- 上位のリソース消費量クエリとグラフを表示するには、閲覧者、所有者、共同作成者、SQL DB 共同作業者、または SQL Server 共同作業者の権限が必要です。
- クエリ テキストを表示するには、所有者、共同作成者、SQL DB 共同作業者、または SQL Server 共同作業者の権限が必要です。
Query Performance Insight の使用
Query Performance Insight は簡単に使用できます。
Azure portal を開き、調査するデータベースを見つけます。
左側のメニューから、 [インテリジェント パフォーマンス]>[Query Performance Insight] の順に開きます。
最初のタブで、リソース消費量が上位のクエリの一覧を確認します。
個別のクエリを選択して詳細を表示します。
[インテリジェント パフォーマンス]>[パフォーマンスの推奨事項] の順に開き、パフォーマンスの推奨事項が利用可能かどうかを確認します。 組み込みのパフォーマンスの推奨事項について詳しくは、Azure SQL Database Advisor に関するページを参照してください。
スライダーまたはズーム アイコンを使用して、監視間隔を変更します。
Note
Query Performance Insight で情報を表示する Azure SQL Database の場合、クエリ ストアで数時間分のデータをキャプチャする必要があります。 一定の期間に、データベースでアクティビティが発生していない場合、またはクエリ ストアがアクティブではなかった場合、Query Performance Insight でその時間の範囲が表示されたときにグラフは空になります。 クエリ ストアが実行されていない場合はいつでも有効にできます。 詳細については、「クエリ ストアを使用するときの推奨事項」を参照してください。
データベース パフォーマンスの推奨事項を確認する方法については、クエリ パフォーマンスの分析情報ナビゲーション ウィンドウの [推奨事項] を選択してください。
上位の CPU 消費量クエリを確認する
既定では、Query Performance Insight を最初に開いたときに、上位 5 つの CPU 消費量クエリが表示されます。
グラフに表示する個別のクエリを選別するには、チェック ボックスをオンまたはオフにします。
上の折れ線は、データベース全体の DTU の割合を示しています。 棒グラフは、選択された期間に選択されたクエリで消費された CPU の割合を示しています。 たとえば、 [過去 1 週間] が選択されている場合、各棒は 1 日を表します。
重要
折れ線で示されている DTU は、1 時間の最大消費値に集計されます。 これは、クエリ実行の統計情報でのみ大まかに比較するためです。 DTU 使用率が実行されたクエリに比べて高すぎるように見える場合がありますが、そうでない可能性もあります。
たとえば、わずか数分でクエリでの DTU の消費量が上限に達して 100% になった場合、Query Performance Insight の DTU の折れ線は、まる 1 時間の消費率を 100% (最大集計値の結果) として示しています。
より細かく比較する場合 (最大で 1 分間) は、次のようにして、カスタム DTU 使用率のグラフを作成することを検討してください。
- Azure portal で、 [Azure SQL Database]>[監視] の順に選択します。
- [メトリック] を選びます。
- [+ グラフの追加] を選択します。
- グラフの DTU の割合を選択します。
- さらに、左上のメニューで [過去 24 時間] を選択し、それを 1 分に変更します。
より詳細なカスタム DTU グラフを使用して、クエリ実行グラフと比較します。
下部のグリッドには、次の表示可能なクエリの集計情報が示されます。
- クエリ ID。データベースでのクエリの一意識別子です。
- 監視可能な期間のクエリあたりの CPU 使用率。集計関数に依存します。
- 1 つのクエリの実行時間。これも集計関数に依存します。
- 特定のクエリの実行回数の合計。
データが古くなった場合は、 [更新] ボタンを選択します。
監視間隔を変更して消費量の急増を調べるには、スライダーとズーム ボタンを使用します。
必要に応じて、 [カスタム] タブを選択し、以下を表示するようにビューをカスタマイズすることができます。
- メトリック (CPU、実行時間、実行回数)。
- 時間間隔 (過去 24 時間、過去 1 週間、過去 1 か月)。
- クエリの数
- 集計関数
[進む>] ボタンを選択して、カスタマイズされたビューを表示します。
重要
Query Performance Insight は、選択内容に応じて、上位の 5 個から 20 個の消費量クエリを表示するように制限されています。 データベースでは表示される上位のクエリ以外にもさらに多くのクエリを実行できます。これらのクエリはグラフには含まれません。
表示される上位のクエリ以外にも、多くの小さなクエリが頻繁に実行され、DTU の大部分が使用されるようなデータベース ワークロードが存在する可能性があります。 これらのクエリはパフォーマンス グラフに表示されません。
たとえば、あるクエリでしばらくの間、かなりの量の DTU が消費された可能性があるとします。しかし、監視期間におけるその総消費量は、他の上位の消費量クエリよりも少なくなっています。 このような場合、このクエリのリソース使用率はグラフには表示されません。
クエリ パフォーマンスの分析情報の制限を超える、上位のクエリ実行について確認する必要がある場合は、高度なデータベース パフォーマンスの監視とトラブルシューティングのための Database Watcher の使用を検討してください。
個々のクエリの詳細を表示する
クエリの詳細を表示するには:
上位クエリのリストでクエリを選択します。
詳細なビューが開きます。 CPU 消費量、期間、および実行回数が時系列で示されます。
グラフの機能を選択して詳細を確認します。
- 一番上のグラフの折れ線は、データベース全体の DTU の割合を示しています。 棒グラフは、選択されたクエリで消費された CPU の割合を示しています。
- 2 つ目のグラフは、選択されたクエリの総実行時間を示しています。
- 一番下のグラフは、選択されたクエリによる総実行回数を示しています。
必要に応じて、スライダーやズーム ボタンを使用するか、 [設定] を選択してクエリ データの表示方法をカスタマイズするか、別の時間範囲を選びます。
重要
Query Performance Insight ではどの DDL クエリもキャプチャされません。 場合によっては、アドホック クエリがすべてキャプチャされない可能性があります。
データベースが読み取り専用ロックで範囲ロックされている場合、クエリの詳細ウィンドウが読み込めまなくなります。
実行時間あたりの上位クエリを確認する
Query Performance Insight の 2 つのメトリック (実行時間と実行回数) は、潜在的なボトルネックの特定に役立つ場合があります。
実行時間の長いクエリは、長期にわたるリソースのロック、他のユーザーのブロック、スケーラビリティの制限を引き起こす最大の原因と考えられます。 これらは、最適化に最も適した要素でもあります。 詳細については、「Azure SQL のブロックの問題を理解して解決する」を参照してください。
実行時間の長いクエリを特定するには、次のようにします。
Query Performance Insight で、選択されたデータベースの [カスタム] タブを開きます。
メトリックを [実行時間] に変更します。
クエリの数と監視間隔を選択します。
集計関数を選択します。
- Sum では、監視間隔全体のすべてのクエリ実行時間を合計します。
- Max では、監視間隔全体で実行時間が最長のクエリを検索します。
- Avg では、全クエリ実行の平均実行時間を算出し、これらの平均値の上位のクエリを表示します。
[進む>] ボタンを選択して、カスタマイズされたビューを表示します。
重要
クエリ ビューを調整しても、DTU の折れ線は更新されません。 DTU の折れ線は常に、その間隔での最大消費値を示します。
データベースの DTU 消費量をより詳しく確認する場合 (最大で 1 分間) は、次のように Azure portal でカスタム グラフを作成することを検討してください。
- [Azure SQL Database]>[監視] の順に選択します。
- [メトリック] を選びます。
- [+ グラフの追加] を選択します。
- グラフの DTU の割合を選択します。
- さらに、左上のメニューで [過去 24 時間] を選択し、それを 1 分に変更します。
カスタム DTU グラフを使用して、クエリのパフォーマンス グラフと比較することをお勧めします。
実行回数あたりの上位クエリを確認する
実行回数が多くてもデータベース自体には影響しない場合や、リソース使用率が低い場合でも、データベースを使用するユーザー アプリケーションの処理速度は低下する可能性があります。
場合によっては、実行回数が多いと、ネットワークのラウンド トリップが増えることがあります。 ラウンド トリップはパフォーマンスに影響します。 これは、ネットワーク待ち時間やダウンストリーム サーバーの待ち時間の影響を受けます。
たとえば、多くのデータ ドリブン Web サイトでは、ユーザー要求ごとに高い頻度でデータベースにアクセスします。 接続プールは役立ちますが、ネットワーク トラフィックやサーバーの処理負荷の増加により、パフォーマンスが低下する可能性があります。 一般的には、ラウンド トリップを最小限に抑えます。
頻繁に実行される ("頻度の高い") クエリを特定するには、次のようにします。
Query Performance Insight で、選択されたデータベースの [カスタム] タブを開きます。
メトリックを [実行回数] に変更します。
クエリの数と監視間隔を選択します。
[進む>] ボタンを選択して、カスタマイズされたビューを表示します。
パフォーマンス チューニングの注釈を理解する
Query Performance Insight でワークロードを調べる際に、垂直線付きのアイコンがグラフ上部に表示されることがあります。
これらのアイコンは注釈です。 Azure SQL Database Advisor からのパフォーマンスに関する推奨事項が示されます。 注釈にカーソルを置くことで、パフォーマンスの推奨事項に関する概要を表示することができます。
詳細を確認したり、アドバイザーの推奨事項を適用したりする場合は、アイコンを選択し、推奨されるアクションの詳細を開きます。 これがアクティブな推奨事項の場合は、ポータルからすぐに適用できます。
ズーム レベルによっては、互いに近接する注釈が 1 つに折りたたまれている場合があります。 Query Performance Insight では、これがグループ注釈アイコンとして表されます。 グループ注釈アイコンを選択すると、注釈をリストする新しいウィンドウが開きます。
相互に関連するクエリやパフォーマンス チューニング アクションは、ワークロードの理解を深めるのに役立つ場合があります。
クエリ ストアの構成の最適化
Query Performance Insight を使用しているときに、次のようなクエリ ストアのエラー メッセージが表示される場合があります。
- 「クエリ ストアはこのデータベースで適切に構成されていません。 詳細については、こちらを選択してください」
- 「クエリ ストアはこのデータベースで適切に構成されていません。 設定を変更するには、こちらを選択してください」
これらのメッセージは、通常、クエリ ストアで新しいデータを収集できないときに表示されます。
1 つ目は、クエリ ストアが読み取り専用状態にあり、パラメーターが最適に設定されている場合に発生します。 これは、データ ストアのサイズを増やすか、クエリ ストアを消去することで修正できます (クエリ ストアを消去すると、以前に収集されたテレメトリがすべて失われます)。
2 つ目は、クエリ ストアが有効になっていないか、パラメーターが最適に設定されていない場合に発生します。 保持およびキャプチャ ポリシーを変更できます。また、クエリ ストアを有効にすることもできます。その場合は、Azure portal クエリ エディター、SQL Server Management Studio (SSMS)、Azure Data Studio、sqlcmd、または任意のクライアント ツールから提供される以下の T-SQL コマンドを実行します。
推奨される保存とキャプチャのポリシー
保持ポリシーには 2 つの種類があります。
- サイズ ベース:このポリシーが AUTO に設定されている場合、最大サイズに近づくとデータが自動的にクリーンアップされます。
- 時間ベース:既定では、このポリシーは 30 日に設定されます。 クエリ ストアの領域が不足すると、30 日を経過したクエリ情報が削除されます。
キャプチャ ポリシーは、次のように設定できます。
- [すべて] : クエリ ストアですべてのクエリがキャプチャされます。
- Auto:クエリ ストアでは、低頻度のクエリおよびコンパイル期間と実行期間が重要ではないクエリは無視されます。 実行回数、コンパイル期間、実行期間のしきい値は内部的に決定されます。 既定のオプションです。
- None:クエリ ストアでは新しいクエリのキャプチャが停止されます。しかし、既にキャプチャされているクエリの実行時統計は引き続き収集されます。
SSMS または Azure portal から以下のコマンドを実行して、すべてのポリシーを AUTO に設定し、クリーンアップ ポリシーを 30 日に設定することをお勧めします (YourDB
はデータベース名に置き換えてください)。
ALTER DATABASE [YourDB]
SET QUERY_STORE (SIZE_BASED_CLEANUP_MODE = AUTO);
ALTER DATABASE [YourDB]
SET QUERY_STORE (CLEANUP_POLICY = (STALE_QUERY_THRESHOLD_DAYS = 30));
ALTER DATABASE [YourDB]
SET QUERY_STORE (QUERY_CAPTURE_MODE = AUTO);
SSMS または Azure portal 経由でデータベースに接続し、以下のクエリを実行して、クエリ ストアのサイズを増やします (YourDB
はデータベース名に置き換えてください)。
ALTER DATABASE [YourDB]
SET QUERY_STORE (MAX_STORAGE_SIZE_MB = 1024);
これらの設定を適用すると、最終的にクエリ ストアで新しいクエリのテレメトリが収集されるようになります。 クエリ ストアをすぐに動作させる必要がある場合は、SSMS または Azure portal 経由で次のクエリを実行し、クエリ ストアを消去するように選択することもできます。 (YourDB
はデータベース名に置き換えてください)。
Note
次のクエリを実行すると、クエリ ストア内の、以前に収集された監視対象テレメトリがすべて削除されます。
ALTER DATABASE [YourDB] SET QUERY_STORE CLEAR;