このページでは、データベースでアクティブなクエリをモニタリングしてトラブルシューティングする方法について説明します。これらのクエリをモニタリングすることで、システムのレイテンシが発生している原因と 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
-
カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。
アクティブ クエリを有効にする
Cloud SQL Enterprise エディション インスタンスに対してアクティブなクエリを有効にするには、次の操作を行います。
-
Google Cloud コンソールで、Cloud SQL の [インスタンス] ページに移動します。
- インスタンスの [概要] ページを開くには、インスタンス名をクリックします。
- [構成] タイルで、[構成の編集] をクリックします。
- [インスタンスのカスタマイズ] で [Query Insights] を開きます。
- [Query Insights を有効にする] が有効になっていることを確認します。
- [アクティブ クエリ分析] を選択します。
- [保存] をクリックします。
Cloud SQL Enterprise Plus エディション インスタンスに対してアクティブなクエリを有効にするには、次の操作を行います。
-
Google Cloud コンソールで、Cloud SQL の [インスタンス] ページに移動します。
- インスタンスの [概要] ページを開くには、インスタンス名をクリックします。
- [構成] タイルで、[構成の編集] をクリックします。
- [インスタンスのカスタマイズ] で [Query Insights] を開きます。
- [Query Insights を有効にする] が有効になっていることを確認します。
- [Enterprise Plus の機能を有効にする] を選択します。
- [アクティブ クエリ分析] を選択します。
- [保存] をクリックします。
アクティブなクエリでセッションまたは長時間実行トランザクションを終了するには、Cloud SQL Enterprise Plus エディションの Query Insights を使用する必要があります。
アクティブ クエリを無効にする
Cloud SQL Enterprise エディションまたは Cloud SQL Enterprise Plus エディションのインスタンスでアクティブなクエリを無効にするには、次の操作を行います。
-
Google Cloud コンソールで、Cloud SQL の [インスタンス] ページに移動します。
- インスタンスの [概要] ページを開くには、インスタンス名をクリックします。
- [構成] タイルで、[構成の編集] をクリックします。
- [インスタンスのカスタマイズ] で [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 | 接続の固有識別子またはスレッド ID。 |
クエリ | SQL クエリテキスト。 |
ステータス | 接続のステータス。 |
セッション継続期間 | 最後に実行されたセッションの継続時間。 |
トランザクションの実行時間 | アクティブなトランザクションの実行時間。 |
クエリの実行時間 | そのトランザクションで最後に実行されたクエリの継続時間。 |
待機イベントタイプ | 発生している待機イベントの待機イベントタイプ。 |
待機イベント | 発生中の待機イベント。 |
データベース | この接続が実行されているデータベースの名前。 |
アプリケーション名 | この接続が実行されているアプリケーションの名前。 |
ユーザー名 | データベースに接続しているユーザーの名前。 |
クライアント アドレス | クエリを送信したクライアントの特定の IP アドレス。 |
アクション | トランザクションを終了するためのリンクが含まれています。 |
表示内容は 60 秒ごとに自動的に更新されます。
プロセスを終了する
アクティブなクエリでプロセスまたは長時間実行トランザクションを終了するには、Cloud SQL Enterprise Plus エディションを使用して、[アクティブ クエリ分析] と Cloud SQL Enterprise Plus エディションの Query Insights の両方を有効にする必要があります。
長時間実行オペレーションの終了には時間がかかることがあります。
クエリまたはトランザクションを終了するには、次の手順を実施します。
- [最も実行時間の長いトランザクション] の表でクエリを選択します。
- [アクション] 列で [接続を終了] をクリックします。
- [接続を終了] ウィンドウで、[確認] をクリックします。
システムがクエリまたはトランザクションを正常に終了すると、成功メッセージが表示されます。システムは必要に応じて、ロールバックも実行します。
ブロックされたアクティブ クエリ
特定のアクティブ クエリがブロックされている場合や、予想よりもはるかに長く実行されている場合、そのアクティブ クエリは他の依存クエリをブロックする可能性があります。
Cloud SQL では、特定の長時間実行クエリまたはブロックされたアクティブ クエリを終了できます。
ブロックされたアクティブ クエリの分析を有効にする
デフォルトでは、 Google Cloud コンソールには、ブロックされているアクティブなクエリは表示されません。ブロックされたアクティブなクエリを分析するには、まずインスタンスで Cloud SQL Enterprise Plus エディションとアクティブなクエリの両方を有効にします。
ブロックされたアクティブ クエリの分析を有効にするには、次の操作を行います。
コンソール
-
Google Cloud コンソールで、Cloud SQL の [インスタンス] ページに移動します。
- インスタンスの [概要] ページを開くには、インスタンス名をクリックします。
- [編集] をクリックします。
- [Query Insights] を開きます。
- [Enterprise Plus の機能を有効にする] と [アクティブ クエリ分析] の両方を選択します。両方の設定が必要です。
- [ブロックされたクエリの分析] を選択します。
- [保存] をクリックします。
ブロックされたアクティブなクエリを特定して終了する
次の手順では、他のクエリをブロックしている可能性のある特定のアクティブ クエリを特定して終了する方法について説明します。
コンソール
-
Google Cloud コンソールで、Cloud SQL の [インスタンス] ページに移動します。
- インスタンスの [概要] ページを開くには、インスタンス名をクリックします。
- SQL ナビゲーション メニューで [Query Insights] をクリックします。
- [アクティブなクエリ] タブをクリックします。
アクティブなクエリがまだ実行されていない場合は、Cloud SQL Studio に移動して、調査するクエリを実行します。
- [最も実行時間の長いトランザクション] セクションに移動します。実行時間の長いアクティブなクエリを最大 50 個確認できます。
表示される各エントリには、次の情報が含まれます。
- プロセス ID: クエリのプロセス ID。
- 砂時計アイコン: このアイコンは、プロセスが別のクエリの完了を待機していることを示します。アイコンの横に数字が表示されている場合、その数字は、このプロセスの完了を待機している依存クエリの数を示します。
- ブロック記号アイコン: このアイコンは、プロセスが完了できず、他のクエリをブロックしている可能性があることを示します。
[展開] をクリックして、エントリを表示します。次のいずれかのアイコンが表示されます。
- クエリタイプ: 実行中のクエリのタイプ(
SELECT
、UPDATE
など)。 - ステータス: アクティブなクエリのステータス(
ACTIVE
など)。 - セッションの実行時間(秒): 現在のセッションの実行時間(秒)。
- トランザクションの実行時間(秒): 現在アクティブなトランザクションの実行時間(秒)。
- クエリの実行時間(秒): 現在アクティブなクエリの実行時間(秒)。
- 待機イベントのタイプ: クエリ実行中に現在発生している待機イベントのタイプ(Timeout や Lock など)。
- 待機イベント: クエリ実行中に現在発生している待機イベント。
- アクション: 接続を終了するなど、実行可能なアクション。
調査するプロセス ID をクリックして展開します。調査ツリーでは、基盤となるプロセスを最大 3 レベルまで展開できます。
- プロセス ID: クエリのプロセス ID。
- ブロックされている特定のクエリを特定し、[接続を終了] をクリックします。接続を終了したら、Cloud SQL Studio に移動して、アクティブなクエリを再度実行できます。