全部產品
Search
文件中心

Hologres:計算群組管理

更新時間:Sep 13, 2024

本文為您介紹查看、建立、刪除以及擴縮容計算群組等管理命令。

注意事項

  • 開啟計算群組模式需要後台配置,且僅Hologres V2.0.4及以上版本支援開啟並使用計算群組模式,請您加入即時數倉Hologres交流群申請,詳情請參見如何擷取更多的線上支援?

  • 新購買一個計算群組執行個體時,系統預設會有一個名稱為init_warehouse的預設計算群組。一個執行個體只有一個預設計算群組,且預設計算群組無法刪除,但是可以修改。

  • 使用計算群組A建立Table Group時,Table Group的主計算群組預設為計算群組A。

  • 每個執行個體最多可以建立10個計算群組,每個計算群組資源最小32CU,最大512CU。

  • 不支援使用SQL命令停止或恢複執行個體的預設計算群組。

  • 預設情況下,所有使用者都有使用預設計算群組的許可權。

  • 所有計算群組都可以執行DDL。

  • 計算群組型執行個體不支援配置資源群組(Beta),資源群組詳情請參見資源群組管理(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使用者擴容計算群組。

  • 擴容計算群組計算資源需要具備執行個體的Superuser許可權。

使用說明

  • 擴容計算群組前,需要先在管控台上擴容執行個體的資源,確保執行個體有足夠的未分配資源。當執行個體資源調整完畢後,系統會拉起新的Pod,但是此時Pod上並未載入任何Shard的中繼資料,所以擴容出來的Pod不會參與計算,執行個體擴容的操作不會影響計算群組的查詢和寫入。

  • 執行個體擴容完成,且有足夠的未分配資源後,可以繼續使用該部分未分配資源,擴容計算群組資源。如果執行個體未分配資源不足,則無法完成計算群組擴容。

    • 自Hologres V2.2版本起,如果計算群組有空Pod,系統會自動執行Rebalance操作,使新的Pod載入Shard的中繼資料。在Rebalance完成後,才能使用新擴容的資源,Rebalance時查詢和寫入會中斷15秒。因此,如果您的執行個體為V2.2及以上版本,擴容計算群組後,無需手動執行Rebalance操作。如果您的執行個體版本低於V2.2,則需手動執行Rebalance操作。

    • Hologres V3.0版本起,計算群組擴容期間,計算群組的查詢和寫入不會中斷。

操作步驟

  1. 擴容計算群組資源,操作文法如下:

    CALL hg_alter_warehouse ('<warehouse_name>',<cu>);

    參數說明:

    參數

    類型

    說明

    warehouse_name

    TEXT

    需要調整的計算群組名稱。

    cu

    INTEGER

    計算群組的CU數。

    • 最大值:512。

    • 最小值:32。

    • 步長:16。

  2. 查詢計算群組的狀態。

    由於調整計算群組計算資源的過程是非同步,執行SQL後,並不代表計算群組計算資源調整完成,需要您使用hg_get_warehouse_status函數查詢計算群組的狀態。

    select hg_get_warehouse_status('<warehouse_name>');

    返回結果為Running,即計算群組在Running狀態下,繼續下面步驟。

  3. Shard重分布。

    使用如下命令讓Shard重新分配到增加擴容的計算群組上。

    SELECT hg_rebalance_warehouse ('<warehouse_name>');
  4. 查詢計算群組的狀態。

    由於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使用者縮容計算群組。

  • 縮容計算群組計算資源需要具備執行個體的Superuser許可權。

使用說明

  • 縮容時Hologres系統會先做Shard的Rebalance,將準備下線的Pod上的Shard遷移到其他Pod上。Rebalance中查詢和寫入會中斷15秒。Rebalance完成後,直接下線多餘的Pods。

  • 縮容後,計算資源會歸屬到執行個體未分配資源中,您可以繼續使用該資源建立計算群組或擴容其他計算群組,也可以縮容執行個體以釋放該資源。

操作步驟

  1. 縮容計算群組資源,操作文法如下:

    CALL hg_alter_warehouse ('<warehouse_name>',<cu>);

    參數說明:

    參數

    類型

    說明

    warehouse_name

    TEXT

    需要調整的計算群組名稱。

    cu

    INTEGER

    計算群組的CU數。

    • 最大值:512。

    • 最小值:32。

    • 步長:16。

  2. 查詢計算群組的狀態。

    由於調整計算群組計算資源的過程是非同步,執行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"}}}');