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テンプレートには、 |
手順
DASコンソールにログインします。
左側のナビゲーションウィンドウで、クエリのガバナンスをクリックします。
クエリのガバナンスページで、クエリガバナンスの結果を確認します。
時間、リージョン、およびデータベースエンジンを指定し、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テンプレートには、
SHOW
、CREATE
、XA
、COMMIT
、ROLLBACK
、SELECT 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 操作 | 説明 |
SQLテンプレートに1つ以上のタグを追加します。 | |
実行に失敗したSQLテンプレートを照会します。 | |
SQLテンプレートで失敗したSQL文を照会します。 | |
クエリガバナンス機能によって提供される提案をクエリして、SQLテンプレートを最適化します。 | |
クエリガバナンス機能によって追加されたタグのリストをクエリして、データベースインスタンスのクエリを遅くします。 | |
クエリガバナンス機能のトレンドデータを照会します。 | |
クエリ管理データに基づいて、最もパフォーマンスの高いデータベースインスタンスと最もパフォーマンスの悪いデータベースインスタンスに関する情報を照会します。 | |
クエリガバナンスデータに基づいてSQLテンプレートに関する情報を照会します。 | |
SQLテンプレートのタグを照会します。 | |
クエリガバナンス機能の共有URLを照会します。 |