Query Insights を使用してクエリのパフォーマンスを向上させる

このページでは、Query Insights ダッシュボードを使用してパフォーマンスの問題を検出して分析する方法について説明します。

はじめに

Query Insights では、Cloud SQL データベースに対するクエリ パフォーマンスの問題を検出、診断、防止できます。直感的なモニタリングをサポートし、検出するだけでなくパフォーマンスの問題の根本原因の特定に役立つ診断情報を提供します。

Query Insights では、次の手順を行い、Cloud SQL クエリのパフォーマンスを向上させることができます。

Cloud SQL Enterprise Plus エディションのクエリ分析情報

Cloud SQL Enterprise Plus エディションを使用している場合は、クエリ分析情報の追加機能にアクセスして、高度なクエリ パフォーマンス診断を実行できます。Cloud SQL Enterprise Plus エディションの Query Insights では、Query Insights ダッシュボードの標準機能に加えて、次のことができます。

  • 最大 20 KB の長いクエリテキストをキャプチャする
  • 指標の保持期間を 30 日間延長する
  • インデックス アドバイザーからインデックスの推奨事項を取得する
  • アクティブなクエリでセッションを終了する

次の表は、Cloud SQL Enterprise エディションのクエリ分析情報と Cloud SQL Enterprise Plus エディションのクエリ分析情報の機能要件と機能を比較したものです。

比較領域 Cloud SQL Enterprise エディションの Query Insights Cloud SQL Enterprise Plus エディションのクエリ分析情報
サポートされているデータベース バージョン

次のインスタンスのすべてのバージョン:

  • SQL Server Web
  • SQL Server Standard
  • SQL Server Enterprise

Query Insights は SQL Server Express エディション インスタンスではサポートされていません

SQL Server Enterprise バージョン 2019 または 2022
サポートされているマシンタイプ すべてのマシンタイプでサポート 共有コア マシンタイプを使用するインスタンスではサポートされていません
サポートされるリージョン Cloud SQL のリージョンのロケーション Cloud SQL Enterprise Plus エディションのリージョン ロケーション
指標の保持期間 7 日 30 日
クエリの長さの上限 4,500 バイト 20 KB
インデックス アドバイザーの推奨事項 利用不可 利用可能
アクティブなクエリでセッションを終了する 利用不可 利用可能

Cloud SQL Enterprise Plus エディション インスタンスのプレビュー中に Cloud SQL Enterprise Plus エディションのクエリ分析情報を有効にするには、Cloud SQL Enterprise Plus エディションのクエリ分析情報を有効にするの手順に沿って操作します。

料金

クエリ分析情報の使用に追加料金はかかりません。また、Cloud SQL Enterprise Plus エディションのクエリ分析情報を有効にするための費用は発生しません。この機能はプレビュー版です。

ストレージ要件

Query Insights はインスタンスに指標データを保存するため、ストレージの自動増量の設定を有効にしておく必要があります。該当するストレージ料金が適用されます

始める前に

クエリ分析情報を使用する前に、次の手順を行います。

  1. 必要なロールと権限を追加する
  2. ストレージの自動増量を有効にするインスタンスで有効になっていることを確認します。

必要なロールと権限

クエリ分析情報を使用するには、必要な Identity and Access Management 権限を持つロールを付与するか、必要な権限を持つユーザー アカウントを指定する必要があります。

ロールの付与の詳細については、アクセスの管理をご覧ください。

Query Insights ダッシュボードで過去のクエリ実行データにアクセスするために必要な権限を取得するには、Cloud SQL インスタンスをホストするプロジェクトに対する次の IAM ロールを付与するよう管理者に依頼してください。

ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。

これらの事前定義ロールには、[クエリ分析情報] ダッシュボードで過去のクエリ実行データにアクセスするために必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。

必要な権限

Query Insights ダッシュボードで過去のクエリ実行データにアクセスするには、次の権限が必要です。

  • databaseinsights.aggregatedStats.query
  • databaseinsights.timeSeries.query

カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。

