均衡分區(Rebalance)
Hologres從V2.0.21版本開始支援Rebalance函數,用於觸發均衡分區操作。本文為您介紹Rebalance函數及均衡分區的使用方法。
背景資訊
正常情況下,Hologres執行個體在運行時,Worker節點會均勻的載入資料分區(Shard)的中繼資料。但是在某些情境下(例如觸發了快速恢複等),資料分區在Worker節點上分布不均,此時就需要觸發均衡分區操作,使系統主動的重新分配資料分區,最終讓執行個體的Worker節點均勻載入Shard的中繼資料。
使用限制
僅Hologres V2.0.21及以上版本支援Rebalance函數,如果您的執行個體是 V2.0.21以下版本,請您使用自助升級或加入即時數倉Hologres交流群申請升級執行個體,詳情請參見如何擷取更多的線上支援?。
命令文法
通用型執行個體和唯讀從執行個體
Rebalance函數用於觸發通用型或唯讀從執行個體上的Worker節點重新分配分區。文法如下:
SELECT hg_rebalance_instance();
-
返回結果:
-
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_instance_status();
返回結果:
-
DOING:表示正在執行Rebalance操作。
-
DONE:表示Rebalance操作已完成。
計算群組型執行個體
與通用型執行個體和唯讀從執行個體不同,計算群組型執行個體可將計算資源分解為多個計算群組。因此,要實現計算群組型執行個體的均衡分區,需要對其中每個計算群組單獨執行均衡分區操作。具體操作,請參見計算群組均衡分區(Rebalance) 。
常見問題
如何發現分區分布不均衡?
通常執行查詢時,每個Worker的負載應該是較為均衡的,但如果有Worker節點沒有分區時,該Worker節點的負載則會遠低於其他Worker。
-
分區分布均衡樣本:如下圖有10個Worker節點的執行個體執行查詢和寫入時,在監控資訊中可以看到10個Worker的CPU使用率都很相近。

-
分區分布不均衡樣本:如下圖有Worker節點沒有分區時,監控資訊中會出現如下類似情況,有Worker節點的負載遠低於其他Worker。

使用如下SQL查詢Worker載入分區中繼資料情況:
SELECT DISTINCT worker_id FROM hologres.hg_worker_info;-
結果分析:僅有9個Worker載入了分區的中繼資料,有一個Worker沒有載入到分區的中繼資料。
-
措施:此時執行Rebalance操作,待Rebalance完畢後,從監控資訊中可以看到原先CPU使用率較低的Worker,利用率已經明顯上升,且和其他Worker基本相近。

-
重新查詢Worker載入分區中繼資料情況。發現10個Worker都載入了分區的中繼資料。查詢返回 worker_id 列,包含 10 條 Worker ID 記錄(
grgfs、fj4wt、twn5z等)。
-