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

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

最終更新日:Jan 18, 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

制限事項

  • クエリガバナンス機能は、トランザクションの翌日 (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. クエリのガバナンス タブで、クエリガバナンスの結果を表示します。

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

      説明

      RDSインスタンスにDAS Professional Editionが有効になっている場合にのみ、SQL 実行の失敗回数 パラメーターを使用して統計を収集します。

    • クエリガバナンスの傾向: このセクションでは、特定の時間範囲におけるクエリガバナンスの結果の傾向を表示します。

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

      • 最悪のパフォーマンスのインスタンス: RDSインスタンスでクエリが遅くなるSQL文の実行数を示します。

      • パフォーマンスの高いインスタンス: RDSインスタンスでクエリが遅くなるSQL文の実行数の変化を示します。 負の値は, SQL文の実行回数の減少を示します。 正の値は, SQL文の実行回数の増加を示します。

    最も多くのスロークエリが実行されるインスタンスと、SQL文の最適化が必要なインスタンスをできるだけ早く処理することをお勧めします。

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

      説明

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

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

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

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

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

      • 必要なSQLサンプルの 操作 列で 提案 をクリックすると、クエリガバナンスに関する提案を表示できます。

      • 必要なSQLサンプルの 操作 列で タグの追加 をクリックして、タグを追加できます。 タグの詳細については、「タグテーブル」をご参照ください。

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

      • 必要なSQLサンプルの 操作 列で サンプル をクリックすると、ログの詳細が表示されます。

      • 必要なSQLサンプルの 操作 列で 推移 をクリックすると、分析の詳細が表示されます。 低速クエリを分析および管理する方法の詳細については、「ApsaraDB RDS For MySQLインスタンスの低速クエリログ分析機能の使用」をご参照ください。

      最適化が必要なSQL文に関する情報をエクスポートして共有できます。 詳細については、「ベストプラクティス」をご参照ください。

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

      説明
      • RDSインスタンスにDAS Professional Editionが有効になっている場合にのみ、失敗した SQLパラメーターを使用して統計を収集します。

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

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

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

      必要な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テンプレートに関する情報を表示できます。