Docs Menu
Docs Home
/ /

Desfragmentar colecciones fragmentadas

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 anteriores a 7.0

Desfragmente las colecciones solo si experimenta demoras en la operación CRUD cuando el balanceador migra fragmentos o se inicia un nodo.

A partir de MongoDB 6.0, el alto tráfico de escritura no debe causar fragmentación. Las migraciones de fragmentos causan fragmentación.

Antes de MongoDB 6.0

Desfragmente las colecciones solo si experimenta tiempos de operación CRUD más largos durante las actualizaciones de metadatos. En versiones de MongoDB anteriores a 6.0, una colección fragmentada se fragmenta cuando su tamaño aumenta significativamente debido a numerosas operaciones de inserción o actualización.

Para desfragmentar una colección fragmentada, utilice el OpciónconfigureCollectionBalancingdel comando. Esta opción está disponible a partir de MongoDB.defragmentCollection 6.0

Tenga en cuenta estos aspectos antes de desfragmentar colecciones:

  • La desfragmentación podría provocar muchas actualizaciones de metadatos en los fragmentos. Si sus operaciones CRUD ya tardan más de lo habitual durante las migraciones, debería ejecutar la desfragmentación solo durante un periodo de equilibrio de fragmentos 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 instantáneas e indirectamente, las transacciones, podrían fallar con errores de historial de fragmentos obsoletos.

    • El historial de ubicación registra los fragmentos donde se almacenó un fragmento. La desfragmentación borra el historial de ubicación y algunas operaciones podrían fallar, pero normalmente se resuelven después de unos cinco minutos.

  • La desfragmentación afecta la ubicación de los documentos de una colección al mover datos entre fragmentos. Si una colección tiene rangos de datos a los que se accede con frecuencia, tras desfragmentarla, es posible que estos datos se encuentren en un solo fragmento. Esto podría reducir el rendimiento de las operaciones CRUD al concentrar la carga de trabajo en un solo fragmento en lugar de en varios.

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 defragmentCollection campo devuelto por el comando solo configureCollectionBalancing es true cuando se ejecuta la desfragmentación.

Una vez que la desfragmentación finaliza automáticamente o usted la detiene manualmente, 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 equilibrador de MongoDB, consulte Equilibrador 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 recopilación compartidos entre dos fragmentos difieren en tres o más veces el valor configurado chunkSize, el equilibrador migra fragmentos entre los fragmentos.

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 de actualización de los metadatos del fragmento es proporcional al tamaño de la tabla de enrutamiento. Las operaciones CRUD en la colección se bloquean temporalmente mientras se actualizan los metadatos del fragmento, y una tabla de enrutamiento más pequeña implica menores retrasos 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 para limitar la velocidad de los comandos de división y fusión que ejecuta el chunkDefragmentationThrottlingMS balanceador.

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

También puedes configurar una zona de fragmentos. Una zona de fragmentos se basa en la clave de fragmento y puedes asociar cada zona con uno o más fragmentos de 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 lo siguiente:

  • Cantidad máxima de datos que el balanceador intenta migrar entre dos fragmentos en una sola 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 del balanceador, ver balancerCollectionStatus

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

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

Volver

Config Database

En esta página