すべてのプロダクト
Search
ドキュメントセンター

ApsaraDB RDS:ApsaraDB RDS for MySQLインスタンスのクエリガバナンス機能の使用

最終更新日:Dec 10, 2024

Database Autonomy Service (DAS) は、クエリガバナンス機能を提供します。 DASは、前日にApsaraDB RDS for MySQLインスタンスの特定のSQL文によって引き起こされたすべての低速クエリを自動的に分析し、毎日01:00に重大度レベルに基づいてSQL文にタグを追加します。 このようにして、SQL文を分類できます。 DASは、SQL文を最適化する方法についての提案も提供し、クエリガバナンスデータをエクスポートできます。 このトピックでは、RDSインスタンスにクエリガバナンス機能を使用する方法について説明します。

前提条件

  • RDSインスタンスは、次のMySQLバージョンとRDSエディションのいずれかを実行します。

    • RDS High-availability Edition、RDS Enterprise EditionRDS Cluster EditionのMySQL 8.0

    • RDS High-availability Edition、RDS Enterprise EditionRDS Cluster EditionのMySQL 5.7

    • RDS High-availability EditionのMySQL 5.6

    • RDS High-availability EditionのMySQL 5.5

  • データベースインスタンスは、中国本土、中国 (香港) リージョン、またはシンガポールリージョンのリージョンにデプロイされています。

    説明

    2023年4月1日から、中国 (香港) およびシンガポールのリージョンにあるデータベースインスタンスで、クエリガバナンス機能がサポートされます。

制限事項

  • クエリガバナンス機能は、トランザクションの翌日 (T + 1) にオフラインデータを分析することによって実装されます。 たとえば、最適化不要 タグをSQLテンプレートに追加した場合、そのSQLテンプレートは、翌日に最適化する必要があるSQLテンプレートから削除されます。

  • システムによって追加されたタグは変更または削除できません。

  • DASは、データベースインスタンスごとに、最も頻繁に実行される上位200の低速クエリのみをカウントおよび分析します。 これは、データベースインスタンスの低速SQLテンプレートの最大数が200であることを示します。

用語

用語

説明

最適化可能な SQL

クエリが遅く、最適化が必要なSQLテンプレート。

最適化する必要のないSQLテンプレート

クエリが遅くなり、DASが自動的にDAS を無視タグを追加するSQLテンプレート、または最適化不要タグを追加するSQLテンプレート。

DAS を無視

クエリが遅くなり、DASが自動的に最適化不要タグを追加するSQLテンプレート。 これらのSQLテンプレートには、SHOWCREATEXACOMMITROLLBACKSELECT SLEEP、またはEXPLAINステートメントで始まるSQLテンプレートが含まれます。

