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

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

最終更新日:Mar 22, 2025

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. 左側のナビゲーションウィンドウで、[インテリジェント O&M センター] > クエリのガバナンス を選択します。

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

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

    • [概要]: このセクションには、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 クエリ

    普通

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

    CROSS_DB

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

    普通

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

    SUBQUERY

    サブクエリが含まれている

    普通

    サブクエリ用の SQL 文を含む SQL テンプレート。クエリをより効率的にするために、SQL テンプレートを書き直し、JOIN 演算子を使用することをお勧めします。

    DEEP_PAGING

    ディープページング

    致命的

    深いページングメソッドを実装するために LIMIT 演算子が使用されている SQL テンプレート。SQL テンプレートを書き直し、LIMIT 演算子の代わりに JOIN 演算子を使用することをお勧めします。

    WITHOUT_PREDICATE

    述語なし

    致命的

    ✔️

    述語を含まない SQL テンプレート。ビジネスで全表スキャンが必要かどうかを確認します。ビジネスで全表スキャンが不要な場合は、SQL テンプレートを書き直します。

    NULL_COMPARE

    NULL 一致エラー

    致命的

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

    COUNT_NOT_STAR

    無効な COUNT 構文

    致命的

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

    LARGE_ROWS_EXAMINED

    過剰なスキャン行数

    普通

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

    説明

    SQL 文でより具体的なフィルター条件を使用することをお勧めします。

    LARGE_ROWS_SENT

    過剰な戻り行数

    普通

    平均して 5,000 行以上のデータが返されるクエリで使用される SQL テンプレート。SQL テンプレートを変更して、戻り行数を減らすことをお勧めします。

    NO_ADVICE

    提案なし

    普通

    提案はありません。

    PERIOD_SQL

    定期的

    普通

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

    最適化する必要がある SQL テンプレートにすぐに注意することをお勧めします。システムが毎日スロークエリを分析する前に、次の表に示すタグのいずれかを SQL テンプレートに手動で追加できます。これにより、最適化する必要がある SQL テンプレートの数を減らすことができます。

    ID

    名前

    重大度レベル

    説明

    USER_IGNORE

    最適化する必要なし

    普通

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

    DAS_IMPORTANT

    優先度の高い SQL

    普通

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

    DAS_NOT_IMPORTANT

    優先度の低い SQL

    普通

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

    DAS_IN_PLAN

    後で最適化

    普通

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

  • データをエクスポートします。

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

      説明

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

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

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

  • データを共有します。

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

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

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

関連 API 操作

操作

説明

CreateQueryOptimizeTag

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

GetQueryOptimizeExecErrorStats

実行に失敗した SQL テンプレートをクエリします。

GetQueryOptimizeExecErrorSample

SQL テンプレートで失敗した SQL 文をクエリします。

GetQueryOptimizeSolution

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

GetQueryOptimizeRuleList

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

GetQueryOptimizeDataTrend

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

GetQueryOptimizeDataTop

クエリガバナンスデータに基づいて、最高パフォーマンスおよび最低パフォーマンスのデータベースインスタンスに関する情報をクエリします。

GetQueryOptimizeDataStats

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

GetQueryOptimizeTag

SQL テンプレートのタグをクエリします。

GetQueryOptimizeShareUrl

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