Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs Menu
Docs Home
/ /

Solución de problemas de migraciones de fragmentos atascadas

Los clústeres fragmentados pueden experimentar situaciones en las que las migraciones de fragmentos se estancan o uno o más fragmentos se vuelven gigantes. Cuando esto ocurre, el balanceador no puede distribuir los datos de manera uniforme entre los fragmentos. Esto puede provocar una utilización desigual de los recursos y una degradación del rendimiento del clúster.

Esta página describe las causas comunes de migraciones de fragmentos y fragmentos jumbo bloqueados, junto con los pasos para diagnosticar y resolver estos problemas. Si el problema persiste después de seguir los pasos a continuación, comuníquese con el soporte técnico.

Verifique que su clúster se vea afectado por migraciones estancadas 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 puede consultar información detallada sobre el equilibrador:

db.adminCommand({ balancerStatus: 1 })

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

sh.status(true)

Buscar:

  • Grandes diferencias en el número de fragmentos por shard.

  • Fragmentos marcados como jumbo

Nota

Un fragmento marcado como jumbo no puede ser migrado por el balanceador hasta que se divida o se reduzca su tamaño de alguna otra manera.

Revise 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

  • Trozos marcados como jumbo

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

En los nodos de fragmentación, revise los registros para lo siguiente:

  • Tiempos de espera para la adquisición de bloqueos

  • Retraso en la replicación que afecta a la migración

  • Errores de espacio en disco

  • Fallos en el paso de migración

Un fragmento se considera de gran tamaño cuando excede el tamaño de fragmento configurado y no se puede dividir automáticamente.

Desde mongos:

sh.status(true)

Localiza los fragmentos etiquetados como jumbo.

Los fragmentos divisibles contienen múltiples valores de clave de fragmento únicos y se pueden dividir. Para resolver un fragmento jumbo divisible, divídalo manualmente:

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

Luego, reinicie el balanceador si es necesario:

sh.startBalancer()

Para saber cuándo es apropiado realizar la división manual, consulte Fragmentos divididos en un clúster fragmentado.

Losfragmentos indivisibles representan un único valor de clave de fragmento y no se pueden dividir. Para resolver un fragmento jumbo indivisible:

Para obtener más detalles sobre cómo resolver bloques jumbo,consulte la bandera Clear.jumbo

Si la clave de fragmentación tiene una cardinalidad baja o sigue un patrón monótonamente creciente, los fragmentos pueden crecer de forma desigual y resistirse al equilibrio.

Para mitigar:

  • Revise el patrón de clave de fragmentación utilizado por la colección.

  • Determine si la mayoría de las escrituras se dirigen a un rango estrecho de claves de fragmento. Si los valores de clave de fragmento de alta frecuencia provocan que las escrituras se concentren en un solo fragmento, consulte la sección Solución de problemas de claves de fragmento.

  • Considere la posibilidad de redistribuir la colección utilizando una clave de fragmentación con una distribución más uniforme.

Consulte la sección "Elegir una clave de fragmentación" para conocer las mejores prácticas.

Si el balanceador está desactivado, no se producen migraciones de fragmentos.

Comprobar el estado del balanceador:

sh.getBalancerState()

Si está desactivado, actívelo:

sh.startBalancer()

Consulte la sección "Balanceador de clúster fragmentado" para obtener más detalles sobre el comportamiento del balanceador.

Las operaciones de larga duración, la creación de índices o las cargas de trabajo de escritura intensas pueden retrasar o bloquear las migraciones de fragmentos.

Para reducir la contienda:

  • Identificar operaciones de larga duración:

    db.currentOp()
  • Equilibrio de horarios durante períodos de menor actividad de escritura.

  • Asegúrese 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 eliminación. La falta de espacio en disco o un retraso en la replicación pueden demorar estas fases.

Tras resolver el problema:

  • Las migraciones de fragmentos se completaron con éxito.

  • No quedan fragmentos marcados como jumbo.

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

  • El equilibrador permanece activo y estable.

Vuelva a comprobar la distribución:

sh.status(true)

Si el problema persiste, recopile la siguiente información antes de ponerse en contacto con el soporte técnico:

  • Salida de sh.status(true)

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

  • Registros relevantes del servidor de configuración

  • Registros de fragmentos relevantes

  • Definición de clave de fragmentación para las 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 fragmento.

Volver

Resharding para agregar y remover particiones

En esta página