Database Autonomy Service (DAS) は、ApsaraDB RDS for PostgreSQL 向けのクエリガバナンス機能を提供します。この機能は、オフラインデータ分析を使用して、毎日 01:00 に前日の遅い SQL 文を分析します。DAS はこれらの文に自動的にタグを追加し、ガバナンスのために分類し、優先順位を付けるのに役立ちます。この機能は、最適化の提案も提供し、データをエクスポートすることもできます。
前提条件
ApsaraDB RDS for PostgreSQL インスタンスが High-availability Edition インスタンスであること。
データベースインスタンスが中国本土のリージョン、中国 (香港) リージョン、またはシンガポールリージョンにデプロイされていること。
説明2023 年 4 月 1 日から、クエリガバナンス機能は、中国 (香港) およびシンガポールリージョンにあるデータベースインスタンスでサポートされます。
制限事項
クエリガバナンス機能は、トランザクションの翌日 (T+1) にオフラインデータを分析することによって実装されます。たとえば、SQL テンプレートに 最適化不要 タグを追加すると、その SQL テンプレートは翌日に最適化が必要な SQL テンプレートから削除されます。
システムによって追加されたタグは変更または削除できません。
各データベースインスタンスについて、DAS は最も頻繁に実行される上位 200 件のスロークエリのみをカウントして分析します。これは、データベースインスタンスのスロー SQL テンプレートの最大数が 200 であることを示します。
用語
用語 | 説明 |
最適化可能な SQL | スロークエリを引き起こし、最適化が必要な SQL テンプレート。 |
最適化が不要な SQL テンプレート | スロークエリを引き起こし、DAS が自動的に DAS を無視 タグを追加するか、ユーザーが 最適化不要 タグを追加する SQL テンプレート。 |
DAS を無視 | スロークエリを引き起こし、DAS が自動的に 最適化不要 タグを追加する SQL テンプレート。これらの SQL テンプレートには、 |
手順
[インスタンス] ページに移動します。上部のナビゲーションバーで、RDS インスタンスが存在するリージョンを選択します。次に、RDS インスタンスを見つけて、インスタンスの ID をクリックします。
左側のナビゲーションウィンドウで、自律型サービス > 低速 SQL > クエリのガバナンス を選択します。
クエリのガバナンス ページで、クエリガバナンスの結果を表示します。
クエリガバナンスの概要: システムが SQL 文を分類し、タグ付けした後の結果を表示します。
説明SQL 実行の失敗回数 の統計は、DAS Enterprise Edition が有効になっているインスタンスに対してのみ収集されます。
クエリガバナンスの傾向: 選択した時間範囲におけるクエリガバナンス結果の傾向を表示します。
上位ランキング: 最もパフォーマンスの高いインスタンス と 最もパフォーマンスの低いインスタンス のチャートを表示します。
最もパフォーマンスの低いインスタンス: データベースインスタンスでの遅い SQL 文の実行数を示します。
最もパフォーマンスの高いインスタンス: 遅い SQL 文の実行数の変化を示します。負の数は減少と最適化の成功を示し、正の数は増加を示します。
DAS は、最適化可能な SQL の最もパフォーマンスの高いチャートと最もパフォーマンスの低いチャートに注目することを推奨します。
最適化対象の SQL: フィルター条件を設定して、ガバナンスが必要な SQL 文を検索できます。
説明DB 名、SQL キーワード、ルールタグ、およびデータベースのユーザー名で文をフィルターできます。これらの条件は論理 AND で結合されます。
複数の DB 名を指定するには、コンマ (,) で区切ります。これにより、論理 OR が作成されます。
複数の SQL キーワードを指定するには、スペースで区切ります。これにより、論理 AND が作成されます。
複数のデータベースユーザー名を指定するには、コンマ (,) で区切ります。これにより、論理 OR が作成されます。
複数のルールタグを選択できます。これにより、論理 OR が作成されます。
対象の SQL 文の 操作 列にある 提案 をクリックして、詳細なガバナンスの提案を表示します。
対象の SQL 文の 操作 列にある タグの追加 をクリックして、手動でタグを追加します。詳細については、「手動タグ」をご参照ください。
複数の SQL 文を選択し、バッチでタグ付けすることもできます。
対象の SQL 文の 操作 列にある [サンプル] をクリックして、スロークエリログサンプルの詳細を表示します。
対象の SQL 文の 操作 列にある 推移 をクリックして、遅い SQL 文の分析詳細を表示します。スロークエリログ分析の詳細については、「スロー SQL」をご参照ください。
最適化が必要な SQL 文のデータをエクスポートして共有できます。詳細については、「ベストプラクティス」をご参照ください。
失敗した SQL: フィルター条件を設定して、表示したい失敗した SQL 文を検索できます。
説明失敗した SQL の統計は、DAS Enterprise Edition が有効になっているインスタンスに対してのみ収集されます。
DB 名と SQL キーワードで文をフィルターできます。これらの条件は論理 AND で結合されます。
複数の DB 名を指定するには、コンマ (,) で区切ります。これにより、論理 OR が作成されます。
複数の SQL キーワードを指定するには、スペースで区切ります。これにより、論理 AND が作成されます。
対象の SQL 文の 操作 列にある [サンプル] をクリックして、サンプルの詳細を表示します。
ベストプラクティス
タグを使用して、最適化が必要な SQL 文を特定します。
クエリガバナンスのコアロジックは、[すべての遅い SQL 文] を 最適化不要 と 最適化可能な SQL の 2 つのカテゴリに分けることです。SQL タグを使用して、文をすばやくフィルターし、最適化の優先順位を付けることができます。
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 テンプレート。データベースまたはテーブルが元のデータベースインスタンスから別のデータベースインスタンスに移行された後、クロスデータベースクエリが失敗する可能性があります。
SUBQUERY
含まれるサブクエリ
法線
➖
サブクエリの SQL 文を含む SQL テンプレート。SQL テンプレートを再書き込みし、
JOINオペレーターを使用してクエリをより効率的にすることをお勧めします。DEEP_PAGING
ディープページング
クリティカル
➖
LIMITオペレーターがディープページングメソッドの実装に使用される SQL テンプレート。SQL テンプレートを再書き込みし、LIMIT オペレーターの代わりに JOIN オペレーターを使用することをお勧めします。WITHOUT_PREDICATE
述語なし
クリティカル
✔️
述語を含まない SQL テンプレート。ビジネスで全表スキャンが必要かどうかを確認してください。ビジネスで全表スキャンが必要ない場合は、SQL テンプレートを再書き込みしてください。
NULL_COMPARE
Null マッチエラー
クリティカル
➖
ISNULL()関数がNULL値のチェックに使用される SQL テンプレート。値の 1 つが 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
周期的
法線
➖
毎日特定の時点で実行される SQL テンプレート。
DAS は、最適化可能な SQL に注目することを推奨します。次の表のタグを使用して、SQL 文に手動で 最適化不要 のタグを付け、最適化可能な SQL 文の数を継続的に減らします。
ID
名前
重要度レベル
説明
USER_IGNORE
最適化不要
法線
このタグを SQL テンプレートに追加すると、その SQL テンプレートは翌日に最適化が必要な SQL テンプレートにはカウントされません。
DAS_IMPORTANT
優先度の高い SQL
法線
優先度の高い SQL テンプレートにこのタグを追加します。
DAS_NOT_IMPORTANT
優先度の低い SQL
法線
優先度の低い SQL テンプレートにこのタグを追加します。
DAS_IN_PLAN
後で最適化
法線
後で最適化する SQL テンプレートにこのタグを追加します。
データのエクスポート。
SQL の詳細 セクションの右上隅にある [エクスポート] をクリックして、フィルターされた SQL テンプレートのデータをエクスポートします。
説明エクスポートされたデータは 3 日間ダウンロード可能です。
さまざまな条件を指定して SQL テンプレートをフィルターできます。たとえば、データベースまたはルールタグに基づいて SQL テンプレートをフィルターし、ダウンロードタスクを作成し、データベースまたはルールタグに基づいて SQL テンプレートを最適化するために異なるオーナーを割り当てることができます。
複数の SQL テンプレートを選択し、選択した SQL テンプレートのデータをエクスポートすることもできます。
データの共有。
SQL テンプレートをフィルターし、フィルターされた SQL テンプレートを対応する SQL テンプレートのオーナーと共有できます。次のいずれかの方法でデータを共有できます。
SQL テンプレートを選択し、セクションの下部にある 一括共有 をクリックします。システムが URL を生成します。URL が指すページには、選択した SQL テンプレートに関する情報が表示されます。DAS の権限が付与されている場合は、そのページにアクセスして、選択した SQL テンプレートに関する情報を表示できます。
条件を指定して SQL テンプレートをフィルターし、エクスポート の右側にある 共有 をクリックします。システムが URL を生成します。URL が指すページには、フィルターされた SQL テンプレートに関する情報が表示されます。DAS の権限が付与されている場合は、そのページにアクセスして、フィルターされたすべての SQL テンプレートに関する情報を表示できます。