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

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

[Query Insights] ダッシュボードでは、アクティブなトランザクションの概要と、トランザクションのリスト(関連するクエリと統計情報を含む)を確認できます。トランザクションはその開始時刻順に表示されます。実行中のクエリが大量にある場合、結果には全クエリの一部しか表示されないことがあります。

Gemini in Databases アシスタントを使用すると、Cloud SQL for MySQL リソースのモニタリングとトラブルシューティングを行えます。詳細については、Gemini アシスタンスによるモニタリングとトラブルシューティングをご覧ください。

始める前に

アクティブ クエリを表示するには、次のことを行う必要があります。

  1. Gemini in Databases を設定する。
  2. カスタムロールを作成し、次の権限を追加する。
    タスク ロール 権限
    推奨事項を表示する databaseinsights.viewer databaseinsights.activeQueries.fetch
    databaseinsights.activitySummary.fetch
    推奨事項を終了する databaseinsights.operationsAdmin なし

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

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

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

  2. Google Cloud コンソールで Cloud SQL の [インスタンス] ページに移動します。

    Cloud SQL の [インスタンス] に移動

  3. インスタンスの [概要] ページを開くには、インスタンス名をクリックします。

  4. 次のいずれかを行うと、[Query Insights] ダッシュボードが表示されます。

    • [Query Insights] タブを選択する。
    • [クエリ分析情報に移動すると、クエリとパフォーマンスに関する詳細情報を確認できます] をクリックする。[Query Insights] ダッシュボードが開きます。インスタンスの詳細が上部に表示されます。
  5. [アクティブ クエリのビュー] タブをクリックします。

    ここで、[最も実行時間の長いトランザクション] の表に表示されるクエリ情報を変更できます。

    • データベース: 特定またはすべてのデータベースのクエリ負荷がフィルタされます。
    • ユーザー: 特定のユーザー アカウントからのクエリ負荷がフィルタされます。
    • すべてのアクティブ クエリの概要スコアカード: 次のパラメータに基づいて接続の合計数が表示され、すべてのアクティブ クエリの概要が示されます。
      1. 接続状態別に分類されたアクティブな接続の分布。
      2. トランザクションの状態に基づくアクティブなトランザクションの分布。
      3. クエリの継続時間の分布。
      4. 最も実行時間の長いトランザクション: 実行中(アクティブ状態)のクエリのうち、実行時間の長い 50 件が長い順に表示されます。テーブル内のアクティブ クエリをフィルタして並べ替えることができます。

正規化されたアクティブ クエリを表示する

[Query Insights] ダッシュボードでは、正規化されたアクティブ クエリを使用して、実行時間の長さが上位のトランザクションのリストを確認できます。正規化されたアクティブ クエリは、センシティブ データを削除してダイジェストを返します。次の例では、使用する値は異なってもダイジェストは同じです。

  • 通常のクエリ

    • select * from test_table where id=1;
    • select * from test_table_where id=2;
  • ダイジェストまたは正規化されたクエリ

    • select * from test_table where id=?;

異なるセッションで実行されるクエリは、ダッシュボードに別々のエントリとして表示されます。

実行時間の長さが上位のトランザクションを表示する

[Query insights] ダッシュボードの [最も実行時間の長いトランザクション] の表には、次の列があります。

列名 説明
プロセス ID 接続の固有識別子。
クエリ SQL クエリテキスト。
トランザクションのステータス トランザクションの現在の実行状態。許可される値は、RUNNINGLOCK WAITROLLING BACKCOMMITTING です。
スレッドの状態 スレッドの状態(またはクエリの状態)は、アクティブなスレッドの現在の状態を示します。
トランザクションの開始時刻 トランザクションの実行開始時刻のタイムスタンプ。
トランザクションの実行時間 現在アクティブなトランザクションの実行時間(秒)。
トランザクションの待機時間 現在アクティブなトランザクションで発生した待機時間(秒)。
スレッドの状態の継続時間 クエリの経過時間。
ロックされたトランザクション行 現在アクティブなトランザクションによってロックされている行の数。
変更されたトランザクション行 現在アクティブなトランザクションによって変更された行の数。
データベース この接続が実行されているデータベースの名前。
ユーザー名 データベースに接続しているユーザーの名前。
クライアント アドレス ユーザーがデータベースに接続しているクライアントの IP アドレス。
アクション トランザクションを終了するためのリンクが含まれています。

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

接続を終了する

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

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

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

データベース リクエストはすぐに返され、終了はバックグラウンドで実行されます。