全部產品
Search
文件中心

ApsaraDB for SelectDB:Workload Group

更新時間:Jul 06, 2024

ApsaraDB for SelectDB支援通過Workload Group特性進行叢集內的計算資源軟隔離。本文將介紹ApsaraDB for SelectDB中的Workload Group特性,協助使用者管理計算資源。

概述

Workload Group通過限制組內任務在單個計算節點上的計算資源和記憶體資源的使用,從而限制任務在計算叢集內的資源使用。

若在業務情境下,您對高負載的查詢和匯入具備管控的能力且期望能夠充分利用計算叢集的資源,比如在SelectDB中執行定時離線計算任務,這種情況下可以把這類計算任務進行劃分,放到獨立的Workload Group中管理。此外,如果您的業務具備比較明顯的早高峰午高峰的特徵,這些業務間的資源隔離也可以考慮使用Workload Group管理。

若使用Workload Group進行資源隔離,在充分考慮業務情境的基礎上,可以從以下方面進行Workload Group的劃分。

  • 以大查詢和小查詢為依據進行劃分。

  • 以短查詢和長查詢為依據進行劃分。

  • 以冷資料查詢和熱資料查詢為依據進行劃分。

  • 以離線匯入和即時匯入進行劃分。

Workload Group用法

以下分別介紹Workload Group的建立、刪除、修改和查看。

說明

進行Workload Group操作時建議使用最高許可權admin賬戶。

建立Workload Group

該語句用於建立Workload Group。Workload Group可實現計算叢集層面CPU資源和記憶體資源的隔離。

文法

CREATE WORKLOAD GROUP [IF NOT EXISTS] 'rg_name'
PROPERTIES (
    property_list
);

參數說明

參數名稱

必選

參數說明

rg_name

Workload Group名稱。

PROPERTIES的參數說明如下。

參數名稱

必選

參數說明

cpu_share

用於設定資源群組擷取CPU時間的多少,可以實現CPU資源軟隔離。cpu_share是相對值,表示正在啟動並執行資源群組可擷取CPU資源的權重。

例如,使用者建立了3個Workload Group,分別為rg-arg-brg-ccpu_share分別為10、30、40。某一時刻rg-arg-b下有任務正在執行,而rg-c沒有任務,此時rg-a可獲得 (10 / (10 + 30)) = 25% 的CPU資源,而資源群組rg-b可獲得75%的CPU資源。

如果系統只有一個Workload Group正在運行,則不管其cpu_share的值為多少,它都可以擷取全部的CPU資源。

memory_limit

用於設定資源群組可以使用的計算叢集記憶體的百分比。

Workload Group記憶體限制的絕對值為:實體記憶體 * mem_limit * memory_limit,其中mem_limit為計算叢集配置項,修改該參數配置詳情請參見參數配置

Workload Group在絕大多數情況下保證組內任務可使用memory_limit的記憶體,當Workload Group記憶體使用量超出該限制後,組內記憶體佔用較大的任務可能會被取消以釋放超出的記憶體。

說明

系統所有的Workload Group的memory_limit總和不可超過100%,否則會出現報錯。

enable_memory_overcommit

用於開啟Workload Group記憶體軟隔離,預設為false。

如果設定為false,則該Workload Group為記憶體硬隔離,系統檢測到資源群組記憶體使用量超出限制後將立即取消組內記憶體佔用最大的若干個任務,以釋放超出的記憶體。

如果設定為true,則該Workload Group為記憶體軟隔離,如果系統有空閑記憶體資源,則該資源群組在超出memory_limit的限制後可繼續使用系統記憶體,在系統總記憶體緊張時會取消組內記憶體佔用最大的若干個任務,釋放部分超出的記憶體以緩解系統記憶體壓力。

建議在有個別Workload Group開啟該配置時,所有Workload Group的memory_limit總和應該低於100%,剩餘部分用於Workload Group記憶體超發。

max_concurrency

用於規定當前Workload Group允許的最大查詢數控制變數。預設為無限制。

ApsaraDB for SelectDB環境下,最大並發的查詢數 = max_concurrency * 2,超過最大並發的查詢數時,新的查詢會進入排隊邏輯。

max_queue_size

用於界定查詢排隊的長度。預設為無限制。

