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

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

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

始める前に

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

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

    [クラスタ] に移動

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

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

  4. [設定を編集] をクリックします。

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

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

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

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] タブを選択します。[Query Insights] ダッシュボードには、選択したクラスタの詳細が表示されます。

  6. [アクティブなクエリのビュー] タブをクリックします。このタブには、実行中のアクティブなクエリのサマリーと、長時間実行トランザクション上位 50 件が表示されます。

    この情報は以下のいずれかの項目でフィルタできます。

    • データベース: 特定またはすべてのデータベースのクエリ負荷がフィルタされます。
    • ユーザー: 特定のデータベース ユーザーまたはすべてのユーザーからのクエリ負荷がフィルタされます。
    • ノード ID: 読み取りプール インスタンスでのみ表示されます。特定の読み取りプール インスタンスのノードまたはすべてのノードのクエリ負荷がフィルタされます。

    正規化されたすべてのアクティブ クエリの概要スコアカード: 次のパラメータに基づいて接続の合計数が表示され、すべてのアクティブ クエリの概要が示されます。

    • 接続状態別に分類されたアクティブな接続の分布。
    • さまざまな待機イベントタイプに基づくアクティブな接続の分布。
    • アイドル状態ではないクエリのトランザクション継続時間の分布。

    最も実行時間の長いトランザクション: 実行中(active 状態と idle in transaction 状態)のクエリのうち、実行時間の長いものから順に上位 50 件が表示されます。

正規化されたアクティブ クエリの上位 50 件のリストは、[Query Insights] ダッシュボードに表示できます。

正規化されたアクティブ クエリは、機密データを削除してダイジェストを返します。2 つのクエリで WHERE 句の値以外が同じであれば、ダイジェストは同じです。たとえば、次の 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. [接続を終了] ウィンドウで、[確認] をクリックします。

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

次のステップ