手順

  1. [インスタンス] ページに移動します。 上部のナビゲーションバーで、RDS インスタンスが存在するリージョンを選択します。 次に、RDSインスタンスを見つけ、インスタンスのIDをクリックします。

  2. 左側のナビゲーションウィンドウで、自律型サービス (CloudDBA) > 低速 SQL を選択します。

  3. 表示されるページで、クエリのガバナンスタブをクリックします。

  4. クエリのガバナンスタブで、クエリガバナンスの結果を表示します。

    時間、リージョン、およびデータベースエンジンを指定し、1つ以上のインスタンスIDを入力して、次のセクションに表示される指定されたデータベースインスタンスのクエリガバナンス結果を表示できます。

    • 概要: このセクションでは、SQLテンプレートが分類され、タグがSQLテンプレートに追加された後のクエリガバナンスの結果を表示します。

      説明

      SQL 実行の失敗回数を表示する場合は、DAS Enterprise Editionを購入する必要があります。

    • トレンドチャート: このセクションでは、特定の時間範囲でのクエリガバナンス結果の変化の傾向を表示します。

    • 上位ランキング: このセクションには、最もパフォーマンスの高いインスタンス最もパフォーマンスの低いインスタンス のグラフが表示されます。

      • 最悪のパフォーマンスのインスタンス: データベースインスタンスは、各インスタンスで実行される低速クエリの数に基づいて降順に表示されます。 これにより、最も多くのスロークエリが実行されるインスタンスを特定できます。

      • ベストパフォーマンスインスタンス: データベースインスタンスは、各インスタンスで実行される低速クエリの数の変化に基づいて昇順で表示されます。 負の値は、前日に実行されたスロークエリの数と比較して、実行されるスロークエリの数が少ないことを示します。 正の値は、前日に実行されたスロークエリの数と比較して、より多くのスロークエリが実行されることを示します。 これにより、SQL最適化が最も効果的なインスタンスを特定できます。

      最も多くの低速クエリが実行されるインスタンスと、SQL最適化が最も効果的なインスタンスに注意することをお勧めします。

    • 最適化対象の SQL: フィルター条件を指定して、管理するSQL文をフィルター処理できます。

      説明

      データベース名、SQLキーワード、ルールタグ、データベースアカウントのユーザー名のフィルター条件を指定できます。 4つのフィルタ条件は、AND演算子を用いて評価される。

      • 複数のデータベース名はコンマ (,) で区切ります。 データベース名は、OR演算子を使用して評価されます。

      • 複数のSQLキーワードをスペースで区切ります。 SQLキーワードは、AND演算子を使用して評価されます。

      • 複数のデータベースアカウントのユーザー名をコンマ (,) で区切ります。 ユーザー名は、OR演算子を使用して評価されます。

      • 複数のルールタグを選択できます。 選択されたルールは、OR演算子を使用して評価されます。

      • サンプルSQL文を見つけ、操作 列の 提案 をクリックして、クエリガバナンスに関する提案を表示できます。

      • サンプルのSQL文を見つけ、操作 列の タグの追加 をクリックして、SQL文にタグを追加します。 タグの詳細については、このトピックの「タグの説明」をご参照ください。

        複数のサンプルSQL文を選択して、一度にこれらのSQL文にタグを追加することもできます。

      • サンプルSQL文を見つけて、操作 列の [サンプル] をクリックすると、SQL文の低速クエリログが表示されます。

      • サンプルSQL文を見つけて、操作 列の 推移 をクリックすると、SQL文の低速クエリログ分析の詳細が表示されます。 低速クエリを分析および管理する方法の詳細については、「低速クエリログ分析」をご参照ください。

      ビジネス要件に基づいて最適化するSQLテンプレートのデータをエクスポートして共有できます。 詳細については、このトピックのベストプラクティスセクションを参照してください。

    • 失敗した SQL: フィルター条件を指定して、表示するSQL文をフィルター処理できます。

      説明
      • 失敗した SQLを表示する場合は、DAS Enterprise Editionを購入する必要があります。

      • データベース名とSQLキーワードを指定して、SQL文をフィルター処理できます。 フィルタ条件は、AND演算子を使用して評価されます。

        • 複数のデータベース名はコンマ (,) で区切ります。 データベース名は、OR演算子を使用して評価されます。

        • 複数のSQLキーワードをスペースで区切ります。 SQLキーワードは、AND演算子を使用して評価されます。

      サンプルSQL文を見つけて、操作 列の [サンプル] をクリックすると、SQL文の詳細が表示されます。

ベストプラクティス

タグを使用して最適化が必要なSQL文を識別する

クエリガバナンス機能では、SQLステートメントが低速なクエリを次のカテゴリに分類します。最適化を必要とするSQLステートメントと最適化を必要としないSQLステートメントです。 タグを使用してSQL文を検索し、タグで指定された重大度に基づいてSQL文を最適化できます。 次の表に、DASでサポートされているタグを示します。

ID

名前

重大度レベル

すぐに注意が必要

説明

NEW_SQL

新しいスローSQL

クリティカル

✔️

過去7日以内にクエリが遅くなったSQLテンプレート。

DAS_IGNORE

無視

正常

DASが自動的に 最適化不要 タグを追加するSQLテンプレート。 これらのSQLテンプレートには、SHOWCREATEXACOMMITROLLBACKSELECT SLEEP、またはEXPLAINステートメントで始まるSQLテンプレートが含まれます。

FUZZY_LIKE

LIKEクエリ

正常

LIKE演算子を使用してファジーマッチングを実装するSQLテンプレート。 インデックスは、LIKE演算子を含むクエリでは使用できません。

HAS_EXPR

含まれる式

正常

計算式を含むSQLテンプレート。 インデックスは関連する列では使用できません。

LARGE_IN_LIST

大規模リストクエリ

正常

in演算子に200を超える要素が指定されているSQLテンプレート。 そのようなSQLテンプレートは、プログラムによって自動的に生成され得る。 インデックスは関連する列では使用できません。

SELECT_STAR

完全列クエリ

正常

SELECT句で1つ以上のフィールドが指定されているが、条件が指定されていないSQLテンプレート。 条件を指定しないと、不要なデータを照会するためにリソースが無駄になります。 これにより、クエリのパフォーマンスが低下します。

INDEX_ADVISOR

インデックスの提案

正常

✔️

インデックスが付けられていないテーブルからデータをクエリするために使用されるSQLテンプレート。 SQLクエリを高速化するために、インデックスを作成して使用することを推奨します。

COMPLEX_JOIN

複雑なJOINクエリ

正常

JOIN演算子を使用して3つ以上のテーブルを結合するSQLテンプレート。 JOIN演算子を使用して3つ以上のテーブルを結合することはできません。 結合するテーブルの指定されたフィールドのデータ型は同じである必要があります。 複数のテーブルを結合する前に、テーブルでクエリするフィールドのインデックスを作成してください。

CROSS_DB

クロスデータベースクエリ

正常

