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

このページでは、データベースでアクティブなクエリをモニタリングしてトラブルシューティングする方法について説明します。アクティブなクエリとは、パフォーマンスに影響する可能性があるデータベース上で長時間実行されているクエリのことです。これらのクエリをモニタリングすることで、システムのレイテンシが発生している原因と 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 クエリテキスト。
ステータス 接続の現在のステータス。ステータス値は active と idle in transaction です。
セッション継続期間 現在のセッションの実行時間(秒)
トランザクションの実行時間 現在のトランザクションの実行時間(秒)。
クエリの実行時間 現在アクティブなクエリの実行時間(秒)。idle in transaction 状態のクエリはアクティブに実行されていないため、クエリの実行時間は 0 です。
待機イベントタイプ クエリ実行中に発生している待機イベントのタイプ。
待機イベント クエリ実行中に発生している待機イベント。
データベース この接続が実行されているデータベースの名前。
アプリケーション名 この接続が実行されているアプリケーションの名前。
ユーザー名 データベースに接続しているデータベース ユーザーの名前。
クライアント アドレス クエリを送信したクライアントの特定の IP アドレス。
アクション トランザクションを終了するためのリンクが含まれています。

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

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

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

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

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

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

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

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

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

次のステップ