本文為您介紹查看、創建、刪除以及擴縮容計算組等管理命令。
注意事項
開啟計算組模式需要后臺配置,且僅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"}}}');