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
制限事項
クエリガバナンス機能は、トランザクションの翌日 (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 を選択します。
表示されるページで、クエリのガバナンス タブをクリックします。
クエリのガバナンス タブで、クエリガバナンスの結果を表示します。
クエリガバナンスの結果の概要: このセクションでは、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テンプレートには、
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文をできるだけ早く処理することをお勧めします。 システムが低速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テンプレートに関する情報を表示できます。