全部產品
Search
文件中心

AnalyticDB:負載管理最佳實務

更新時間:Jul 27, 2024

本文介紹工作負載管理的最佳實務。

前提條件

AnalyticDB for MySQL叢集需要同時滿足以下條件:

  • 叢集系列需為數倉版

  • 叢集的核心版本需為3.1.6.3及以上版本。

    說明

    查看湖倉版叢集的核心版本,請參見如何查看執行個體版本資訊。如需升級核心版本,請聯絡支援人員。

事前限流

事前限流是指在查詢入隊前對查詢進行優先順序判斷,從而把查詢分配進對應的隊列中,然後通過配置調整隊列並發,達到限流的效果。

優先順序隊列:事前限流

相同pattern_hash的SQL限流

AnalyticDB for MySQL叢集支援對相同Pattern的SQL進行限流。相同pattern_hash的SQL限流可以通過wlm calc_pattern_hash命令計算SQL的pattern_hash並配置規則,將pattern_hash相同的所有查詢放入Low隊列,再通過修改隊列並發數進行限流。

  1. 建立以下規則,將對應Pattern的查詢放進Low隊列中。

    wlm add_rule
    name=confine_query
    type=query
    action=ADD_PROPERTIES
    predicate='pattern_hash=XXXXXXXXXXXXXX'
    attrs='{
      "add_prop": {
        "query_priority": "low"
      }
    }'
    說明

    wlm calc_pattern_hash命令的詳細資料,請參見計算pattern_hash

  2. 通過配置修改Low隊列的並發數達到限流的目的。預設並發數為20。

    SET ADB_CONFIG XIHE_ENV_QUERY_LOW_PRIORITY_MAX_CONCURRENT_SIZE=20;

對歷史執行情況中滿足一定條件的大查詢SQL限流

  1. 建立以下規則,將Pattern歷史執行時間50分位值大於2000的查詢放進Low隊列。

    wlm add_rule
    name=confine_query
    type=query
    action=ADD_PROPERTIES
    predicate='PATTERN_EXECUTION_TIME_P50>2000'
    attrs='{
      "add_prop": {
        "query_priority": "low"
      }
    }'
  2. 通過配置修改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查詢都會被結束,但是後續來的所有查詢也會被結束,所以系統負載降低後一定要刪除或屏蔽這條規則。刪除或屏蔽規則的具體操作,請參見WLM

wlm add_rule
name=kill_select_query
type=query
action=KILL
predicate='query_task_type=1'

結束某個使用者的查詢

已定位到導致AnalyticDB for MySQL叢集停用查詢來自某個使用者時,結束這個使用者的所有查詢。

wlm add_rule
name=kill_query_from_user    
type=query       
action=KILL      
predicate='user=testuser1'

結束某個IP的查詢

已定位到導致AnalyticDB for MySQL叢集停用查詢來自某個IP時,結束這個IP的所有查詢。

wlm add_rule
name=kill_query_from_ip
type=query
action=KILL
predicate='source_ip=10.10.XX.XX'

結束使用記憶體超過100 MB的所有查詢

已定位到AnalyticDB for MySQL叢集的不穩定是由大查詢影響時,可通過配置規則結束使用記憶體超過100 MB的所有查詢,包括SELECT查詢和寫入。

wlm add_rule
name=kill_Big_query
type=query
action=KILL
predicate='QUERY_PEAK_MEMORY>=100'

結束使用記憶體超過100 MB的SELECT查詢

已定位到AnalyticDB for MySQL叢集的不穩定是由大查詢影響,可通過配置規則結束使用記憶體超過100 MB的SELECT查詢,來限制這部分大查詢且不影響寫入任務。

wlm add_rule
name=kill_Big_query
type=query
action=KILL
predicate='QUERY_PEAK_MEMORY>100 && query_task_type=1'

日常限流(庫表查詢限流)

對掃描某些表或庫的查詢進行限流或者對掃描到某些表或庫的查詢提升優先順序。

  1. 建立以下規則。

    wlm add_rule
    name=confine_query_in_table
    type=query
    action=ADD_PROPERTIES
    predicate='query_table_list in database.table1, database.table2'
    attrs='{
      "add_prop": {
        "query_priority": "low"
      }
    }'
  2. 通過配置修改Low隊列的並發數達到限流的目的。預設並發數為20。

    SET ADB_CONFIG XIHE_ENV_QUERY_LOW_PRIORITY_MAX_CONCURRENT_SIZE=20;