Docs Menu
Docs Home
/ /

Solucionar problemas de migraciones atascadas de fragmentos

Los clústeres particionados pueden afrontar situaciones en las que las migraciones de fragmentos se estanquen o en las que uno o más fragmentos se conviertan en jumbo. Cuando esto sucede, el equilibrador no puede distribuir los datos de manera uniforme entre las particiones. Esto puede ocasionar una utilización desigual de los recursos y un menor rendimiento del clúster.

Esta página describe las causas comunes de las migraciones de fragmentos atascadas y los fragmentos jumbo, junto con los pasos para diagnosticar y resolver estas condiciones. Si el problema persiste después de completar los pasos que se indican a continuación, comuníquese con el soporte técnico.

Verifique que su clúster esté afectado por migraciones atascadas o fragmentos jumbo.

Desde un mongos instancia, ejecutar:

sh.getBalancerState()

Si este método devuelve true, pero la distribución de los datos sigue siendo desigual, se requiere una investigación adicional.

También puedes revisar información detallada sobre el balanceador:

db.adminCommand({ balancerStatus: 1 })

Para revisar la distribución de fragmentos entre las particiones, ejecuta:

sh.status(true)

Busca:

  • Grandes diferencias en el número de fragmentos por partición

  • Fragmentos marcados como jumbo

Nota

Un fragmento marcado como jumbo no puede ser migrado por el balanceador hasta que sea dividido o reducido de tamaño de alguna manera.

Revisa los registros del servidor de configuración en busca de entradas relacionadas con el balanceo o la migración de fragmentos. Busque mensajes que indiquen:

  • Reintentos de migración

  • Migraciones abortadas

  • Fragmentos marcados como jumbo

  • Errores durante las fases de confirmación o eliminación de la migración

En los nodos de partición, revisa los registros para:

  • Tiempos de espera de adquisición de bloqueos

  • Atraso de la replicación que afecta la migración

  • Errores de espacio en disco

  • Fallas en los pasos de migración

Un fragmento se vuelve jumbo cuando supera el tamaño de fragmento configurado y no puede dividirse automáticamente.

De mongos:

sh.status(true)

Localiza los fragmentos etiquetados como jumbo.

Los fragmentos divisibles contienen varios valores únicos de valor de la clave de partición y pueden dividirse. Para resolver un fragmento jumbo, debes dividirlo manualmente:

sh.splitAt("database.collection", { shardKeyField: <value> })

Luego, reinicia el balanceador si es necesario:

sh.startBalancer()

Para aprender cuándo se debe aplicar la división manual, consulta Divide los fragmentos en un clúster fragmentado.

Fragmentos indivisibles representan un único valor de la clave de partición y no se pueden dividir. Para resolver un fragmento jumbo indivisible:

Para obtener más detalles sobre la resolución de fragmentos jumbo, consulte Borrar la bandera jumbo.

Si la clave de partición tiene una baja cardinalidad o sigue un patrón monótonamente creciente, los fragmentos podrían crecer de manera desigual y resistirse al balanceo.

Para mitigar:

  • Revisa el patrón de clave de partición utilizado por la colección.

  • Determina si la mayoría de las escrituras se destinan a un rango reducido de clave de partición. Si los valores de claves de partición de alta frecuencia están provocando que las escrituras se concentren en una sola partición, consulta Resolución de problemas con las claves de partición.

  • Considera volver a distribuir la colección utilizando una clave de partición más equitativamente distribuida.

Consulta Escoge una clave de partición para seguir las mejores prácticas.

Si el balanceador está deshabilitado, las migraciones de fragmentos no ocurren.

Comprobar el estado del balanceador:

sh.getBalancerState()

Si está desactivado, actívalo:

sh.startBalancer()

Consulte Balanceador de clústeres compartidos para obtener detalles adicionales sobre el comportamiento del balanceador.

Las operación de larga duración, las creación de índices o los cargas de trabajo intensos pueden retrasar o bloquear las migración de fragmento.

Para reducir la contienda:

  • Identifique las operaciones prolongadas de larga duración:

    db.currentOp()
  • Equilibrar el cronograma durante períodos de menor actividad de escritura.

  • Asegúrate de que haya suficiente espacio en disco disponible en todas las particiones.

Nota

La migración de fragmentos implica la clonación de datos y una fase de borrado. El espacio insuficiente en disco o un alto atraso de la replicación pueden retrasar estas fases.

Después de resolver el problema:

  • Las migraciones de fragmentos se han completado correctamente.

  • No quedan fragmentos marcados como jumbo.

  • La distribución de los fragmentos en las particiones se vuelve más uniforme.

  • El balanceador permanece activo y estable.

Vuelva a comprobar la distribución:

sh.status(true)

Si el problema persiste, recoja lo siguiente antes de ponerse en contacto con soporte técnico:

  • Salida de sh.status(true)

  • Salida de db.adminCommand({ balancerStatus: 1 })

  • Registros relevantes del servidor de configuración

  • Registros de particiones relevantes

  • Definición de clave de partición para colecciones afectadas

  • Versión de MongoDB

  • Descripción de la topología del clúster

  • Salida de sh.getShardedDataDistribution() para el recuento de fragmentos y el tamaño de los datos por partición

Volver

Resharding para agregar y remover particiones

En esta página