たとえば、Database Insights では、Database Insights 閲覧者roles/databaseinsights.viewer)の事前定義ロールを付与するよう管理者に依頼できます。次に、Cloud SQL で、次のいずれかの事前定義ロールを付与するよう管理者に依頼します。

ストレージの自動増量を有効にする

ストレージの自動増量を有効にするようにインスタンス設定が有効になっていることを確認します。

このインスタンス設定を以前に無効にした場合は、Query Insights を有効にする前にストレージの自動増量を再度有効にしてください。

Query Insights を有効にする

Cloud SQL ダッシュボードにアクセスできるユーザーは、Query Insights の指標にアクセスできます。インスタンスを更新する権限がある場合は、Query Insights を有効にできます。Cloud SQL インスタンスに必要な権限の一覧については、Cloud SQL プロジェクトのアクセス制御をご覧ください。これらの権限がなく、インスタンスでクエリ分析情報を有効にする場合は、管理者にお問い合わせください。

Console

インスタンスで Query Insights を有効にする

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

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

  2. インスタンスの [概要] ページを開くには、インスタンス名をクリックします。
  3. [構成] タイルで、[構成の編集] をクリックします。
  4. [インスタンスのカスタマイズ] セクションで、[クエリ分析情報] を開きます。
  5. [クエリ分析情報の有効化] チェックボックスをオンにします。
  6. 省略可。次のクエリ分析情報の追加機能のいずれかを選択します。
  7. クエリの長さをカスタマイズする

    デフォルト: 1024

    クエリ長の上限を 256 ~ 4,500 バイトの既定値に設定します。分析クエリの場合はより長いほうが便利ですが、必要なメモリ量が増えます。クエリ長を変更するには、インスタンスを再起動する必要があります。

  8. [保存] をクリックします。

複数のインスタンスで Query Insights を有効にする

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

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

  2. 任意の行にある [その他の操作] メニューをクリックします。
  3. [Query Insights を有効にする] を選択します。
  4. ダイアログで、[複数のインスタンスの Query Insights を有効にする] チェックボックスをオンにします。
  5. [有効にする] をクリックします。
  6. 続くダイアログで、Query Insights を有効にするインスタンスを選択します。
  7. [Query Insights を有効にする] をクリックします。

gcloud

gcloud を使用して Cloud SQL インスタンスのクエリ分析情報を有効にするには、INSTANCE_ID をインスタンスの ID に置き換えてから、次に示す --insights-config-query-insights-enabled フラグを指定して gcloud sql instances patch を実行します。

    gcloud sql instances patch INSTANCE_ID \
    --insights-config-query-insights-enabled
  

また、次のオプション フラグを 1 つ以上使用します。

  • --insights-config-query-string-length

    デフォルトのクエリ長の上限を 256 ~ 4,500 バイトに設定します。デフォルトのクエリ長は 1,024 バイトです。分析クエリの場合はより長いほうが便利ですが、必要なメモリ量が増えます。クエリ長を変更するには、インスタンスを再起動する必要があります。

次のように置き換えます。

gcloud sql instances patch INSTANCE_ID \
--insights-config-query-insights-enabled \
--insights-config-query-string-length=INSIGHTS_CONFIG_QUERY_STRING_LENGTH \
--tier=API_TIER_STRING \
--region=REGION
  

REST v1

REST API を使用して Cloud SQL インスタンスの Query Insights を有効にするには、insightsConfig 設定で instances.patch メソッドを呼び出します。

リクエストのデータを使用する前に、次のように置き換えます。

  • project-id: プロジェクト ID。
  • instance-id: インスタンス ID

HTTP メソッドと URL:

PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id

リクエストの本文(JSON):

{
  "settings" : { "insightsConfig" : { "queryInsightsEnabled" : true } }
}

リクエストを送信するには、次のいずれかのオプションを展開します。

次のような JSON レスポンスが返されます。

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2021-01-28T22:43:40.009Z",
  "operationType": "UPDATE",
  "name": "operation-id",
  "targetId": "instance-id",
  "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}

