AutoMerger
MongoDB 7.0以降、バランサーはマージ可能要件を満たすチャンクを自動的にマージできます。
動作
AutoMerger は、バランシング操作の一部としてバックグラウンドで実行されます。 ほとんどのユースケースでは、デフォルト設定が適切にパフォーマンスされます。 配置に合わせてカスタマイズする設定の詳細については、「 AutoMerger ポリシー 」を参照してください。
AutoMerger が実行されると、各コレクションの各シャードのマージ可能なチャンクのすべてのシーケンスがまとめられます。
AutoMerger ポリシー
明示的に無効にされていない限り、バランサーが初めて有効になっているときに AutoMerger は起動され、ルーチンが空の後に次の autoMergerIntervalSecs
のために一時停止します。
AutoMerger が有効になっている場合、自動マージはautoMergerIntervalSecs
秒ごとに発生します。
AutoMerger は特定のコレクションに対して、後続のマージが少なくともautoMergerThrottlingMS
で指定された量より遅延することを保証します。
バランシング ウィンドウが設定されている場合、AutoMerger は ウィンドウ中にのみ実行されます。
バランシング設定の優先順位
オートマージはバランシング操作の一部として行われます。 オートマージを実行するかどうか、またいつ実行するかを決定するために、 設定が次の順序で考慮されます。
グローバルバランシング設定
コレクションごとのバランシング設定(
configureCollectionBalancing
によって構成)グローバルAutoMerger 設定
コレクションごとの AutoMerger 設定(
configureCollectionBalancing
によって構成)
詳細
mergeAllChunksOnShard
は、同じシャード上にあるコレクションのすべての マージ可能なチャンク を検索してマージします。 同じコレクション内の 2 つ以上連続するチャンクは、次の条件をすべて満たす場合にマージできます。
同じシャードによって所有されています。
ジャンボチャンクではありません。
jumbo
チャンクは移行に参加できないため、マージできません。トランザクションやスナップショット読み取りを中断することなく、これらの履歴は安全に消去できます。
チャンクを含む最後の移行は、少なくとも
minSnapshotHistoryWindowInSeconds
の値と同じ秒数前に発生しました。チャンクを含む最後の移行は、少なくとも
transactionLifetimeLimitSeconds
の値と同じ秒数前に発生しました。
例
この例では、履歴がすべてのチャンクで空で、すべてのチャンクが非 ジャンボ であることを前提としています。 両方の条件が true であるため、同じシャード上のすべての連続した間隔がマージ可能です。
セットアップ
これらのチャンクは、シャードキーx
coll
持つ という名前のコレクションに属しています。 チャンクは合計 9 個あります。
チャンク ID | Min | Max | シャード |
---|---|---|---|
A | x: 0 | x: 10 | シャード0 |
B | x: 10 | x: 20 | シャード0 |
C | x: 20 | x: 30 | シャード0 |
D | x: 30 | x: 40 | シャード0 |
E | x: 40 | x: 50 | シャード 1 |
F | x: 50 | x: 60 | シャード 1 |
G | x: 60 | x: 70 | シャード0 |
H | x: 70 | x: 80 | シャード0 |
I | x: 80 | x: 90 | シャード 1 |
手順
結果
これらのコマンドが完了すると、連続するチャンクがマージされます。 チャンクは元の 9 つではなく 4 つあります。
チャンク ID | Min | Max | シャード |
---|---|---|---|
ABCD | x: 0 | x: 40 | シャード0 |
FS | x: 40 | x: 60 | シャード 1 |
SH | x: 60 | x: 80 | シャード0 |
I | x: 80 | x: 90 | シャード 1 |