インデックス アドバイザーを使用する

このページでは、Cloud SQL for MySQL インデックス アドバイザーについて説明するとともに、インデックスに関する推奨事項を確認して適用する方法を説明します。

Cloud SQL for MySQL には、データベースで定期的に処理されるクエリを追跡するフルマネージド インデックス アドバイザーが用意されています。インデックス アドバイザーは、これらのクエリを定期的に分析して、クエリのパフォーマンスを改善できる新しいインデックスを推奨します。インデックス アドバイザーにより、システムとクエリのパフォーマンスの問題を検出し、修正できます。

インデックス アドバイザーの仕組み

インデックス アドバイザーは、次の処理を行うことでクエリ処理を改善します。

  • インデックスを作成する SQL コマンドを使用して、インデックスのセットを推奨します。
  • 推奨インデックスの評価に役立つデータ(推定ストレージ サイズ、インデックスがクエリに与える影響など)を提供します。
インデックス アドバイザーでは、データベース名、テーブル名、列名を含む CREATE INDEX コマンドが保存され、表示されます。追跡されるクエリは、すべて正規化されたクエリであり、リテラルはすべて削除されています。

インデックスに関する推奨事項は、保存時に暗号化されます。

Cloud SQL for MySQL では、データベース フラグを使用してインデックス アドバイザーを構成し、調整できます。詳細については、インデックス アドバイザーのフラグをご覧ください。

制限事項

Cloud SQL for MySQL インデックス アドバイザーには、次の制限事項があります。

  • インデックス アドバイザーは CREATE INDEX の推奨事項のみを提供します。
  • インデックス アドバイザーは、次の構成のインスタンスをサポートしていません。
    • Cloud SQL Enterprise エディションのインスタンス
    • 共有コア マシンタイプを使用するインスタンス

始める前に

インデックス アドバイザーの推奨事項を取得するには、Cloud SQL Enterprise Plus エディションを使用し、Cloud SQL インスタンスで Cloud SQL Enterprise Plus エディションの Query Insights を有効にする必要があります。

必要なロールと権限

インデックス アドバイザーの推奨事項を取得するために必要な権限を取得するには、Cloud SQL インスタンスをホストするプロジェクトに対する Cloud SQL 閲覧者 roles/cloudsql.viewer)IAM ロールを付与するよう管理者に依頼してください。ロールの付与については、プロジェクト、フォルダ、組織に対するアクセス権の管理をご覧ください。

この事前定義ロールには、インデックス アドバイザーの推奨事項を取得するために必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。

必要な権限

インデックス アドバイザーの推奨事項を取得するには、次の権限が必要です。

  • databaseinsights.recommendations.query
  • databaseinsights.resourceRecommendations.query

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

インデックス アドバイザーの推奨事項を有効にする

Cloud SQL Enterprise Plus エディションの Query Insights を有効にすると、インデックス アドバイザーの推奨事項が自動的に有効になります。

インデックス アドバイザーの推奨事項を無効にする

Cloud SQL Enterprise Plus エディションの Query Insights を無効にせずに、インデックス アドバイザーの推奨事項を無効にすることはできません。

Cloud SQL Enterprise Plus エディションのインデックス アドバイザーの推奨事項と Query Insights を無効にするには、Cloud SQL Enterprise Plus エディションで Query Insights を無効にするをご覧ください。

インデックス アドバイザーの推奨事項を表示する

Cloud SQL は、インデックス アドバイザーの分析を定期的に自動で実行します。インデックス アドバイザーの推奨事項を表示するには、Query Insights ダッシュボードを使用します。インデックス アドバイザーの推奨事項はテーブルとしてクエリを実行して表示できます。また、オンデマンド分析とレポートをいつでもリクエストできます。

Query Insights ダッシュボードで推奨事項を表示、フィルタリングする

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

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

  2. インスタンスの [概要] ページを開くには、インスタンス名をクリックします。
  3. [Query Insights] をクリックします。
  4. インデックス アドバイザーの推奨事項は、[最多のクエリとタグ] セクションの [推奨事項] 列に表示されます。
  5. 省略可: CREATE INDEX の推奨事項を含むクエリのみを表示するには、[推奨事項: インデックスの作成] のフィルタを追加します。

クエリの推奨事項を表示する