Terraform

Terraform を使用して Cloud SQL インスタンスのクエリ分析情報を有効にするには、query_insights_enabled フラグを true に設定します。

また、次のオプション フラグを 1 つ以上使用することもできます。

  • query_string_length: デフォルトは 1024 で、2564500 バイトの範囲の値に構成できます。
  • record_application_tags: クエリからアプリケーション タグを記録する場合は、値を true に設定します。
  • record_client_address: クライアント IP アドレスを記録する場合は、値を true に設定します。
  • query_plans_per_minute: デフォルトは 5 です。520 の値に構成できます。

次に例を示します。

Google Cloud プロジェクトで Terraform 構成を適用するには、次のセクションの手順を行います。

Cloud Shell を準備する

  1. Cloud Shell を起動します。
  2. Terraform 構成を適用するデフォルトの Google Cloud プロジェクトを設定します。

    このコマンドは、プロジェクトごとに 1 回だけ実行する必要があります。これは任意のディレクトリで実行できます。

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    Terraform 構成ファイルに明示的な値を設定すると、環境変数がオーバーライドされます。

ディレクトリを準備する

Terraform 構成ファイルには独自のディレクトリ(ルート モジュールとも呼ばれます)が必要です。

  1. Cloud Shell で、ディレクトリを作成し、そのディレクトリ内に新しいファイルを作成します。ファイルの拡張子は .tf にする必要があります(例: main.tf)。このチュートリアルでは、このファイルを main.tf とします。
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. チュートリアルを使用している場合は、各セクションまたはステップのサンプルコードをコピーできます。

    新しく作成した main.tf にサンプルコードをコピーします。

    必要に応じて、GitHub からコードをコピーします。Terraform スニペットがエンドツーエンドのソリューションの一部である場合は、この方法をおすすめします。

  3. 環境に適用するサンプル パラメータを確認し、変更します。
  4. 変更を保存します。
  5. Terraform を初期化します。これは、ディレクトリごとに 1 回だけ行う必要があります。
    terraform init

    必要に応じて、最新バージョンの Google プロバイダを使用する場合は、-upgrade オプションを使用します。

    terraform init -upgrade

変更を適用する

  1. 構成を確認して、Terraform が作成または更新するリソースが想定どおりであることを確認します。
    terraform plan

    必要に応じて構成を修正します。

  2. 次のコマンドを実行し、プロンプトで「yes」と入力して、Terraform 構成を適用します。
    terraform apply

    Terraform に「Apply complete!」というメッセージが表示されるまで待ちます。

  3. Google Cloud プロジェクトを開いて結果を表示します。 Google Cloud コンソールの UI でリソースに移動して、Terraform によって作成または更新されたことを確認します。

指標は、クエリの完了から数分以内に Query Insights で利用できるようになると想定されています。

Cloud SQL Enterprise Plus エディションでクエリ分析情報を有効にする

Cloud SQL インスタンスで Cloud SQL Enterprise Plus エディションの Query Insights を有効にするには、 Google Cloud コンソールを使用する必要があります。

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

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

  2. インスタンスの [概要] ページを開くには、インスタンス名をクリックします。
  3. [編集] をクリックします。
  4. [ストレージ] セクションで、[ストレージの自動増量を有効化] チェックボックスがオンになっていることを確認します。
  5. [インスタンスのカスタマイズ] セクションで、[クエリ分析情報] を開きます。
  6. [Enterprise Plus の機能を有効にする] チェックボックスをオンにします。
  7. Cloud SQL Enterprise Plus エディションでクエリ分析情報を有効にすると、次のフィールドを更新できます。

    • クエリの長さをカスタマイズする: クエリの長さの上限(バイト単位)を指定します。25620480 の数値を指定できます。指定された上限を超えるクエリ文字列は、表示時に切り捨てられます。クエリ長の上限を上げると、必要なメモリが増えます。デフォルト値は 10240 バイト(10 KB)です。

  8. [保存] をクリックします。

