すべてのプロダクト
Search
ドキュメントセンター

AnalyticDB for MySQL:ワークロード管理のベストプラクティス

最終更新日:Jun 12, 2024

このトピックでは、ワークロード管理のベストプラクティスについて説明します。

前提条件

実行前: スロットルクエリ

クエリが実行される前に、システムはワークロード管理ルールに基づいて各クエリの優先度を決定し、クエリを特定のキューに割り当て、各キューに設定した最大同時実行性に基づいてクエリを実行できます。

次の図は、優先度に基づいてキューにクエリを割り当てる方法の例を示しています。

image.png

SQLパターンのハッシュ値に基づくスロットリング

AnalyticDB for MySQLは、SQLパターンに基づいてクエリをスロットルできます。 wlm calc_pattern_hashステートメントを使用して、SQLパターンのハッシュ値を計算し、そのSQLパターン内のすべてのクエリを低優先度キューに割り当てるルールを作成できます。 これにより、キューの最大同時実行性を設定してスロットリングを実行できます。

  1. SQLパターン内のすべてのクエリを優先度の低いキューに割り当てるルールを作成します。

    wlm add_rule
    name=confine_query
    type=クエリ
    action=ADD_PROPERTIES
    述語='pattern_hash=XXXXXXXXXXXXXX'
    attrs='{
      "add_prop": {
        "query_priority": "low"
      }
    }'
    説明

    wlm calc_pattern_hashステートメントの詳細については、WLMトピックの「クエリのパターンハッシュ値の取得」をご参照ください。

  2. キューの最大同時実行性を設定して、スロットリングを実行します。 デフォルト値は 20 です。

    SET ADB_CONFIG XIHE_ENV_QUERY_LOW_PRIORITY_MAX_CONCURRENT_SIZE=20;

過去の処刑に基づくスロットル

  1. 次の条件を満たすSQLパターンのすべてのクエリを優先度の低いキューに割り当てるルールを作成します。SQLパターンの過去の実行時間のP50が2,000 msより長い場合。

    wlm add_rule
    name=confine_query
    type=クエリ
    action=ADD_PROPERTIES
    述語='PATTERN_EXECUTION_TIME_P50>2000'
    attrs='{
      "add_prop": {
        "query_priority": "low"
      }
    }'
  2. キューの最大同時実行性を設定して、スロットリングを実行します。 デフォルト値は 20 です。

    SET ADB_CONFIG XIHE_ENV_QUERY_LOW_PRIORITY_MAX_CONCURRENT_SIZE=20;

実行中: パフォーマンスの問題を解決するためのクエリの終了

AnalyticDB for MySQLクラスターで輻輳が発生した場合、KILL ALLステートメントを実行してすべての実行を終了できます。 この操作は、データの不整合を引き起こす可能性のある書き込み操作も終了します。 この場合、ワークロード管理ルールを作成して、特定の種類のクエリのみを終了できます。

すべてのSELECTクエリを終了する

SELECTクエリを終了するには、述語をquery_task_type=1に設定します。 この場合、システムは進行中のSELECTクエリと後続のSELECTクエリの両方を終了します。 システムロードが低レベルに戻ったときに、このルールを手動で削除または無効にする必要があります。 ルールを削除または無効にする方法については、「WLM」をご参照ください。

wlm add_rule
name=kill_select_query
type=クエリ
アクション=キル
述語='query_task_type=1 ' 

特定のリクエスタからのクエリの終了

wlm add_rule
name=kill_query_from_user
type=クエリ
アクション=キル
述語='user=testuser1' 

特定のIPアドレスからのクエリの終了

wlm add_rule
name=kill_query_from_ip
type=クエリ
アクション=キル
述語='source_ip=10.10.XX.XX' 

100 MBを超えるメモリを消費するエンドクエリ

このルールは、読み取り操作と書き込み操作の両方を終了します。

wlm add_rule
name=kill_Big_query
type=クエリ
アクション=キル
述語='QUERY_PEAK_MEMORY>=100 ' 

100 MBを超えるメモリを消費する終了SELECTステートメント

このルールは読み取り操作のみを終了します。

wlm add_rule
name=kill_Big_query
type=クエリ
アクション=キル
述語='QUERY_PEAK_MEMORY>100 && query_task_type=1 ' 

特定のデータベースまたはテーブルに対するクエリの管理

ワークロード管理ルールを使用して、特定のデータベースまたはテーブルに関連するクエリを抑制したり、優先順位を上げたりできます。 このセクションでは、このようなクエリをスロットルする方法の例を示します。

  1. ルールを作成します。

    wlm add_rule
    name=confine_query_in_table
    type=クエリ
    action=ADD_PROPERTIES
    述語='query_table_list in database.table1, database.table2'
    attrs='{
      "add_prop": {
        "query_priority": "low"
      }
    }'
  2. キューの最大同時実行性を設定して、スロットリングを実行します。 デフォルト値は 20 です。

    SET ADB_CONFIG XIHE_ENV_QUERY_LOW_PRIORITY_MAX_CONCURRENT_SIZE=20;