Database Autonomy Service (DAS) は、オフラインデータ分析を用いて、前日分のすべてのご利用のインスタンスにおけるスロー SQL クエリを毎日 01:00 に分析し、自動的にタグ付けします。DAS はスロー SQL クエリを自動的に分類し、最適化の優先順位を付けて、ガバナンス提案およびデータエクスポートを提供します。
前提条件
-
ご利用のデータベースインスタンスが以下のいずれかであること:
-
ApsaraDB RDS for MySQL
-
PolarDB for MySQL
-
MyBase MySQL
-
ApsaraDB RDS for PostgreSQL
-
-
この機能は、中国本土、中国 (香港)、およびシンガポールリージョンのデータベースインスタンスをサポートしています。
説明2023 年 4 月 1 日以降、クエリガバナンス機能は中国 (香港) リージョンおよびシンガポールリージョンのデータベースインスタンスをサポートしています。
-
O&M サービスが有効になっていること。
ビデオチュートリアル
制限事項
-
クエリガバナンスは T+1 オフライン分析を使用します。最適化不要 として SQL クエリにタグを付けた場合、最適化可能な SQL の件数変化は翌日に反映されます。
-
DAS による事前定義済みの SQL タグは無効化できません。
-
各データベースインスタンスについて、DAS は実行回数上位 200 件のスロー SQL クエリのみを分析します。そのため、各インスタンスの 低速 SQL テンプレートの数 の最大数は 200 です。
基本概念
|
用語 |
説明 |
|
最適化可能な SQL |
すべてのスロー SQL ステートメントから、最適化不要な SQL ステートメント を除外した残りのステートメントが 最適化可能な SQL です。 |
|
最適化不要な SQL |
DAS が自動的に DAS を無視 とタグ付けしたクエリ、およびユーザーが手動で 最適化不要 とタグ付けしたクエリを含みます。 |
|
DAS を無視 |
DAS が自動的に 最適化不要 とタグ付けする SQL ステートメントで、 |
操作手順
- DAS コンソール にログインします。
-
左側のナビゲーションウィンドウで、インテリジェント O&M センター > クエリのガバナンス を選択します。
-
クエリのガバナンス ページで、クエリガバナンスの結果を確認します。
期間、リージョン、エンジンでフィルターをかけるか、インスタンス ID を入力して特定のインスタンスの結果を表示できます。
-
クエリガバナンス概要:システムが SQL テンプレートにタグ付けおよび分類を行った後の結果を表示します。
説明DAS は、DAS Enterprise Edition が有効になっているインスタンスでのみ、SQL 実行の失敗回数 をカウントします。
-
クエリガバナンストレンド:選択した期間におけるクエリガバナンス結果の推移を表示します。
-
上位ランキング:最もパフォーマンスの高いインスタンス および 最もパフォーマンスの低いインスタンス のリストを表示します。
-
最もパフォーマンスの低いインスタンス:スロークエリの実行回数を降順に並べて、問題が最も深刻なインスタンスを特定します。
-
パフォーマンス上位インスタンス:スロークエリの実行回数の変化量を昇順に並べます。負の値はスロークエリの実行回数が減少(良好な最適化)していることを示し、正の値は増加していることを示します。
DAS では、最適化可能な SQL のランキングに注目することを推奨します。
-
-
最適化対象の SQL:フィルターを設定して、ガバナンスが必要な SQL ステートメントを特定します。
説明これらのフィルターは AND 条件で組み合わされます。
-
複数のデータベース名はカンマ (,) で区切り、OR 条件で組み合わせます。
-
複数の SQL キーワードはスペースで区切り、AND 条件で組み合わせます。
-
複数のデータベースユーザー名はカンマ (,) で区切り、OR 条件で組み合わせます。
-
複数のルールタグを選択すると、OR 条件で組み合わされます。
-
対象の SQL サンプルの 操作 列で、提案 をクリックして、詳細なガバナンス提案を表示します。
-
対象の SQL サンプルの 操作 列で、タグの追加 をクリックして、SQL ステートメントに手動でタグを付けます。タグの詳細については、「手動タグ付け」をご参照ください。
複数の SQL ステートメントを一度に選択してタグ付けすることもできます。
-
対象の SQL サンプルの 操作 列で、サンプル をクリックして、その SQL ステートメントのスロークエリログサンプルの詳細を表示します。
-
対象の SQL サンプルの 操作 列で、推移 をクリックして、その SQL ステートメントのスロークエリログ分析の詳細を表示します。スロークエリログ分析の詳細については、「スロークエリログ」をご参照ください。
必要に応じて、最適化対象 SQL ステートメントのデータをエクスポートおよび共有できます。詳細については、「ベストプラクティス」をご参照ください。
-
-
失敗した SQL:フィルターを設定して、表示したい SQL ステートメントを特定します。
説明-
DAS は、DAS Enterprise Edition が有効になっているインスタンスでのみ、失敗した SQL をカウントします。
-
データベース名および SQL キーワードでフィルターをかけられます。この 2 つのフィルターは AND 条件で組み合わされます。
-
複数のデータベース名はカンマ (,) で区切り、OR 条件で組み合わせます。
-
複数の SQL キーワードはスペースで区切り、AND 条件で組み合わせます。
-
対象の SQL サンプルの 操作 列で、サンプル をクリックして、その SQL ステートメントのサンプル詳細を表示します。
-
-
ベストプラクティス
-
SQL クエリの最適化要否を判断するためにタグを使用します。
ガバナンス機能は、全体のスロー SQL リストからステートメントを次の 2 つのカテゴリに分類します:最適化不要 および 最適化可能な SQL。以下の 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
注意
➖
毎日決まった時刻に実行されます。
最適化可能な 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 を開くことでフィルターを再設定することなく同じデータを確認できます。
-
API リファレンス
|
API |
説明 |
|
対象の SQL クエリにタグを追加します。 |
|
|
失敗した SQL 実行のテンプレートデータを取得します。 |
|
|
失敗した SQL 実行のサンプルデータを取得します。 |
|
|
クエリに対するガバナンス提案を取得します。 |
|
|
クエリガバナンスのルール一覧を取得します。 |
|
|
クエリガバナンスのトレンドデータを取得します。 |
|
|
パフォーマンス上位インスタンスおよび最もパフォーマンスの低いインスタンスのリストデータを取得します。 |
|
|
クエリガバナンスのテンプレートデータを取得します。 |
|
|
指定された SQL クエリのタグを取得します。 |
|
|
クエリガバナンス結果の共有 URL を取得します。 |