ApsaraDB for SelectDB環境下,最大查詢排隊長度 = max_queue_size * 2。當隊列滿了之後,新的查詢會被拒絕。

queue_timeout

用於界定查詢在隊列中等待的時間。預設為無限制。

ApsaraDB for SelectDB環境下,最大查詢等待時間 = queue_timeout * 2。如果查詢等待時間超過這個值,那麼查詢會被拒絕,單位為毫秒。

樣本

建立名為g1的Workload Group,樣本如下。

 CREATE WORKLOAD GROUP IF NOT EXISTS g1
 PROPERTIES (
     "cpu_share"="10",
     "memory_limit"="30%",
     "enable_memory_overcommit"="true"
 );

刪除Workload Group

該語句用於刪除Workload Group。

文法

DROP WORKLOAD GROUP [IF EXISTS] 'rg_name'

樣本

刪除名為g1的Workload Group,樣本如下。

DROP WORKLOAD GROUP IF EXISTS g1;

修改Workload Group

該語句用於修改Workload Group。

文法

ALTER WORKLOAD GROUP  "rg_name"
PROPERTIES (
    property_list
);

參數說明

PROPERTIES的參數說明詳情請參見參數說明

樣本

修改名為g1的Workload Group,樣本如下。

ALTER WORKLOAD GROUP g1
PROPERTIES (
    "cpu_share"="30",
    "memory_limit"="30%"
);
說明
  • 修改memory_limit屬性時不可使所有memory_limit值的總和超過100%。

  • 支援修改部分屬性,例如只修改cpu_share,PROPERTIES裡只填cpu_share即對應的參數值即可。

查看Workload Group

該語句用於展示目前使用者具有usage_priv許可權的Workload Group

文法

SHOW WORKLOAD GROUPS;

樣本

展示所有Workload Group,樣本如下。

mysql> SHOW WORKLOAD GROUPS;
+----------+--------+--------------------------+---------+
| Id       | Name   | Item                     | Value   |
+----------+--------+--------------------------+---------+
| 10343386 | normal | cpu_share                | 10      |
| 10343386 | normal | memory_limit             | 30%     |
| 10343386 | normal | enable_memory_overcommit | true    |
| 10352416 | g1     | memory_limit             | 20%     |
| 10352416 | g1     | cpu_share                | 10      |
+----------+--------+--------------------------+---------+

使用樣本

如下介紹如何在SelectDB叢集中啟用Workload Group

  1. 開啟enable_workload_group配置項,在FE配置項中設定:

enable_workload_group=true
說明
  • 該配置項暫未提供設定,如有需要請建立阿里雲工單諮詢。

  • 該配置為動態配置,以普通配置的方式修改並重啟執行個體的情境,系統會自動建立名為normal的預設Workload Group。以動態配置的方式生效的情境若未重啟執行個體,則系統不會建立預設Workload Group。具體修改方式請在阿里雲工單中諮詢。

  1. 在啟用配置項後,建立Workload Group。

CREATE WORKLOAD GROUP IF NOT EXISTS g1
properties (
    "cpu_share"="10",
    "memory_limit"="30%",
    "enable_memory_overcommit"="true"
);
  1. Workload Group的CPU隔離基於Pipeline執行引擎實現,因此需設定Session變數,開啟Pipeline執行引擎。

set experimental_enable_pipeline_engine = true;
  1. 為使得Workload Group生效,需要進行綁定。如下兩種方式可以用來綁定。

  • 設定User property將使用者預設綁定到Workload Group,在建立預設Workload Group後,該值預設為normal

    set property 'default_workload_group' = 'g1';

    上述語句將設定目前使用者的查詢預設使用'g1'。

  • 通過Session變數指定Workload Group, 預設為空白。

    set workload_group = 'g1';

    Session變數中設定的workload_group生效優先順序高於User property中的default_workload_group。即在workload_group為空白時,查詢將綁定到default_workload_group, 在Session變數workload_group不為空白時,查詢將綁定到workload_group

    如果是非Admin使用者,需要先執行SHOW-WORKLOAD-GROUPS命令確認目前使用者能否看到該Workload Group,不能看到的Workload Group可能不存在或者目前使用者沒有許可權,執行查詢時會報錯。

  1. 完成以上設定後,執行查詢,查詢將關聯到指定的Workload Group,此時Workload Group中規定的資源限制將生效。