Query Insights ダッシュボードを表示する

Query Insights ダッシュボードには、選択された要素に基づいて、クエリ負荷が表示されます。クエリ負荷は、選択された時間範囲内のインスタンス内のすべてのクエリの合計作業量の測定値です。ダッシュボードには、クエリの負荷を確認するための一連のフィルタが用意されています。

Query Insights ダッシュボードを開くには、次の手順を行います。

  1. インスタンスの [概要] ページを開くには、インスタンス名をクリックします。
  2. 左側のナビゲーション パネルで [クエリ分析情報] タブを選択するか、[クエリ分析情報に移動すると、クエリとパフォーマンスに関する詳細情報を確認できます] リンクをクリックします。

Query Insights ダッシュボードが開きます。インスタンスに関する次の情報が表示されます。

Query Insights ダッシュボードに、データベースのプルダウン メニューが表示されています。プルダウン メニューの右側には、期間を設定するフィルタがあります。

  • データベース: 特定のデータベースまたはすべてのデータベースのクエリ負荷をフィルタします。
  • 期間: 1 時間、6 時間、1 日、7 日、30 日、カスタム範囲など、時間範囲でクエリ負荷をフィルタします。
  • データベース負荷グラフ: フィルタされたデータに基づき、クエリ負荷のグラフを表示します。
  • [クエリ] と [データベース]: 選択したクエリまたは選択したデータベースのクエリ負荷をフィルタします。データベース負荷のフィルタリングをご覧ください。

すべてのクエリのデータベース負荷を表示する

データベースのクエリ負荷は、選択したデータベースで実行されたクエリの作業量の経時的な測定結果(CPU 秒単位)です。実行中の各クエリは、CPU リソース、IO リソース、またはロックリソースを使用または待機しています。データベースのクエリ負荷は、実時間に対する、指定の時間枠内で完了したすべてのクエリで要した時間の比率です。

トップレベルの Query Insights ダッシュボードには、[実行時間別のデータベースの負荷] グラフが表示されます。ダッシュボードのプルダウン メニューでは、すべてのデータベースまたは特定のデータベースのグラフをフィルタできます。

選択したデータベースで実行されたすべてのクエリが表示されます。

グラフの色付きの線は、実行時間ごとのデータベースごとの負荷を示しています。グラフを確認し、フィルタ オプションを使用して以下の質問を検討してください。

  • クエリ負荷は高いですか?グラフは時間の経過にともなって急上昇または上昇していますか?負荷が高くない場合は、クエリに問題はありません。
  • 高い負荷がどのくらい続いていますか?その値はいまだけ高くなっていますか。それとも、長い間、高くなっていますか?範囲セレクタを使用して、さまざまな期間を選択して、問題が発生した期間を探します。ズームインすると、クエリ負荷の急増が観測される時間枠が拡大表示されます。ズームアウトすると、最大 1 週間のタイムラインが表示されます。
  • どのデータベースで負荷が発生していますか?[データベース] プルダウン メニューからデータベースを選択して、負荷が最も高いデータベースを特定します。

データベース負荷のフィルタリング

データベースの負荷をクエリでフィルタできます。Cloud SQL Enterprise Plus エディションの Query Insights を使用している場合は、データベース負荷グラフをカスタマイズして、次のいずれかのディメンションを使用して表示データを分類できます。

  • すべてのクエリ

  • データベース

データベース負荷グラフをカスタマイズするには、[実行時間別のデータベース負荷] プルダウンからディメンションを選択します。

データベースの負荷に最も貢献している項目を表示する

データベースの負荷に最も影響を与えている項目を表示するには、[データベースの負荷別の上位項目] テーブルを使用します。[データベースの負荷別の上位項目] テーブルには、[実行時間別のデータベースの負荷] グラフのプルダウンで選択した期間と項目の上位項目が表示されます。期間またはディメンションを変更すると、別のディメンションまたは期間の上位の貢献要因を表示できます。

[データ負荷別の上位項目] テーブルで、次のタブを選択できます。

