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

Database Autonomy Service:クエリガバナンス

最終更新日:Nov 13, 2024

Database Autonomy Service (DAS) は、クエリガバナンス機能を提供します。 毎日01:00:00に、システムは前日にデータベースインスタンスで実行されたすべての低速クエリを自動的に分析し、重大度レベルに基づいてSQLテンプレートにタグを追加します。 これにより、スロークエリを分類して最適化できます。 DASは、SQLテンプレートの最適化に関する提案も提供し、クエリガバナンスデータをエクスポートできます。

前提条件

  • 管理するデータベースインスタンスは、次のいずれかのタイプです。

    • ApsaraDB RDS for MySQL

    • PolarDB for MySQL

    • ApsaraDB MyBase for MySQL

    • ApsaraDB RDS for PostgreSQL

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

    説明

    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. DASコンソールにログインします。

  2. 左側のナビゲーションウィンドウで、クエリのガバナンスをクリックします。

  3. クエリのガバナンスページで、クエリガバナンスの結果を確認します。

    時間、リージョン、およびデータベースエンジンを指定し、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テンプレートを2つのカテゴリに分類します。最適化する必要のない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テンプレートに注意を払うことをお勧めします。 システムがスロークエリを毎日分析する前に、次の表に示すタグの1つを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テンプレートに関する情報を表示できます。

関連する API 操作

API 操作

説明

CreateQueryOptimizeTag

SQLテンプレートに1つ以上のタグを追加します。

GetQueryOptimizeExecErrorStats

実行に失敗したSQLテンプレートを照会します。

GetQueryOptimizeExecErrorSample

SQLテンプレートで失敗したSQL文を照会します。

GetQueryOptimizeSolution

クエリガバナンス機能によって提供される提案をクエリして、SQLテンプレートを最適化します。

GetQueryOptimizeRuleList

クエリガバナンス機能によって追加されたタグのリストをクエリして、データベースインスタンスのクエリを遅くします。

GetQueryOptimizeDataTrend

クエリガバナンス機能のトレンドデータを照会します。

GetQueryOptimizeDataTop

クエリ管理データに基づいて、最もパフォーマンスの高いデータベースインスタンスと最もパフォーマンスの悪いデータベースインスタンスに関する情報を照会します。

GetQueryOptimizeDataStats

クエリガバナンスデータに基づいてSQLテンプレートに関する情報を照会します。

GetQueryOptimizeTag

SQLテンプレートのタグを照会します。

GetQueryOptimizeShareUrl

クエリガバナンス機能の共有URLを照会します。