異なるデータベース内のデータを照会するために使用されるSQLテンプレート。 データベースまたはテーブルを元のデータベースインスタンスから別のデータベースインスタンスに移行すると、データベース間クエリが失敗する場合があります。

サブクエリ

サブクエリが含まれる

正常

サブクエリ用のSQL文を含むSQLテンプレート。 クエリをより効率的にするには、SQLテンプレートを書き換え、JOIN演算子を使用することを推奨します。

DEEP_PAGING

深いページング

クリティカル

LIMIT演算子を使用してディープページング方式を実装するSQLテンプレート。 SQLテンプレートを書き直し、LIMIT演算子の代わりにJOIN演算子を使用することを推奨します。

WITHOUT_PREDICATE

述語なし

クリティカル

✔️

述語を含まないSQLテンプレート。 ビジネスにフルテーブルスキャンが必要かどうかを確認します。 ビジネスでテーブル全体をスキャンする必要がない場合は、SQLテンプレートを書き換えます。

NULL_COMPARE

ヌル一致エラー

クリティカル

ISNULL() 関数を使用してNULL値をチェックするSQLテンプレート。 いずれかの値がNULLの場合はNULLが返されるため、ISNULL() 関数を使用してNULL値を見つけることはできません。

COUNT_NOT_STAR

無効なCOUNT構文

クリティカル

無効なCOUNT構文を含むSQLテンプレート。 COUNT(*) を使用して、データレコードの数を照会します。 COUNT (列名) またはCOUNT (定数) 構文は使用しないでください。 COUNT(*) は、行数を照会するためにSQL92で定義されている標準構文です。 COUNT(*) 構文は、NULL値を含むデータレコードの数をカウントし、すべてのタイプのデータベースで実行できます。 COUNT (列名) 構文はNULL値をカウントしません。

LARGE_ROWS_EXAMINED

過剰なスキャン行

正常

平均50,000行を超えるスキャンに使用されるSQLテンプレート。 行数が多いほど、データベースリソースの消費量が多くなります。 これにより、SQLクエリの実行が遅くなり、他のSQLクエリに影響します。

説明

SQL文では、より具体的なフィルター条件を使用することを推奨します。

LARGE_ROWS_SENT

過剰に返される行

正常

平均5,000行を超えるデータが返されるクエリで使用されるSQLテンプレート。 SQLテンプレートを変更して、返される行の数を減らすことを推奨します。

NO_ADVICE

提案なし

正常

提案は提供されない。

PERIOD_SQL

Periodic

正常

特定の時点で毎日実行されるSQLテンプレート。

最適化が必要なSQL文をできるだけ早く処理することをお勧めします。 システムが低速SQLクエリを分析する前に、最適化を必要としないSQL文にタグを追加できます。 これにより、最適化が必要なSQL文の数を減らすことができます。

ID

名前

重大度レベル

説明

USER_IGNORE

最適化する必要はありません

正常

このタグをSQLテンプレートに追加すると、そのSQLテンプレートは、翌日に最適化する必要があるSQLテンプレートにはカウントされません。

DAS_重要

優先度の高いSQL

正常

このタグを優先度の高いSQLテンプレートに追加します。

DAS_NOT_重要

低優先度SQL

正常

優先度の低いSQLテンプレートにこのタグを追加します。

DAS_IN_PLAN

後で最適化

正常

このタグを、後で最適化するSQLテンプレートに追加します。

データのエクスポート

  • SQL の詳細 セクションの右上隅にある [エクスポート] をクリックして、フィルタリングされたSQLテンプレートのデータをエクスポートします。

    説明

    エクスポートされたデータは3日間ダウンロードできます。

  • さまざまな条件を指定して、SQLテンプレートをフィルタリングできます。 たとえば、データベースまたはルールタグに基づいてSQLテンプレートをフィルタリングし、ダウンロードタスクを作成してから、データベースまたはルールタグに基づいてSQLテンプレートを最適化するために異なる所有者を割り当てることができます。

  • 複数のSQLテンプレートを選択し、選択したSQLテンプレートのデータをエクスポートすることもできます。

データの共有

SQLテンプレートをフィルタリングし、対応するSQLテンプレートの所有者と共有できます。 次のいずれかの方法を使用してデータを共有できます。

  • SQLテンプレートを選択し、セクションの下部にある 一括共有 をクリックします。 システムはURLを生成します。 URLの宛先ページに、選択したSQLテンプレートに関する情報が表示されます。 DASの権限が付与されている場合は、ページにアクセスして、選択したSQLテンプレートに関する情報を表示できます。

  • SQLテンプレートをフィルターする条件を指定し、エクスポート の右側にある 共有 をクリックします。 システムはURLを生成します。 URLの宛先ページに、フィルタリングされたSQLテンプレートに関する情報が表示されます。 DASの権限が付与されている場合は、ページにアクセスして、フィルタリングされたすべてのSQLテンプレートに関する情報を表示できます。