Hologres V2.0.21 以降のバージョンでは、Rebalance 機能がサポートされています。この機能は、シャードのリバランス操作をトリガーします。このトピックでは、Rebalance 機能を使用してシャードをリバランスする方法について説明します。
背景情報
通常のランタイム中、Hologres のワーカーノードはシャードメタデータを均等にロードします。高速回復後などの一部のケースでは、シャードの分散が不均等になることがあります。リバランス操作をトリガーして、すべてのワーカーノードにシャードを均等に再分散させることができます。
制限事項
Rebalance 機能は Hologres V2.0.21 以降のバージョンでサポートされています。ご利用のインスタンスのバージョンがこれより古い場合は、セルフサービスアップグレード機能を使用するか、Hologres DingTalk グループに参加してインスタンスのアップグレードをリクエストできます。詳細については、「オンラインサポートの利用方法」をご参照ください。
コマンド構文
シャードのリバランス操作をトリガーする構文は、インスタンスタイプによって異なります。
汎用インスタンスと読み取り専用レプリカインスタンス
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:リバランス操作が完了しました。
FAQ
シャードの不均等な分散の判断方法
クエリの実行中、すべてのワーカーノード間で負荷が比較的均等に分散されるはずです。シャードを持たないワーカーノードがある場合、その負荷は他のノードよりもはるかに低くなります。
均等なシャード分散の例:次の図は、10 台のワーカーノードを持つインスタンスでクエリおよび書き込み操作が実行されている場合、モニタリングデータに示されるように、10 台すべてのワーカーの CPU 使用率がほぼ同じであることを示しています。

不均等なシャード分散の例:次の図は、一部のワーカーノードにシャードがないことを示しています。モニタリングデータは、これらのワーカーノードの負荷が他のノードよりもはるかに低いことを示しています。

次の SQL 文を実行して、どのワーカーがシャードメタデータをロードしたかを確認できます。
SELECT DISTINCT worker_id FROM hologres.hg_worker_info;戻り値:

結果の分析:9 台のワーカーのみがシャードメタデータをロードしています。1 台のワーカーはシャードメタデータをロードしていません。
対処:リバランス操作を実行します。操作が完了すると、モニタリングデータには、以前は十分に活用されていなかったワーカーの CPU 使用率が大幅に上昇し、他のワーカーと同程度になったことが示されます。

再度、どのワーカーがシャードメタデータをロードしたかを確認できます。10 台すべてのワーカーがシャードメタデータをロードしていることがわかります。
