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 Edition、RDS Cluster EditionのMySQL 8.0
RDS High-availability Edition、RDS Enterprise Edition、RDS 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テンプレートには、 |
手順
[インスタンス] ページに移動します。 上部のナビゲーションバーで、RDS インスタンスが存在するリージョンを選択します。 次に、RDSインスタンスを見つけ、インスタンスのIDをクリックします。
左側のナビゲーションウィンドウで、自律型サービス (CloudDBA) > 低速 SQL を選択します。
表示されるページで、クエリのガバナンスタブをクリックします。
クエリのガバナンスタブで、クエリガバナンスの結果を表示します。
時間、リージョン、およびデータベースエンジンを指定し、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テンプレートには、 |
FUZZY_LIKE | LIKEクエリ | 正常 | ➖ |
|
HAS_EXPR | 含まれる式 | 正常 | ➖ | 計算式を含むSQLテンプレート。 インデックスは関連する列では使用できません。 |
LARGE_IN_LIST | 大規模リストクエリ | 正常 | ➖ |
|
SELECT_STAR | 完全列クエリ | 正常 | ➖ |
|
INDEX_ADVISOR | インデックスの提案 | 正常 | ✔️ | インデックスが付けられていないテーブルからデータをクエリするために使用されるSQLテンプレート。 SQLクエリを高速化するために、インデックスを作成して使用することを推奨します。 |
COMPLEX_JOIN | 複雑なJOINクエリ | 正常 | ➖ | JOIN演算子を使用して3つ以上のテーブルを結合するSQLテンプレート。 |
CROSS_DB | クロスデータベースクエリ | 正常 | ➖ | 異なるデータベース内のデータを照会するために使用されるSQLテンプレート。 データベースまたはテーブルを元のデータベースインスタンスから別のデータベースインスタンスに移行すると、データベース間クエリが失敗する場合があります。 |
サブクエリ | サブクエリが含まれる | 正常 | ➖ | サブクエリ用のSQL文を含むSQLテンプレート。 クエリをより効率的にするには、SQLテンプレートを書き換え、 |
DEEP_PAGING | 深いページング | クリティカル | ➖ |
|
WITHOUT_PREDICATE | 述語なし | クリティカル | ✔️ | 述語を含まないSQLテンプレート。 ビジネスにフルテーブルスキャンが必要かどうかを確認します。 ビジネスでテーブル全体をスキャンする必要がない場合は、SQLテンプレートを書き換えます。 |
NULL_COMPARE | ヌル一致エラー | クリティカル | ➖ |
|
COUNT_NOT_STAR | 無効なCOUNT構文 | クリティカル | ➖ | 無効なCOUNT構文を含むSQLテンプレート。 |
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テンプレートに関する情報を表示できます。