このページでは、データベースでアクティブなクエリをモニタリングしてトラブルシューティングする方法について説明します。これらのクエリをモニタリングすることで、システムのレイテンシが発生している原因と CPU 使用率が高い原因を特定しやすくなります。
[Query Insights] ダッシュボードでは、アクティブなトランザクションの概要と、トランザクションのリスト(関連するクエリと統計情報を含む)を確認できます。トランザクションはその開始時刻順に表示されます。多数のクエリが実行されている場合、結果はクエリ全体のサブセットに制限される可能性があります。
始める前に
アクティブなクエリをモニタリングするには、Cloud SQL Enterprise エディションまたは Cloud SQL Enterprise Plus エディションのいずれかを使用します。
アクティブなクエリでセッションまたは長時間実行トランザクションを終了するには、Cloud SQL インスタンスに Cloud SQL Enterprise Plus エディションを使用する必要があります。
Cloud SQL のエディションの詳細については、Cloud SQL のエディションの概要をご覧ください。
必要なロールと権限
アクティブなクエリを表示するために必要な権限を取得するには、Cloud SQL インスタンスをホストするプロジェクトに対する次の IAM ロールを付与するよう管理者に依頼してください。
-
インスタンス アクティビティの概要を表示する。
Cloud SQL 閲覧者 (
roles/cloudsql.viewer
) -
データベース アクティビティの概要と長時間実行トランザクションを表示する。
データベース分析情報閲覧者 (
roles/databaseinsights.viewer
) -
セッションまたは長時間実行トランザクションを終了する。
- Cloud SQL 編集者(
roles/cloudsql.editor
) -
データベース分析情報オペレーション管理者 (
roles/databaseinsights.operationsAdmin
)
- Cloud SQL 編集者(
ロールの付与については、プロジェクト、フォルダ、組織へのアクセスを管理するをご覧ください。
これらの事前定義ロールには、アクティブなクエリの表示に必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。
必要な権限
アクティブなクエリを表示するには、次の権限が必要です。
- データベース アクティビティの概要と長時間実行トランザクションを表示する
-
databaseinsights.activeQueries.fetch
-
databaseinsights.activitySummary.fetch
-
カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。
アクティブ クエリを有効にする
Query Insights を有効にすると、アクティブ クエリが自動的に有効になります。アクティブなクエリでセッションまたは長時間実行トランザクションを終了するには、Cloud SQL Enterprise Plus エディションの Query Insights を使用する必要があります。
アクティブ クエリを無効にする
Query Insights を無効にせずに、アクティブなクエリを無効にすることはできません。アクティブなクエリと Query Insights を無効にするには、Query Insights を無効にするをご覧ください。
アクティブ クエリを表示する
アクティブ クエリを表示するには、次の手順を実施します。
Google Cloud コンソールで、Cloud SQL の [インスタンス] ページに移動します。
インスタンスの [概要] ページを開くには、インスタンス名をクリックします。
次のいずれかを行うと、[Query Insights] ダッシュボードが表示されます。
- [Query Insights] タブを選択する。
- [クエリ分析情報に移動すると、クエリとパフォーマンスに関する詳細情報を確認できます] をクリックする。[Query Insights] ダッシュボードが開きます。インスタンスの詳細が上部に表示されます。
[アクティブなクエリ] タブをクリックします。
ここで、[最も実行時間の長いトランザクション] のテーブルに表示されるクエリ情報を変更できます。
- データベース: 特定またはすべてのデータベースのクエリ負荷がフィルタされます。
- ユーザー: 特定のユーザー アカウントからのクエリ負荷をフィルタリングします。
すべてのアクティブ クエリの概要スコアカード: 次のパラメータに基づいて接続の合計数が表示され、すべてのアクティブ クエリの概要が示されます。
- 接続状態別に分類されたアクティブな接続の分布。
- トランザクションの状態に基づくアクティブなトランザクションの分布。
- クエリの継続時間の分布。
- 最も実行時間の長いトランザクション: 実行中(アクティブ状態)のクエリのうち、実行時間の長い 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 クエリテキスト。 |
トランザクション状態 | トランザクションの現在の実行状態。許可される値は、RUNNING 、LOCK WAIT 、ROLLING BACK 、COMMITTING です。 |
スレッドの状態 | スレッドの状態(またはクエリの状態)は、アクティブなスレッドの現在の状態を示します。 |
トランザクションの開始時刻 | トランザクションの実行開始時刻のタイムスタンプ。 |
トランザクションの実行時間 | 現在アクティブなトランザクションの実行時間(秒)。 |
トランザクションの待機時間 | 現在アクティブなトランザクションで発生した待機時間(秒)。 |
スレッドの状態の継続時間 | クエリの経過時間。 |
ロックされたトランザクション行 | 現在アクティブなトランザクションによってロックされている行の数。 |
変更されたトランザクション行 | 現在アクティブなトランザクションによって変更された行の数。 |
データベース | この接続が実行されているデータベースの名前。 |
ユーザー名 | データベースに接続しているユーザーの名前。 |
クライアント アドレス | ユーザーがデータベースに接続しているクライアントの IP アドレス。 |
アクション | トランザクションを終了するためのリンクが含まれています。 |
表示内容は 60 秒ごとに自動的に更新されます。
接続を終了する
アクティブなクエリで接続または長時間実行トランザクションを終了するには、Cloud SQL Enterprise Plus エディションを使用して、Cloud SQL Enterprise Plus エディションの Query Insights を有効にする必要があります。
長時間実行オペレーションの終了には時間がかかることがあります。
クエリまたはトランザクションを終了するには、次の手順を実施します。
- [最も実行時間の長いトランザクション] の表でクエリを選択します。
- [アクション] 列で [接続を終了] をクリックします。
- [接続を終了] ウィンドウで、[確認] をクリックします。
データベース リクエストはすぐに返され、終了はバックグラウンドで実行されます。
終了を開始すると、ページが更新されます。終了に失敗した場合、エラー メッセージや通知は返されません。クエリは [アクティブなクエリ] リストに引き続き表示されます。終了が成功すると、クエリはリストに表示されなくなります。終了時にロールバックが必要な場合、[トランザクションの状態] 列に「ロールバック」と表示されます。これは、終了がまだ進行中であることを意味します。