全部產品
Search
文件中心

Hologres:均衡分區(Rebalance)

更新時間:Jun 30, 2024

Hologres從V2.0.21版本開始支援Reblance函數,用於觸發均衡分區操作。本文為您介紹Rebalance函數及均衡分區的使用方法。

背景資訊

正常情況下,Hologres執行個體在運行時,Worker節點會均勻的載入資料分區(Shard)的中繼資料。但是在某些情境下(例如觸發了快速恢複等),資料分區在Worker節點上分布不均,此時就需要觸發均衡分區操作,使系統主動的重新分配資料分區,最終讓執行個體的Worker節點均勻載入Shard的中繼資料。

使用限制

僅Hologres V2.0.21及以上版本支援Reblance函數,如果您的執行個體是 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操作已完成。

常見問題

如何發現分區分布不均衡?

通常執行查詢時,每個Worker的負載應該是較為均衡的,但如果有Worker節點沒有分區時,該Worker節點的負載則會遠低於其他Worker。

  • 分區分布均衡樣本:如下圖有10個Worker節點的執行個體執行查詢和寫入時,在監控資訊中可以看到10個Worker的CPU使用率都很相近。image.png

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

    使用如下SQL查詢Worker載入分區中繼資料情況:

    SELECT DISTINCT worker_id FROM hologres.hg_worker_info;
    • 返回結果:image.png

    • 結果分析:僅有9個Worker載入了分區的中繼資料,有一個Worker沒有載入到分區的中繼資料。

    • 措施:此時執行Rebalance操作,待Rebalance完畢後,從監控資訊中可以看到原先CPU使用率較低的Worker,利用率已經明顯上升,且和其他Worker基本相近。image.png

    • 重新查詢Worker載入分區中繼資料情況。發現10個Worker都載入了分區的中繼資料。image.png