Hologres V2.0.21 以降では、シャードリバランス操作をトリガーする Rebalance 関数をサポートしています。このトピックでは、Rebalance 関数を使用してシャードをリバランスする方法について説明します。
背景情報
通常、Hologres のワーカーノードはシャードを均等にロードします。しかし、高速リカバリ後などの一部のシナリオでは、シャードがワーカーノード間で不均等に分散されることがあります。この場合、シャードリバランス操作をトリガーしてシャードを再分散させる必要があります。これにより、インスタンス内のすべてのワーカーノードがシャードを均等にロードするようになります。
制限事項
Rebalance 関数は、Hologres V2.0.21 以降でのみサポートされています。お使いのインスタンスのバージョンが V2.0.21 より前の場合は、「インスタンスのアップグレード」をご参照いただくか、Hologres のチャットグループに参加してインスタンスのアップグレードをリクエストしてください。詳細については、「オンラインサポートの利用方法」をご参照ください。
コマンド構文
汎用インスタンスとセカンダリインスタンス
汎用インスタンスまたはセカンダリインスタンスでは、Rebalance 関数はワーカーノード間でシャードを再分散します。構文は次のとおりです:
SELECT hg_rebalance_instance();
-
戻り値:
-
true:シャードリバランス操作が正常にトリガーされました。 -
false:シャードリバランスが不要であることを示します。 -
Error:Pod の障害などが原因で、シャードリバランス操作のトリガーに失敗しました。
-
-
バランスの取れた状態とは、各ワーカーノードのシャード数の差が最大でも 1 である状態です。例:
-
インスタンスに 2 つのワーカーノードと 2 つのシャードがある場合、各ワーカーノードに 1 つのシャードが割り当てられます。
-
インスタンスに 2 つのワーカーノードと 3 つのシャードがある場合、一方のワーカーノードに 1 つのシャードが、もう一方に 2 つのシャードが割り当てられます。
-
-
シャードリバランス操作は通常 2〜3 分かかります。実際の所要時間は、インスタンス内のテーブルグループの数によって異なります。テーブルグループが多いほど、リバランスにかかる時間は長くなります。このプロセス中、書き込み操作は約 15 秒間中断されます。
-
シャードリバランスは非同期操作であるため、次の SQL ステートメントを実行して進捗状況を確認できます。
SELECT hg_get_rebalance_instance_status();
戻り値:
-
DOING:シャードリバランス操作が進行中です。 -
DONE:シャードリバランス操作が完了しました。
仮想ウェアハウスインスタンス
汎用インスタンスやセカンダリインスタンスとは異なり、仮想ウェアハウスインスタンスはコンピューティングリソースを複数の仮想ウェアハウスに分割できます。したがって、仮想ウェアハウスインスタンスのシャードをリバランスするには、各仮想ウェアハウスを個別にリバランスする必要があります。詳細については、「仮想ウェアハウス内のシャードのリバランス」をご参照ください。
よくある質問
不均衡なシャード分散の特定
クエリを実行すると、負荷はすべてのワーカーノードに均等に分散されるはずです。ワーカーノードにシャードが割り当てられていない場合、その負荷は他のワーカーノードよりも著しく低くなります。
-
バランスの取れたシャード分散の例:次の図は、10 個のワーカーノードを持つインスタンスを示しています。クエリおよび書き込み操作が実行されると、モニタリングダッシュボードには、10 個すべてのワーカーノードで CPU 使用率が類似していることが表示されます。

-
不均衡なシャード分散の例:ワーカーノードにシャードがない場合、モニタリングダッシュボードには次の図のようなパターンが表示され、1 つのワーカーノードの負荷が他のノードよりもはるかに低いことがわかります。

次の SQL ステートメントを実行して、どのワーカーノードがシャードをロードしたかを確認します:
SELECT DISTINCT worker_id FROM hologres.hg_worker_info;-
結果の分析:結果は、9 つのワーカーノードのみがシャードをロードしており、1 つはロードしていないことを示しています。
-
アクション:シャードリバランスをトリガーします。操作が完了すると、モニタリングダッシュボードには、以前は十分に活用されていなかったワーカーノードの CPU 使用率が、他のノードに匹敵するレベルまで上昇することが表示されます。

-
再度クエリを実行して、どのワーカーノードがシャードをロードしたかを確認します。結果は、10 個すべてのワーカーノードがシャードをロードしたことを示します。クエリは、10 個のワーカー ID 値 (例:
grgfs、fj4wt、twn5z) を含む worker_id 列を返します。
-