このページでは、データベースでアクティブなクエリをモニタリングしてトラブルシューティングする方法について説明します。アクティブなクエリは、パフォーマンスに影響する可能性があるデータベース上の長時間実行クエリです。これらのクエリをモニタリングすることで、システムのレイテンシが発生している原因と CPU 使用率が高い原因を特定しやすくなります。
アクティブなクエリは、Query Insights ダッシュボードで確認できます。これらのクエリは、トランザクションの開始時間順に表示されます。大量のクエリが実行中の場合、システムがこのデータの収集に関して適用するメモリの制約により、結果は合計クエリのサブセットに限定される可能性があります。
始める前に
アクティブ クエリの表示を開始するには、高度な Query Insights 機能を有効にして、インスタンスのアクティブ クエリ分析を有効にする必要があります。手順は次のとおりです。
Google Cloud コンソール で、[クラスタ] ページに移動します。
[Query Insights] をクリックします。
[Edit Settings] をクリックします。
[クエリ分析情報の設定を編集] ウィンドウで、[AlloyDB の高度なクエリ分析機能を有効にする] > [アクティブ クエリ分析] を選択します。
[変更を保存] をクリックします。
[変更後は再起動が必要です] ウィンドウで、[確認して再起動] をクリックします。
Gemini Cloud Assist アシスタントを使用すると、AlloyDB for PostgreSQL リソースのモニタリングとトラブルシューティングを行うことができます。詳細については、Gemini アシスタンスによるモニタリングとトラブルシューティングをご覧ください。
アクティブ クエリを表示する
アクティブ クエリを表示するには、次のことを行います。
カスタムロールを作成し、
databaseinsights.monitoringViewer
Identity and Access Management(IAM)権限を追加します。アクティブ クエリを表示するユーザーごとに、このロールを追加します。
Google Cloud コンソールで、[AlloyDB] ページを開きます。
クラスタの名前をクリックして、[概要] ページを開きます。
[クエリ分析情報] タブを選択します。Query Insights ダッシュボードには、選択したクラスタの詳細が表示されます。
[アクティブ クエリのビュー] タブをクリックします。このタブには、実行中のアクティブなクエリの概要と、実行時間の長い上位 50 件のトランザクションが表示されます。
情報を次のいずれかでフィルタできます。
- データベース: 特定またはすべてのデータベースのクエリ負荷がフィルタされます。
- ユーザー: 特定のデータベース ユーザーまたはすべてのユーザーからのクエリ負荷をフィルタします。
- ノード ID: 読み取りプール インスタンスでのみ表示されます。特定の読み取りプール インスタンス ノードまたはすべてのノードに対するクエリ負荷をフィルタします。
すべての正規化されたアクティブ クエリの概要スコアカード: 次のパラメータに基づいて接続の合計数が表示され、すべてのアクティブ クエリの概要が示されます。
- 接続状態別に分類されたアクティブな接続の分布。
- さまざまな待機イベントタイプに基づくアクティブな接続の分布。
- アイドル状態ではないクエリのトランザクション継続時間の分布。
最も実行時間の長いトランザクション: 実行中(
active
状態とidle in transaction
状態)のクエリのうち、実行時間の長い 50 件が長い順に表示されます。
正規化されたアクティブ クエリの上位 50 件のリストは、[Query Insights] ダッシュボードで確認できます。
正規化されたアクティブ クエリは、センシティブ データを削除してダイジェストを返します。WHERE 句の値を除いて同じ 2 つのクエリは、同じダイジェストになります。たとえば、次の 3 つのクエリの例について考えてみましょう。
select * from my_table where id = 1;
select * from my_table where id = 2;
select * from my_table where id = 100;
これらのクエリの正規化されたバージョンは次のダイジェストです。
select * from my_table where id = ?;
異なるセッションで実行されるクエリは、ダッシュボードに別々のエントリとして表示されます。
実行時間の長さが上位のトランザクションを表示する
次の表に、Query insights ダッシュボードの [最も実行時間の長いトランザクション] の表の列を示します。
列名 | 説明 |
---|---|
プロセス ID | プロセス ID は、データベース接続の一意の識別子です。 |
ノード ID | ノード ID は、クエリが実行される読み取りプール インスタンスノードの一意の識別子です。 |
クエリ | 正規化された SQL クエリテキスト。 |
ステータス | 接続の現在のステータス。ステータス値は active と idle in transaction です。 |
セッション継続期間 | 現在のセッションの実行時間(秒) |
トランザクションの実行時間 | 現在のトランザクションの実行時間(秒)。 |
クエリの実行時間 | 現在アクティブなクエリの実行時間(秒)。idle in transaction 状態のクエリはアクティブに実行されていないため、クエリの実行時間は 0 です。 |
待機イベントタイプ | クエリ実行中に発生している待機イベントのタイプ。 |
待機イベント | クエリ実行中に発生している待機イベント。 |
データベース | この接続が実行されているデータベースの名前。 |
アプリケーション名 | この接続が実行されているアプリケーションの名前。 |
ユーザー名 | データベースに接続しているデータベース ユーザーの名前。 |
クライアント アドレス | クエリを送信したクライアントの特定の IP アドレス。 |
アクション | トランザクションを終了するためのリンクが含まれています。 |
表示内容は 60 秒ごとに自動的に更新されます。
[データベース] フィールドと [ユーザー] フィールドを使用してフィルタすると、ページのデータが更新されます。
静的データを分析するには、[自動更新] を無効にして、必要に応じて [実行時間が最も長いトランザクション] テーブルの [フィルタ] フィールドを使用します。
クエリまたはトランザクションを終了する
クエリまたはトランザクションを終了するには、databaseinsights.operationsAdmin
ロールが必要です。詳細については、IAM の基本ロールと事前定義ロールをご覧ください。
トランザクションには複数のクエリを含めることができます。現在アクティブなクエリを特定するには、[最も実行時間の長いトランザクション] の表の [クエリ] 列を確認します。
クエリまたはトランザクションを終了するには、次の手順を実施します。
- [最も実行時間の長いトランザクション] の表でクエリを選択します。
- 右にスクロールして [アクション] 列に移動します。
- [接続を終了] をクリックします。
[接続を終了] ウィンドウで、[確認] をクリックします。
終了を開始すると、ページが更新されます。終了が失敗した場合は、エラーは表示されず、クエリは [アクティブなクエリ] リストに引き続き表示されます。終了が成功すると、クエリはリストに表示されなくなります。