A partir de MongoDB 7.0, el balanceador puede fusionar automáticamente fragmentos que cumplan con la requisitos de fusión.
Comportamiento
El AutoMerger se ejecuta en segundo plano como parte de las operaciones de balanceo. Para la mayoría de los casos de uso, la configuración por defecto funciona bien. Para obtener detalles sobre qué configuraciones personalizar para su implementación, consulte Política de combinación automática.
Cuando se ejecuta AutoMerger, comprime todas las secuencias de fragmentos fusionables para cada fragmento de cada colección.
AutoMerger Policy
A menos que esté deshabilitado explícitamente, la fusión automática se inicia la primera vez que se habilita el balanceador y se detiene para la siguiente.
autoMergerIntervalSecs después de los drenajes de rutina.
Cuando AutoMerger está habilitado, la fusión automática se produce cada autoMergerIntervalSecs segundos.
Para una colección determinada, AutoMerger garantiza que las fusiones posteriores se retrasen al menos la cantidad especificada por autoMergerThrottlingMS.
Si se establece una ventana de equilibrio, AutoMerger solo se ejecuta durante la ventana.
Precedencia de la configuración de balanceo
La fusión automática ocurre como parte de las operaciones de balanceo. Para decidir si y cuándo ejecutar la función de auto-fusión, se tienen en cuenta los ajustes en este orden:
Configuraciónde equilibrio global
Configuraciones de balanceo por colección (configuradas por
configureCollectionBalancing)Configuración global de AutoMerger
Configuración de AutoMerger por colección (configurada
configureCollectionBalancingpor)
Detalles
mergeAllChunksOnShard Busca y fusiona todos los fragmentos fusionables de una colección en el mismo fragmento. Dos o más fragmentos contiguos de la misma colección son fusionables cuando cumplen todas estas condiciones:
Son propiedad de la misma partición.
No son fragmentos jumbo.
jumbofragmentos no se pueden fusionar porque no pueden participar en las migraciones.Su historial se puede purgar de forma segura, sin interrumpir las transacciones ni las lecturas de instantáneas:
La última migración que involucró al fragmento ocurrió hace al menos tantos segundos como el valor
minSnapshotHistoryWindowInSecondsde.La última migración que involucró al fragmento ocurrió hace al menos tantos segundos como el valor
transactionLifetimeLimitSecondsde.
Ejemplo
Este ejemplo asume que el historial está vacío para todos los fragmentos y que todos son no jumbo. Dado que ambas condiciones son verdaderas, todos los intervalos contiguos en el mismo fragmento son fusionables.
Configuración
Estos fragmentos pertenecen a una colección llamada coll con clave de partición x. Hay nueve fragmentos en total.
fragmento ID | Min | máximo | Partición |
|---|---|---|---|
A |
|
| Partición0 |
B |
|
| Partición0 |
C |
|
| Partición0 |
D |
|
| Partición0 |
E |
|
| Shard1 |
F |
|
| Shard1 |
G |
|
| Partición0 |
H |
|
| Partición0 |
ME |
|
| Shard1 |
Pasos
Resultado
Después de que estos comandos se hayan completado, los fragmentos contiguos se han combinado. Hay cuatro fragmentos en total en lugar de los nueve originales.
fragmento ID | Min | máximo | Partición |
|---|---|---|---|
A-B-C-D |
|
| Partición0 |
E-F |
|
| Shard1 |
GH |
|
| Partición0 |
ME |
|
| Shard1 |