Database Autonomy Service (DAS) は、オフラインデータ分析を用いて、前日分のすべてのご利用のインスタンスにおけるスロー SQL クエリを毎日 01:00 に分析し、自動的にタグ付けします。DAS はスロー SQL クエリを自動的に分類し、最適化の優先順位を付けて、ガバナンス提案およびデータエクスポートを提供します。
前提条件
-
対象のデータベースインスタンスは PolarDB for MySQL です。
-
この機能は、中国本土、中国 (香港)、およびシンガポールリージョンのデータベースインスタンスをサポートしています。
説明2023 年 4 月 1 日以降、クエリガバナンス機能は中国 (香港) リージョンおよびシンガポールリージョンのデータベースインスタンスをサポートしています。
制限事項
-
クエリガバナンスは T+1 オフライン分析を使用します。最適化不要 として SQL クエリにタグを付けた場合、最適化可能な SQL の件数変化は翌日に反映されます。
-
DAS による事前定義済みの SQL タグは無効化できません。
-
各データベースインスタンスについて、DAS は実行回数上位 200 件のスロー SQL クエリのみを分析します。そのため、各インスタンスの 低速 SQL テンプレートの数 の最大数は 200 です。
基本概念
|
用語 |
説明 |
|
最適化可能な SQL |
すべてのスロー SQL ステートメントから、最適化不要な SQL ステートメント を除外した残りのステートメントが 最適化可能な SQL です。 |
|
最適化不要な SQL |
DAS が自動的に DAS を無視 とタグ付けしたクエリ、およびユーザーが手動で 最適化不要 とタグ付けしたクエリを含みます。 |
|
DAS を無視 |
DAS が自動的に 最適化不要 とタグ付けする SQL ステートメントで、 |
操作手順
にログインします。DASコンソール.
左側のナビゲーションウィンドウで、インスタンスモニター.
表示されるページで、管理するデータベースインスタンスを見つけ、インスタンスIDをクリックします。 インスタンス詳細ページが表示されます。
-
左側メニューで、 を選択します。
-
クエリのガバナンス ページで、分析結果を確認します。
-
[クエリガバナンス結果の概要]:自動的にタグ付けおよび分類されたクエリの統計データを確認できます。
説明DAS は、DAS Enterprise Edition が有効になっているインスタンスに対してのみ SQL 実行の失敗回数 をカウントします。
-
[クエリガバナンスの傾向]:選択した時間範囲におけるクエリガバナンス結果の傾向を確認できます。
-
[上位ランキング]:[最もパフォーマンスの高いインスタンス] と [最もパフォーマンスの低いインスタンス] のリストを確認できます。
-
パフォーマンス最悪インスタンス:各データベースインスタンスのスロー SQL クエリ実行数を確認できます。
-
パフォーマンス最良インスタンス:各データベースインスタンスのスロー SQL クエリ実行数の変化を確認できます。負数はスロー SQL クエリ実行数の減少を示し、最適化が成功したことを意味します。正数は増加を示します。
DAS は、[最適化可能な SQL] のトップランキングリストに注目することを推奨します。
-
-
[最適化対象の SQL]:フィルター条件を設定して、最適化したい SQL クエリを特定できます。
説明DB 名、SQL キーワード、ルールタグ、およびデータベースのユーザー名で SQL クエリをフィルターできます。これらの条件は、論理 AND 演算子で結合されます。
-
複数の DB 名を指定するには、コンマ (,) で区切ります。それらの間の論理演算子は OR です。
-
複数の SQL キーワードを指定するには、スペースで区切ります。それらの間の論理演算子は AND です。
-
複数のデータベースユーザー名を指定するには、コンマ (,) で区切ります。それらの間の論理演算子は OR です。
-
複数のルールタグを選択できます。ルールタグ間の論理演算子は OR です。
-
特定の SQL サンプルの 操作 列で、提案 をクリックして詳細な最適化の提案を表示します。
-
特定の SQL サンプルの 操作 列で、タグの追加 をクリックして SQL クエリに手動でタグを付けます。タグの意味の詳細については、「手動で追加された SQL タグ」をご参照ください。
一度に複数の SQL クエリにタグを追加することもできます。
-
特定の SQL サンプルの 操作 列で、サンプル をクリックして、SQL クエリのスローログサンプルの詳細を表示します。
-
特定の SQL サンプルの 操作 列で、推移 をクリックして、SQL クエリのスローログ分析の詳細を表示します。スローログ分析の詳細については、「スローログ」をご参照ください。
最適化が必要な SQL クエリのデータをエクスポートして共有できます。詳細については、「ベストプラクティス」をご参照ください。
-
-
[失敗した SQL]:フィルター条件を設定して、表示したい SQL クエリを特定できます。
説明-
DAS は、DAS Enterprise Edition が有効になっているインスタンスの 失敗した SQL テンプレートのみをカウントします。
-
DB 名と SQL キーワードで SQL クエリをフィルターできます。これらの条件は、論理 AND 演算子で結合されます。
-
複数の DB 名を指定するには、コンマ (,) で区切ります。それらの間の論理演算子は OR です。
-
複数の SQL キーワードを指定するには、スペースで区切ります。それらの間の論理演算子は AND です。
-
特定の SQL サンプルの 操作 列で、サンプル をクリックして SQL サンプルの詳細を表示します。
-
-
ベストプラクティス
-
タグを使用して、SQL クエリを最適化する必要があるかどうかを判断します:
クエリガバナンスの中核となるロジックは、すべての [スロー SQL クエリ] を [最適化不要] と [最適化可能な SQL] の 2 つのカテゴリに分類することです。次の SQL タグを使用してクエリをすばやくフィルタリングし、優先度に基づいて最適化できます。
ID
タグ名
レベル
推奨
説明
NEW_SQL
新規スロー SQL
重大
✔️
過去 7 日間に出現していないスロー SQL クエリ。
DAS_IGNORE
DAS 無視
注意
➖
DAS が自動的に最適化不要とタグ付けするクエリ。例:
show、create、xa、commit、rollback、select sleep、またはexplainで始まる SQL ステートメント。FUZZY_LIKE
あいまい LIKE クエリ
注意
➖
like句を使用してあいまい一致を行うため、インデックスを利用できません。HAS_EXPR
式を含む
注意
➖
クエリに式が含まれています。計算に関与するカラムではインデックスを利用できません。
LARGE_IN_LIST
大きな IN リスト
注意
➖
IN句に 200 個を超える要素が含まれており、プログラムによって生成された可能性があります。関連するカラムではインデックスを利用できません。SELECT_STAR
SELECT 全カラム
注意
➖
SELECTを使用する際は、必要なフィールドのみを指定し、不要なカラムを返すことによるパフォーマンスの問題やリソースの浪費を回避してください。INDEX_ADVISOR
インデックス提案
注意
✔️
SQL 実行を高速化するためにインデックスを作成する提案。
COMPLEX_JOIN
複雑な JOIN
注意
➖
3 つ以上のテーブルを
joinしないでください。joinするフィールドはデータの型が同一である必要があります。複数テーブル結合の場合、結合フィールドにインデックスが設定されていることを確認してください。CROSS_DB
クロスデータベースクエリ
注意
➖
インスタンス間でデータベースおよびテーブルを移行する際、クロスデータベースクエリが利用できなくなる可能性があります。
SUBQUERY
サブクエリを含む
注意
➖
クエリにサブクエリが含まれています。
JOINを使用して書き換えることで、パフォーマンスを向上させることを検討してください。DEEP_PAGING
ディープページング
重大
➖
クエリで
LIMIT句を使用してディープページングを行っています。JOIN を使用してクエリを書き換えることを推奨します。WITHOUT_PREDICATE
述語なし
重大
✔️
ステートメントに述語が含まれていません。全表スキャンが発生していないか確認してください。
NULL_COMPARE
NULL 比較エラー
重大
➖
IS NULLまたはIS NOT NULLを使用してNULL値をチェックしてください。値と NULL の直接比較は常に NULL になります。COUNT_NOT_STAR
COUNT 構文の不適切な使用
重大
➖
COUNT(*)を使用し、count(column_name) やcount(constant) は使用しないでください。count(*)は SQL92 で定義された行数カウントの標準構文であり、データベースに依存せず、NULL値または非NULL値の影響を受けません。count(column_name) は、カラムがNULL値を持つ行をカウントしません。LARGE_ROWS_EXAMINED
過剰な行スキャン
注意
➖
クエリが平均で 50,000 行以上をスキャンしています。過剰なスキャンはリソースを多く消費し、クエリを遅延させ、データベースパフォーマンス全体に悪影響を及ぼす可能性があります。
説明より絞り込んだフィルター条件の使用を検討してください。
LARGE_ROWS_SENT
過剰な行返却
注意
➖
クエリが平均で 5,000 行以上を返しています。返却行数を減らすことを検討してください。
NO_ADVICE
提案なし
注意
➖
分析による提案がありません。
PERIOD_SQL
定期実行 SQL
注意
➖
毎日決まった時刻に実行されます。
DAS は、[最適化可能な SQL] に注目することを推奨します。以下の表で説明するように、クエリに [最適化不要] のタグを付けることで、[最適化可能な SQL] カテゴリのクエリ数を継続的に減らすことができます。次の SQL タグは手動で追加できます。
ID
タグ名
レベル
説明
USER_IGNORE
最適化不要
注意
このタグを追加すると、DAS は翌日の最適化対象 SQL の統計から該当クエリを除外します。
DAS_IMPORTANT
重要 SQL
注意
SQL クエリを重要とマークします。
DAS_NOT_IMPORTANT
重要でない SQL
注意
SQL クエリを重要でないとマークします。
DAS_IN_PLAN
最適化予定
注意
SQL クエリを最適化予定としてマークします。
-
データのエクスポート:
-
[エクスポートタスクの作成] をクリックして、現在 SQL の詳細 タブに表示されているすべてのデータをダウンロードできます。
説明エクスポートされたデータは 3 日間ダウンロード可能です。
-
インスタンスやルールなどの異なるフィルター条件でダウンロードタスクを作成し、最適化を担当するオーナーに割り当てることができます。
-
複数の SQL レコードを選択して、それらの項目のみをエクスポートすることも可能です。
-
-
データの共有:
フィルター済みのスロー SQL クエリをチームメンバーと共有する方法は以下の 2 通りあります。
-
複数の SQL レコードを選択して、一括共有 をクリックします。システムが短縮リンクを生成します。DAS コンソールへのアクセス権限を持つユーザーがそのリンクをクリックすると、選択した SQL レコードのみが表示されます。
-
あるいは、エクスポート の横にある 共有 をクリックして、現在のビュー(すべてのフィルターを含む)をキャプチャする URL を生成します。DAS コンソールへのアクセス権限を持つユーザーは、URL を開くことでフィルターを再設定することなく同じデータを確認できます。
-