Database Autonomy Service (DAS) は、RDS MySQL 向けのクエリガバナンス機能を提供します。この機能は、オフラインデータ分析を使用して、前日のすべての低速 SQL クエリを分析し、自動的にタグ付けします。このプロセスは毎日午前 1 時に実行され、クエリを分類して最適化の優先順位を付けるのに役立ちます。
前提条件
インスタンスは、次のいずれかのエディションである必要があります。
RDS MySQL 8.4 High-availability Edition または Cluster Edition
RDS MySQL 8.0 High-availability Edition、3ノード Enterprise Edition、または Cluster Edition
RDS MySQL 5.7 High-availability Edition、3ノード Enterprise Edition、または Cluster Edition
RDS MySQL 5.6 High-availability Edition
RDS MySQL 5.5 High-availability Edition
この機能は現在、中国本土、香港 (中国)、およびシンガポールリージョンのデータベースインスタンスをサポートしています。
説明香港 (中国) およびシンガポールリージョンのデータベースインスタンスのサポートは、2023 年 4 月 1 日に追加されました。
制限事項
クエリガバナンスは T+1 オフライン分析を使用するため、クエリに 最適化不要 のタグを付けた場合、最適化可能な SQL の件数の変更は翌日に反映されます。
DAS で事前定義された SQL タグを無効にすることはできません。
データベースインスタンスごとに、DAS は実行回数順の上位 200 件の低速 SQL クエリのみを分析します。したがって、低速 SQL テンプレートの数 の最大数は 200 です。
用語
用語 | 説明 |
最適化可能な SQL | スロークエリを引き起こし、最適化する必要がある SQL テンプレート。 |
最適化する必要のない SQL テンプレート | スロークエリを引き起こし、DAS が DAS を無視 タグを自動的に追加する SQL テンプレート、またはユーザーが 最適化不要 タグを追加する SQL テンプレート。 |
DAS を無視 | スロークエリを引き起こし、DAS が自動的に 最適化不要 タグを追加する SQL テンプレート。これらの SQL テンプレートには、 |
操作手順
- RDSインスタンスにアクセスし、上部のリージョンを選択し、対象のRDSインスタンスのIDをクリックします。
左側のナビゲーションペインで、自律型サービス > 低速 SQL を選択します。
クエリのガバナンス タブをクリックします。
クエリのガバナンス ページで、分析結果を表示します。
時間、リージョン、データベースエンジンを指定し、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 タグを使用して、優先度に基づいてこれらのクエリをすばやくフィルタリングして管理できます。
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 クエリ | 普通 | ➖ | 3 つ以上のテーブルを結合するために JOIN オペレーターが使用されている SQL テンプレート。 |
CROSS_DB | クロスデータベースクエリ | 普通 | ➖ | 異なるデータベースのデータをクエリするために使用される SQL テンプレート。データベースまたはテーブルが元のデータベースインスタンスから別のデータベースインスタンスに移行されると、クロスデータベースクエリは失敗する可能性があります。 |
SUBQUERY | サブクエリが含まれている | 普通 | ➖ | サブクエリ用の SQL 文を含む SQL テンプレート。クエリをより効率的にするために、SQL テンプレートを書き直し、 |
DEEP_PAGING | ディープページング | 致命的 | ➖ | 深いページングメソッドを実装するために |
WITHOUT_PREDICATE | 述語なし | 致命的 | ✔️ | 述語を含まない SQL テンプレート。ビジネスで全表スキャンが必要かどうかを確認します。ビジネスで全表スキャンが不要な場合は、SQL テンプレートを書き直します。 |
NULL_COMPARE | NULL 一致エラー | 致命的 | ➖ |
|
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 | 定期的 | 普通 | ➖ | 毎日特定の時間に実行される SQL テンプレート。 |
DAS では、最適化可能な SQL に注目することをお勧めします。以下の表を使用して SQL ステートメントに 最適化不要 としてタグを付けることで、最適化可能な SQL リストのステートメント数を継続的に減らすことができます。以下の SQL タグは手動でのタグ付けに対応しています。
ID | 名前 | 重大度レベル | 説明 |
USER_IGNORE | 最適化する必要なし | 普通 | このタグを SQL テンプレートに追加すると、翌日には最適化する必要がある SQL テンプレートとしてカウントされなくなります。 |
DAS_IMPORTANT | 優先度の高い SQL | 普通 | 優先度の高い SQL テンプレートにこのタグを追加します。 |
DAS_NOT_IMPORTANT | 優先度の低い SQL | 普通 | 優先度の低い SQL テンプレートにこのタグを追加します。 |
DAS_IN_PLAN | 後で最適化 | 普通 | 後で最適化する SQL テンプレートにこのタグを追加します。 |
データのエクスポート
[エクスポートタスクの作成] をクリックして、SQL の詳細 ビューに現在表示されているすべてのデータをダウンロードできます。
説明エクスポートタスクのデータは 3 日間保持されます。
インスタンスやルールなど、異なるフィルタを使用して個別のダウンロードタスクを作成できます。これらのタスクは、最適化のために異なるチームメンバーに割り当てることができます。
特定の SQL レコードを選択することもできます。エクスポートタスクには、選択したレコードのみが含まれます。
データの共有
フィルタリングされた低速 SQL クエリを担当チームメンバーとすばやく共有できるように、DAS は 2 つの共有オプションを提供します。
複数の SQL レコードを選択して 一括共有 をクリックできます。システムによって短縮リンクが生成されます。生成されたリンクには、DAS コンソールの権限を持つユーザーにのみ、選択した SQL レコードが表示されます。
共有 の横にある エクスポート ボタンをクリックすることもできます。システムによって短縮リンクが生成され、DAS コンソールの権限を持つユーザーがこのリンクを開くと、同じフィルターが適用された状態で、現在ページに表示されているすべての詳細が表示されます。