タブ 説明
Queries このテーブルには、合計実行時間で並べ替えられた上位の正規化されたクエリが表示されます。クエリごとに、列に表示されるデータは次のように一覧表示されます。
  • 平均実行時間(ミリ秒): クエリの平均実行時間。
  • 合計実行時間(ミリ秒): 特定のクエリでかかった合計実行時間。
  • 返された平均行数: クエリで取得された行数の平均。
  • 呼び出された回数: アプリケーションによってクエリが呼び出された回数。
データベース この表には、選択した期間中に実行されたすべてのクエリで負荷の増加に貢献した上位のデータベースのリストが表示されます。
  • データベースでの平均時間(ミリ秒): 特定のデータベースでクエリが費やした平均時間。
  • データベースでの合計時間(ミリ秒): 特定のデータベースでクエリが費やした合計実行時間。

クエリでフィルタリングする

[クエリ] テーブルでは、クエリ負荷が最も大きいクエリの概要を確認できます。このテーブルには、Query Insights ダッシュボードで選択された時間枠とオプションに対応する、正規化されたすべてのクエリが表示されます。選択した時間枠内の合計実行時間でクエリが並べ替えられます。

テーブルを並べ替えるには、列見出しを選択します。次の表に、プロパティを示します。

  • クエリ: 正規化されたクエリ文字列。デフォルトでは、Query Insights にはクエリ文字列の 1, 024 文字のみが表示されます。
  • データベース: クエリが実行されたデータベース。
  • 平均実行時間(ミリ秒): クエリの平均実行時間です。
  • 合計実行時間(ミリ秒): クエリの実行にかかった合計時間。
  • 呼び出された回数: アプリケーションがクエリを呼び出した回数。
  • 返された平均行数: クエリに対して返された行数の平均。

Query Insights は、正規化されたクエリのみを保存し、表示します。

Query Insights を無効にする

Console

Google Cloud コンソールを使用して Cloud SQL インスタンスの Query Insights を無効にするには、次の操作を行います。

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

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

  2. インスタンスの [概要] ページを開くには、インスタンス名をクリックします。
  3. [構成] タイルで、[構成の編集] をクリックします。
  4. [構成オプション] セクションで [クエリ分析情報] を展開します。
  5. [クエリ分析情報の有効化] チェックボックスをオフにします。
  6. [保存] をクリックします。

gcloud

gcloud を使用して Cloud SQL インスタンスのクエリ分析情報を無効にするには、INSTANCE_ID をインスタンスの ID に置き換えてから、次に示す --no-insights-config-query-insights-enabled フラグを指定して gcloud sql instances patch を実行します。

gcloud sql instances patch INSTANCE_ID 
--no-insights-config-query-insights-enabled

REST

REST API を使用して Cloud SQL インスタンスの Query Insights を無効にするには、次のように queryInsightsEnabledfalse に設定して instances.patch メソッドを呼び出します。

リクエストのデータを使用する前に、次のように置き換えます。

  • project-id: プロジェクト ID。
  • instance-id: インスタンス ID

HTTP メソッドと URL:

PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id

リクエストの本文(JSON):

{
  "settings" : { "insightsConfig" : { "queryInsightsEnabled" : false } }
}

リクエストを送信するには、次のいずれかのオプションを展開します。

次のような JSON レスポンスが返されます。

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2021-01-28T22:43:40.009Z",
  "operationType": "UPDATE",
  "name": "operation-id",
  "targetId": "instance-id",
  "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}

Cloud SQL Enterprise Plus エディションのクエリ分析情報を無効にする

Cloud SQL Enterprise Plus エディションの Query Insights を無効にするには、次の操作を行います。

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

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

  2. インスタンスの [概要] ページを開くには、インスタンス名をクリックします。
  3. [編集] をクリックします。
  4. [インスタンスのカスタマイズ] セクションで、[クエリ分析情報] を開きます。
  5. [Enterprise Plus の機能を有効にする] チェックボックスをオフにします。
  6. [保存] をクリックします。

次のステップ