Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

Desfragmentar colecciones particionadas

La fragmentación consiste en dividir los datos de una colección fragmentada en una cantidad innecesariamente grande de fragmentos pequeños. Esto puede aumentar la duración de las operaciones CRUD que se ejecutan en esa colección. La desfragmentación reduce la cantidad de fragmentos al fusionarlos en fragmentos más grandes, lo que resulta en tiempos de operación CRUD más cortos.

Si los tiempos de operación CRUD son aceptables, no es necesario desfragmentar las colecciones.

La siguiente tabla resume la información de desfragmentación para varias versiones de MongoDB.

Versión de MongoDB
Descripción

MongoDB 7.0 y versiones posteriores

Los fragmentos se fusionan automáticamente. Las mejoras de rendimiento al desfragmentar una colección en MongoDB 7.0 son menores que en MongoDB 6.0. Normalmente, no es necesario desfragmentar colecciones a partir de MongoDB 7.0.

MongoDB 6.0 y versiones anteriores a 7.0

Desfragmente las colecciones solo si experimenta retrasos en las operaciones CRUD cuando el balanceador migra fragmentos o se inicia un nodo.

A partir de MongoDB 6.0, el alto tráfico de escritura no debería causar fragmentación. Las migraciones de fragmentos sí la causan.

Anterior a MongoDB 6.0

Desfrágmente las colecciones solo si experimenta tiempos más largos de operaciones CRUD durante las actualizaciones de metadatos. Para las versiones de MongoDB anteriores a la 6.0, una colección particionada se fragmenta cuando el tamaño de la colección crece significativamente debido a múltiples operaciones de inserción o actualización.

Para desfragmentar una colección particionada, utilice el La opción defragmentCollection del comando configureCollectionBalancing. La opción está disponible a partir de MongoDB 6.0.

Considere estos problemas antes de desfragmentar las colecciones:

  • La desfragmentación podría provocar muchas actualizaciones de metadatos en las particiones. Si tus operaciones CRUD ya están tardando más de lo habitual durante las migraciones, solo deberías ejecutar la desfragmentación durante una ventana de equilibrio de particiones para reducir la carga de trabajo del sistema.

  • Si la desfragmentación afecta la carga de trabajo y la latencia CRUD en el clúster, puede reducir el impacto utilizando el chunkDefragmentationThrottlingMS parámetro.

  • Los fragmentos fusionados pierden su historial de ubicación.

    • Esto significa que, mientras se ejecuta la desfragmentación, las lecturas de snapshot y, de forma indirecta, las transacciones podrían fallar con errores de historial de fragmentos obsoletos.

    • El historial de colocación registra las particiones en las que se almacenó un fragmento. La desfragmentación borra el historial de ubicaciones y algunas operaciones podrían fallar, pero normalmente se resolverán después de aproximadamente cinco minutos.

  • La desfragmentación afecta la localidad de los documentos en una colección al mover los datos entre las particiones. Si una colección tiene intervalos de datos a los que se accede con frecuencia, después de desfragmentar la colección, es posible que los datos a los que se accede con frecuencia estén en una sola partición. Esto podría disminuir el rendimiento de las operaciones CRUD al colocar la carga de trabajo en una sola partición en lugar de en varias particiones.

Nota

Normalmente, debe utilizar una ventana de equilibrio de fragmentos para especificar cuándo se ejecuta el equilibrador en lugar de iniciar y detener manualmente la desfragmentación.

Esta sección describe detalles adicionales relacionados con la desfragmentación de colecciones fragmentadas.

El campo defragmentCollection devuelto por el comando configureCollectionBalancing solo se considera true cuando se está ejecutando la desfragmentación.

Después de la desfragmentación finalice automáticamente o si detiene manualmente la desfragmentación, el campo defragmentCollection se elimina del documento devuelto.

Se permiten lecturas de nodos secundarios durante la desfragmentación, pero podrían tardar más en completarse hasta que las actualizaciones de metadatos en el nodo primario se repliquen a los nodos secundarios.

Para obtener detalles sobre el balanceador de MongoDB, consulte Balanceador de clúster fragmentado.

Para obtener una introducción chunkSize a, consulte Modificar el tamaño del rango en un clúster fragmentado.

Cuando los datos de la colección compartidos entre dos particiones difieren en tres o más veces la configuración de chunkSize, el equilibrador migra los fragmentos entre las particiones.

Por ejemplo, si chunkSize es 128 MB y los datos de recopilación difieren en 384 MB o más, el equilibrador migra fragmentos entre los fragmentos.

Cuando los fragmentos se mueven, se dividen o se fusionan, los metadatos de la partición se actualizan después de que la operación de fragmento es confirmada por un servidor de configuración. Las Particiones no involucradas en la operación de fragmentos también se actualizan con nuevos metadatos.

El tiempo para la actualización de metadatos de la partición es proporcional al tamaño de la tabla de enrutamiento. Las operaciones CRUD sobre la colección se bloquean temporalmente mientras se actualiza la metadatos de las particiones, y una tabla de enrutamiento más pequeña significa demoras más cortas en las operaciones CRUD.

Desfragmentar una colección reduce la cantidad de fragmentos y el tiempo necesario para actualizar los metadatos de cada fragmento.

Para reducir la carga de trabajo del sistema, configure el balanceador para que se ejecute solo en un horario específico mediante una ventana de balanceo de fragmentos. La desfragmentación se ejecuta durante esta ventana.

Puede utilizar el parámetro chunkDefragmentationThrottlingMS para limitar la velocidad de los comandos de división y fusión ejecutados por el balanceador.

Puedes iniciar y detener la desfragmentación en cualquier momento.

También puedes establecer una zona de particiones. Una zona de particiones se basa en la clave de partición, y se puede asociar cada zona con una o más particiones en un clúster.

Un clúster fragmentado solo divide fragmentos cuando es necesario migrarlos. Esto significa que el tamaño del fragmento puede superar chunkSize. Los fragmentos más grandes reducen la cantidad de fragmentos en un fragmento y mejoran el rendimiento, ya que se reduce el tiempo de actualización de los metadatos. Por ejemplo, podría ver un fragmento de 1 TB en un fragmento aunque haya configurado chunkSize en 256 MB.

chunkSize afecta a lo siguiente:

  • Cantidad máxima de datos que el balanceador intenta migrar entre dos particiones en una única operación de migración de fragmentos.

  • Cantidad de datos migrados durante la desfragmentación.

  • Introducción a la fragmentación, consulte Fragmentación

  • Particionar datos con fragmentos, consulte Particionado de datos con fragmentos

  • Configurar el equilibrio de la colección, consulte configureCollectionBalancing

  • Examinar el estado de la colección de balanceadores, ver balancerCollectionStatus

  • Configurar ventanas de equilibrio de fragmentos, consulte Programar la ventana de equilibrio

  • Monitorear fragmentos usando MongoDB Atlas, ver Revisar los clústeres sharded

Volver

Config Database

En esta página