アクティブなクエリをモニタリングする

このページでは、データベースでアクティブなクエリをモニタリングしてトラブルシューティングする方法について説明します。アクティブなクエリは、パフォーマンスに影響する可能性があるデータベース上の長時間実行クエリです。これらのクエリをモニタリングすることで、システムのレイテンシが発生している原因と CPU 使用率が高い原因を特定しやすくなります。

アクティブなクエリは、Query Insights ダッシュボードで確認できます。これらのクエリは、トランザクションの開始時間順に表示されます。大量のクエリが実行中の場合、システムがこのデータの収集に関して適用するメモリの制約により、結果は合計クエリのサブセットに限定される可能性があります。

始める前に

アクティブ クエリの表示を開始するには、高度な Query Insights 機能を有効にして、インスタンスのアクティブ クエリ分析を有効にする必要があります。手順は次のとおりです。

  1. Google Cloud コンソール で、[クラスタ] ページに移動します。

    クラスタに移動

  2. クラスタとインスタンスのリストから、プライマリ インスタンスまたは読み取りプール インスタンスをクリックします。

  3. [Query Insights] をクリックします。

  4. [Edit Settings] をクリックします。

  5. [クエリ分析情報の設定を編集] ウィンドウで、[AlloyDB の高度なクエリ分析機能を有効にする] > [アクティブ クエリ分析] を選択します。

  6. [変更を保存] をクリックします。

  7. [変更後は再起動が必要です] ウィンドウで、[確認して再起動] をクリックします。

Gemini Cloud Assist アシスタントを使用すると、AlloyDB for PostgreSQL リソースのモニタリングとトラブルシューティングを行うことができます。詳細については、Gemini アシスタンスによるモニタリングとトラブルシューティングをご覧ください。

アクティブ クエリを表示する

アクティブ クエリを表示するには、次のことを行います。

  1. カスタムロールを作成し、databaseinsights.monitoringViewer Identity and Access Management(IAM)権限を追加します。

  2. アクティブ クエリを表示するユーザーごとに、このロールを追加します。

  3. Google Cloud コンソールで、[AlloyDB] ページを開きます。

    AlloyDB に移動する

  4. クラスタの名前をクリックして、[概要] ページを開きます。

  5. [クエリ分析情報] タブを選択します。Query Insights ダッシュボードには、選択したクラスタの詳細が表示されます。

  6. [アクティブ クエリのビュー] タブをクリックします。このタブには、実行中のアクティブなクエリの概要と、実行時間の長い上位 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 クエリテキスト。
ステータス 接続の現在のステータス。ステータス値は activeidle in transaction です。
セッション継続期間 現在のセッションの実行時間(秒)
トランザクションの実行時間 現在のトランザクションの実行時間(秒)。
クエリの実行時間 現在アクティブなクエリの実行時間(秒)。idle in transaction 状態のクエリはアクティブに実行されていないため、クエリの実行時間は 0 です。
待機イベントタイプ クエリ実行中に発生している待機イベントのタイプ。
待機イベント クエリ実行中に発生している待機イベント。
データベース この接続が実行されているデータベースの名前。
アプリケーション名 この接続が実行されているアプリケーションの名前。
ユーザー名 データベースに接続しているデータベース ユーザーの名前。
クライアント アドレス クエリを送信したクライアントの特定の IP アドレス。
アクション トランザクションを終了するためのリンクが含まれています。

表示内容は 60 秒ごとに自動的に更新されます。

[データベース] フィールドと [ユーザー] フィールドを使用してフィルタすると、ページのデータが更新されます。

静的データを分析するには、[自動更新] を無効にして、必要に応じて [実行時間が最も長いトランザクション] テーブルの [フィルタ] フィールドを使用します。

クエリまたはトランザクションを終了する

クエリまたはトランザクションを終了するには、databaseinsights.operationsAdmin ロールが必要です。詳細については、IAM の基本ロールと事前定義ロールをご覧ください。

トランザクションには複数のクエリを含めることができます。現在アクティブなクエリを特定するには、[最も実行時間の長いトランザクション] の表の [クエリ] 列を確認します。

クエリまたはトランザクションを終了するには、次の手順を実施します。

  1. [最も実行時間の長いトランザクション] の表でクエリを選択します。
  2. 右にスクロールして [アクション] 列に移動します。
  3. [接続を終了] をクリックします。
  4. [接続を終了] ウィンドウで、[確認] をクリックします。

    終了を開始すると、ページが更新されます。終了が失敗した場合は、エラーは表示されず、クエリは [アクティブなクエリ] リストに引き続き表示されます。終了が成功すると、クエリはリストに表示されなくなります。

次のステップ