特定のクエリのインデックス推奨を表示する手順は次のとおりです。

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

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

  2. インスタンスの [概要] ページを開くには、インスタンス名をクリックします。
  3. [Query Insights] をクリックします。
  4. [上位のクエリとタグ] セクションで、[クエリ] をクリックします。
  5. クエリの推奨事項の詳細を取得するには、次のいずれかを行います。
    • クエリをクリックして、選択したクエリの推奨事項の詳細を確認します。これには以下の情報が含まれます。
      • パフォーマンスへの影響(高、中、低): 推奨されるすべてのインデックスが作成された後の推定クエリ速度。
      • 推奨事項: インデックスの推奨事項を作成します。
      • 影響を受けるテーブル: インデックスの作成時に影響を受けるテーブルの数。
      • 推定される必要な追加ストレージ サイズ: 推奨されるインデックスをすべて作成するために必要な推定ストレージ サイズ。
      • 影響を受けるクエリの数: インデックスの推奨事項の影響を受けるワークロードのクエリの合計数。インデックスは複数のクエリにメリットをもたらす場合があります。
    • 特定のクエリの [インデックスの作成] をクリックすると、クエリのパフォーマンスを改善するためのインデックスの作成に関する詳細な推奨事項を確認できます。

推奨事項をデータベース表形式として表示する

その結果は、mysql データベースにある次のテーブルから読み取ることができます。

  • mysql.cloudsql_db_advisor_recommended_indexes: 各データベースに対して推奨される新しいインデックスのリストです。これには、各インデックスに必要なストレージの推定値と、各インデックスの影響を受ける可能性のあるクエリの数も含まれます。

たとえば、インデックスに関する推奨事項の最新の分析結果をテーブル形式で見るには、次のクエリを実行します。

SELECT * FROM mysql.cloudsql_db_advisor_recommended_indexes;

推奨インデックスを作成する

推奨インデックスは、Query Insights ダッシュボードまたはデータベース表形式から作成できます。

Query Insights ダッシュボードを使用して推奨インデックスを作成する手順は次のとおりです。

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

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

  2. インスタンスの [概要] ページを開くには、インスタンス名をクリックします。
  3. [Query Insights] をクリックします。
  4. [データベースの負荷別の上位項目] テーブルで、[クエリ] をクリックします。
  5. 特定のクエリの [インデックスの作成] をクリックします。
  6. [すべての index コマンドをコピー] をクリックします。CREATE INDEX コマンドがクリップボードにコピーされます。
  7. コマンドラインでプライマリ インスタンスに接続します。
  8. 推奨されたインデックスを作成するには、クリップボードにコピーされたコマンドを実行します。以下はその例です。

    CREATE INDEX ON "public"."demo_order" ("customer_id");

mysql.cloudsql_db_advisor_recommended_indexes テーブルの各行の index 列には、その行で推奨されるインデックスを生成するための完全な MySQL CREATE INDEX DDL ステートメントが格納されています。

その行の推奨事項を適用するには、その DDL ステートメントを、提示されているとおりに実行してください。

たとえば、前のセクションで説明したクエリを使用して、手動で分析を実行した結果の出力が次のとおりであるとします。

                    index                   | estimated_storage_size_in_mb
--------------------------------------------+------------------------------
 CREATE INDEX ON "School"."Students"("age") |                            3
(1 row)

このレポートに含まれている推奨事項は 1 件だけで、School スキーマの Students テーブルの age 列に単一列インデックスを追加するというものです。このアドバイスを適用するには、このレポートで提示されている、次の DDL クエリを入力します。

CREATE INDEX ON "School"."Students"("age");

影響を受けるクエリを表示する

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

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

  2. インスタンスの [概要] ページを開くには、インスタンス名をクリックします。
  3. [Query Insights] をクリックします。
  4. [データベースの負荷別の上位項目] テーブルで、[クエリ] をクリックします。
  5. 特定のクエリの [インデックスの作成] をクリックします。
  6. [影響を受けるクエリを表示] をクリックします。
  7. クエリをクリックして、影響を受けるクエリの詳細を確認します。

インデックス アドバイザーを構成する

インデックス アドバイザーは、ほとんどのユースケースにデフォルト設定で対応できるように設計されていますが、ユーザーはさまざまなデータベース フラグを設定してその動作を微調整できます。

デフォルトでは、インデックス アドバイザーは 24 時間間隔で実行されます。この自動スケジュール時間を変更するには cloudsql_index_advisor_auto_advisor_schedule フラグを使用します。また、特定の日時にアドホック分析を実行するには cloudsql_index_advisor_run_at_timestamp フラグを使用します。詳細については、インデックス アドバイザーのフラグをご覧ください。

次のステップ