このトピックでは、ワークロード管理のベストプラクティスについて説明します。
前提条件
AnalyticDB for MySQLクラスターはData Warehouse Edition (V3.0) です。
クラスターのエンジンバージョンはV3.1.6.3以降です。
説明クラスターのマイナーバージョンをクエリする方法については、AnalyticDB for MySQLクラスターのバージョンを照会するにはどうすればよいですか? クラスターのマイナーバージョンを更新するには、テクニカルサポートにお問い合わせください。
実行前: スロットルクエリ
クエリが実行される前に、システムはワークロード管理ルールに基づいて各クエリの優先度を決定し、クエリを特定のキューに割り当て、各キューに設定した最大同時実行性に基づいてクエリを実行できます。
次の図は、優先度に基づいてキューにクエリを割り当てる方法の例を示しています。
SQLパターンのハッシュ値に基づくスロットリング
AnalyticDB for MySQLは、SQLパターンに基づいてクエリをスロットルできます。 wlm calc_pattern_hash
ステートメントを使用して、SQLパターンのハッシュ値を計算し、そのSQLパターン内のすべてのクエリを低優先度キューに割り当てるルールを作成できます。 これにより、キューの最大同時実行性を設定してスロットリングを実行できます。
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トピックの「クエリのパターンハッシュ値の取得」をご参照ください。キューの最大同時実行性を設定して、スロットリングを実行します。 デフォルト値は 20 です。
SET ADB_CONFIG XIHE_ENV_QUERY_LOW_PRIORITY_MAX_CONCURRENT_SIZE=20;
過去の処刑に基づくスロットル
次の条件を満たす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" } }'
キューの最大同時実行性を設定して、スロットリングを実行します。 デフォルト値は 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 '
特定のデータベースまたはテーブルに対するクエリの管理
ワークロード管理ルールを使用して、特定のデータベースまたはテーブルに関連するクエリを抑制したり、優先順位を上げたりできます。 このセクションでは、このようなクエリをスロットルする方法の例を示します。
ルールを作成します。
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" } }'
キューの最大同時実行性を設定して、スロットリングを実行します。 デフォルト値は 20 です。
SET ADB_CONFIG XIHE_ENV_QUERY_LOW_PRIORITY_MAX_CONCURRENT_SIZE=20;