本文為您介紹查看、建立、刪除以及擴縮容計算群組等管理命令。
注意事項
開啟計算群組模式需要後台配置,且僅Hologres V2.0.4及以上版本支援開啟並使用計算群組模式,請您加入即時數倉Hologres交流群申請,詳情請參見如何擷取更多的線上支援?。
新購買一個計算群組執行個體時,系統預設會有一個名稱為
init_warehouse
的預設計算群組。一個執行個體只有一個預設計算群組,且預設計算群組無法刪除,但是可以修改。使用計算群組A建立Table Group時,Table Group的主計算群組預設為計算群組A。
每個執行個體最多可以建立10個計算群組,每個計算群組資源最小32 CU,最大512 CU。自V3.0.10版本起,計算群組的最大規格調整至1024 CU。
不支援使用SQL命令停止或恢複執行個體的預設計算群組。
預設情況下,所有使用者都有使用預設計算群組的許可權。
所有計算群組都可以執行DDL。
計算群組型執行個體不支援配置資源群組(Beta),資源群組詳情請參見資源群組管理(即將下線)。推薦通過劃分多個計算群組以實現資源隔離。
計算群組執行個體計費相關請參見計費概述。
查看計算群組
命令格式
系統資料表
hologres.hg_warehouses
存放了當前執行個體所有計算群組的資訊,您可以使用如下SQL查看當前執行個體下所有的計算群組的資訊。SELECT * FROM hologres.hg_warehouses;
使用如下SQL查看當前使用的計算群組,系統將會返回當前使用的計算群組名稱。
SELECT current_warehouse();
參數說明
系統資料表
hologres.hg_warehouses
中包含的欄位資訊如下:欄位
欄位類型
說明
樣本值
warehouse_id
INTEGER
計算群組ID,是計算群組的唯一ID。
1
warehouse_name
TEXT
計算群組名稱。
init_warehouse
cpu
INTEGER
計算群組的CPU(單位Core)。
32
mem
INTEGER
計算群組的記憶體(單位GB)。
128
cluster_min_count
INTEGER
計算群組的最小分區數量。
1
cluster_max_count
INTEGER
計算群組的最大分區數量。
1
target_status
INTEGER
計算群組的目標狀態,由於變更計算群組狀態是非同步,例如執行建立計算群組的SQL,系統會立即返回SQL執行結果,但返回SQL結果時,並非計算群組已經建立成功,系統會在後台非同步建立計算群組,這裡的狀態記錄了計算群組最終需要達到的狀態,有如下狀態:
1:運行中。
2:手動停機。
1
status
INTEGER
計算群組目前狀態,有如下狀態:
0:初始化。
1:運行中。
2:手動停機。
3:處理失敗,如果狀態為處理失敗,status_detail欄位會顯示具體的原因。
4:處理中。
1
status_detail
TEXT
計算群組狀態詳情。
無
is_default
BOOLEAN
是否是預設計算群組,有如下取值:
t:是預設計算群組。
f:不是預設計算群組。
t
config
TEXT
計算群組配置。
無
comment
TEXT
計算群組備忘。
無
建立計算群組
注意事項
僅支援使用阿里雲帳號或者RAM使用者建立資源群組。
建立計算群組需要具備執行個體的Superuser許可權。
由於建立計算群組的過程是非同步,執行建立計算群組組SQL後,並不代表計算群組建立完成,需要您使用
hg_get_warehouse_status
函數查詢計算群組的狀態。
命令格式
CALL hg_create_warehouse ('<warehouse_name>', <cu>);
參數說明
參數
類型
說明
warehouse_name
TEXT
建立的計算群組名稱,命名要求:
僅支援數字、英文字母和底線的組合。
最長支援64個字元。
cu
INTEGER
計算群組的CU數。
最大值:512。
最小值:32。
步長:16。
停止計算群組
注意事項
停止計算群組需要具備執行個體的Superuser許可權。
不支援使用SQL命令停止或恢複執行個體的預設計算群組,如需停止或恢複執行個體的預設計算群組,請直接停機或恢複執行個體,詳情請參見執行個體列表。
若計算群組對應的Table Group有從計算群組,那麼該計算群組無法被停止。例如計算群組A是Table Group A的主計算群組,負責向Table Group A中的表寫入資料,計算群組B是Table Group A的從計算群組。此時暫時不支援停止計算群組A。
由於停止計算群組的過程是非同步,執行SQL後,並不代表計算群組停止完成,需要您使用
hg_get_warehouse_status
函數查詢計算群組的狀態。
命令格式
CALL hg_suspend_warehouse ('<warehouse_name>');
參數說明
參數
類型
說明
warehouse_name
TEXT
需要停止的計算群組名稱。
恢複計算群組
注意事項
恢複計算群組需要具備執行個體的Superuser許可權。
不支援使用SQL命令停止或恢複執行個體的預設計算群組,如需停止或恢複執行個體的預設計算群組,請直接停機或恢複執行個體,詳情請參見執行個體列表。
由於恢複計算群組的過程是非同步,執行SQL後,並不代表計算群組停止完成,需要您使用
hg_get_warehouse_status
函數查詢計算群組的狀態。
命令格式
CALL hg_resume_warehouse ('<warehouse_name>');
參數說明
參數
類型
說明
warehouse_name
TEXT
需要恢複的計算群組名稱。
刪除計算群組
注意事項
僅支援使用阿里雲帳號或者RAM使用者刪除計算群組。
刪除計算群組需要具備執行個體的Superuser許可權。
執行個體的預設計算群組不支援使用SQL命令刪除。
Table Group的主計算群組不支援使用SQL命令刪除。
由於刪除計算群組的過程是非同步,執行SQL後,並不代表計算群組刪除完成,需要您使用
hg_get_warehouse_status
函數查詢計算群組的狀態。
命令格式
CALL hg_drop_warehouse ('<warehouse_name>');
參數說明
參數
類型
說明
warehouse_name
TEXT
需要刪除的計算群組名稱。
擴容計算群組計算資源
許可權說明
僅支援使用阿里雲帳號或者RAM使用者擴容計算群組,不支援STS帳號。
擴容計算群組計算資源需要具備以下許可權:
RAM角色許可權:AliyunHologresWarehouseFullAccess或AliyunHologresFullAccess許可權。
執行個體內部的Superuser許可權。
使用說明
擴容計算群組前,需要先在管控台上擴容執行個體的資源,確保執行個體有足夠的未分配資源。當執行個體資源調整完畢後,系統會拉起新的Pod,但是此時Pod上並未載入任何Shard的中繼資料,所以擴容出來的Pod不會參與計算,執行個體擴容的操作不會影響計算群組的查詢和寫入。
執行個體擴容完成,且有足夠的未分配資源後,可以繼續使用該部分未分配資源,擴容計算群組資源。如果執行個體未分配資源不足,則無法完成計算群組擴容。
自Hologres V2.2版本起,如果計算群組有空Pod,系統會自動執行Rebalance操作,使新的Pod載入Shard的中繼資料。在Rebalance完成後,才能使用新擴容的資源,Rebalance時查詢和寫入會中斷15秒。因此,如果您的執行個體為V2.2及以上版本,擴容計算群組後,無需手動執行Rebalance操作。如果您的執行個體版本低於V2.2,則需手動執行Rebalance操作。
Hologres V3.0版本起,計算群組擴容期間,計算群組的查詢和寫入不會中斷。
操作步驟
擴容計算群組資源,操作文法如下:
CALL hg_alter_warehouse ('<warehouse_name>',<cu>);
參數說明:
參數
類型
說明
warehouse_name
TEXT
需要調整的計算群組名稱。
cu
INTEGER
計算群組的CU數。
最大值:512。
最小值:32。
步長:16。
查詢計算群組的狀態。
由於調整計算群組計算資源的過程是非同步,執行SQL後,並不代表計算群組計算資源調整完成,需要您使用
hg_get_warehouse_status
函數查詢計算群組的狀態。select hg_get_warehouse_status('<warehouse_name>');
返回結果為Running,即計算群組在Running狀態下,繼續下面步驟。
Shard重分布。
使用如下命令讓Shard重新分配到增加擴容的計算群組上。
SELECT hg_rebalance_warehouse ('<warehouse_name>');
查詢計算群組的狀態。
由於rebalance的過程是非同步,執行SQL後,並不代表rebalance調整完成,需要您使用如下命令查詢計算群組的狀態。
hg_get_rebalance_warehouse_status
函數返回當前計算群組的狀態:SELECT hg_get_rebalance_warehouse_status ('<warehouse_name>');
返回
t
即表示成功。hg_wait_until_rebalance_warehouse_done
函數可以直到指定計算群組處於Running
狀態時,再返回結果:select hg_wait_until_rebalance_warehouse_done('<warehouse_name>',<timeout_seconds>);
其中timeout_seconds:非必填。代表返回逾時時間,單位為秒,類型為INTEGER。
返回
DONE
即表示成功。
使用樣本
推薦使用如下SQL為read_warehouse_1
計算群組擴容至64CU:
-- 增加計算群組的資源
CALL hg_alter_warehouse ('read_warehouse_1',64);
-- 等待計算群組擴容完畢
SELECT wait_until_warehouse_running ('read_warehouse_1');
-- rebalance
SELECT hg_rebalance_warehouse ('read_warehouse_1');
-- 等待rebalance完畢
SELECT hg_wait_until_rebalance_warehouse_done ('read_warehouse_1');
縮容計算群組計算資源
許可權說明
僅支援使用阿里雲帳號或者RAM使用者縮容計算群組,不支援STS帳號。
縮容計算群組計算資源需要具備以下許可權:
RAM角色許可權:AliyunHologresWarehouseFullAccess或AliyunHologresFullAccess許可權
執行個體內部的Superuser許可權。
使用說明
縮容時Hologres系統會先做Shard的Rebalance,將準備下線的Pod上的Shard遷移到其他Pod上。Rebalance中查詢和寫入會中斷15秒。Rebalance完成後,直接下線多餘的Pods。
縮容後,計算資源會歸屬到執行個體未分配資源中,您可以繼續使用該資源建立計算群組或擴容其他計算群組,也可以縮容執行個體以釋放該資源。
操作步驟
縮容計算群組資源,操作文法如下:
CALL hg_alter_warehouse ('<warehouse_name>',<cu>);
參數說明:
參數
類型
說明
warehouse_name
TEXT
需要調整的計算群組名稱。
cu
INTEGER
計算群組的CU數。
最大值:512。
最小值:32。
步長:16。
查詢計算群組的狀態。
由於調整計算群組計算資源的過程是非同步,執行SQL後,並不代表計算群組計算資源調整完成,需要您使用
hg_get_warehouse_status
函數查詢計算群組的狀態。select hg_get_warehouse_status('<warehouse_name>');
返回結果為running,即計算群組狀態為running狀態。
擷取計算群組狀態
命令格式
使用如下SQL擷取計算群組的目前狀態:
select hg_get_warehouse_status('<warehouse_name>');
由於Warehouse 的建立、擴縮容等都是非同步執行的,有時候需要變更計算群組狀態後再進行一些操作。此時可以使用
wait_until_warehouse_running
函數,該函數可以直到指定計算群組處於Running狀態時,再返回結果,命令如下:select wait_until_warehouse_running('<warehouse_name>',<timeout_seconds>);
參數說明
參數
類型
說明
warehouse_name
TEXT
需要擷取狀態的計算群組名稱。
timeout_seconds
INTEGER
返回逾時時間,單位秒。非必填。
使用樣本
使用如下SQL實現每次從表
org_data
向表res_data
匯入資料時,先擴容計算群組,再匯入資料,然後縮容計算群組:-- warehouse_1擴容至64CU CALL hg_alter_warehouse ('warehouse_1',64); -- 等待warehouse_1擴容完成 SELECT wait_until_warehouse_running('warehouse_1'); -- 寫入資料 INSERT INTO res_data SELECT * FROM org_data; -- warehouse_1縮回32CU CALL hg_alter_warehouse ('warehouse_1',32);
修改計算群組名稱
許可權說明
修改計算群組名稱需要具備執行個體的Superuser許可權。
命令格式
CALL hg_rename_warehouse('<org_warehouse_name>','<new_warehouse_name>');
參數說明
參數
類型
說明
org_warehouse_name
TEXT
需要修改的計算群組名稱。
new_warehouse_name
TEXT
計算群組的新名稱。
重啟計算群組
許可權說明
重啟計算群組需要具備執行個體的Superuser許可權。
注意事項
由於重啟計算群組的過程是非同步,執行SQL後,並不代表計算群組重啟完成,需要您使用
hg_get_warehouse_status
函數查詢計算群組的狀態。命令格式
CALL hg_restart_warehouse('<warehouse_name>');
參數說明
參數
類型
說明
warehouse_name
TEXT
需要重啟的計算群組名稱。
進階操作
計算群組均衡分區(Rebalance)
Hologres執行個體在運行時,每個計算群組的Worker節點會均勻地載入資料分區(Shard)的中繼資料。但是在某些情境下(例如觸發了快速恢複、擴容等),資料分區在Worker節點上分布不均,此時就需要觸發均衡分區操作,使系統主動的重新分配資料分區,最終讓計算群組的Worker節點均勻載入Shard的中繼資料。
許可權說明
觸發均衡分區操作需要具備執行個體的Superuser許可權。
注意事項
Hologres從 V2.1版本開始,如果計算群組內發現有空的Worker節點(未載入任何Shard),計算群組會自動觸發Rebalance。
Hologres從 V2.2版本開始,系統支援對計算群組Rebalance期間執行的查詢(SELECT)自動重試,使得查詢能在適當延長執行時間後順利完成,不會出現如
ERROR: fail to execute query internal error: Get rundown is not allowed in recovering state.
異常報錯。
命令格式
SELECT hg_rebalance_warehouse ('<warehouse_name>');
參數說明
參數
類型
說明
warehouse_name
TEXT
需要觸發均衡分區的計算群組名稱。
返回結果
觸發均衡分區操作後,有如下返回結果:
true:表示Rebalance觸發成功,系統開始進行Rebalance操作。
false:表示無需Rebalance。
報錯:表示Rebalance觸發失敗。例如存在Pod故障時,觸發Rebalance操作會報錯。
說明執行Rebalance過程中,系統會計算是否需要Rebalance,最終達到均衡狀態,即每個Worker載入的Shard數量差異小於等於1。例如:
如果有2個Worker,2個Shard,那麼最終每個Worker都會分到1個Shard。
如果有2個Worker,3個Shard,那麼最終其中1個Worker會分到1個Shard,另一個Worker會分到2個Shard。
Rebalance操作通常需要2~3分鐘,執行時間長度和計算群組中Table Group的數量有關,Table Group越多,Rebalance耗時越長。Rebalance過程中您的寫入大約會中斷15秒。
由於Rebalance是非同步執行,您可以使用如下SQL查看執行進度:
SELECT hg_get_rebalance_warehouse_status('<warehouse_name>');
返回結果為
DOING
表示正在執行Rebalance操作;返回結果為DONE
表示Rebalance操作已完成。
設定計算群組的逾時時間長度
您可以通過設定statement_timeout
參數,實現Session層級或資料庫層級的逾時時間長度設定,詳情請參見GUC參數。
針對計算群組,可以執行如下命令,為計算群組設定逾時時間長度。該配置優先順序低於上述Session層級和資料庫層級配置,因此需要先取消資料庫層級的配置。
-- 取消資料庫層級設定
ALTER DATABASE <db_name> RESET statement_timeout;
-- 設定計算群組的逾時時間長度為600s
CALL hg_alter_warehouse ('<warehouse_name>', <cu>, '{"configs":{"gucs":{"statement_timeout":"600000"}}}');