Definición
moveChunkComando administrativo interno. Movimientos chunks between partición. Emita el comando
moveChunka través de una instancia demongosmientras se utiliza la base de datos admin. Utilice los siguientes formularios:Tip
En
mongosh, este comando también se puede ejecutar a través del método asistentesh.moveChunk().Los métodos asistente son convenientes para usuarios de
mongosh, pero es posible que no proporcionen el mismo nivel de información que los comandos de base de datos. En los casos en que no se necesite la conveniencia o se requieran campos de retorno adicionales, utiliza el comando de base de datos.db.adminCommand( { moveChunk : <namespace> , find : <query> , to : <string>, forceJumbo: <boolean>, _secondaryThrottle : <boolean>, writeConcern: <document>, _waitForDelete : <boolean> } ) Alternativamente:
db.adminCommand( { moveChunk : <namespace> , bounds : <array> , to : <string>, forceJumbo: <boolean>, _secondaryThrottle : <boolean>, writeConcern: <document>, _waitForDelete : <boolean> } ) El comando
moveChunktiene los siguientes campos:CampoTipoDescripciónmoveChunkstring
findDocumento
Una coincidencia exacta en la clave de partición que especifica el valor de la clave de partición del fragmento a mover. Especifique el campo
boundso el campofind, pero no ambos. No utilice elfindcampo para seleccionar fragmentos en colecciones que utilicen una clave de partición con hash.boundsarreglo
Los límites de un determinado fragmento para mover. El arreglo debe consistir en dos documentos que especifiquen los valores inferior y superior del valor de la clave de partición de un fragmento a mover. Especifica el campo
boundso el campofind, pero no ambos. Utiliceboundspara seleccionar fragments en colecciones que utilizan una clave de partición con hash.tostring
El nombre de la partición de destino para el fragmento.
booleano
opcional. Una bandera que determina si el comando puede mover un fragmento que es demasiado grande para migrar. La fragmento puede estar marcada o no como jumbo.
Si
true, el comando puede mover el fragmento.Si
false, el comando no puede mover el fragmento.
El valor es por defecto
false.ADVERTENCIA:
El comando
moveChunkconforceJumbo=truebloquea las operaciones de guardado en la colección.Esta opción provoca que la partición migre fragmentos, incluso cuando son más grandes que el tamaño de fragmento configurado. La colección permanece no disponible para guardados durante la migración.
Para migrar estos grandes fragmentos sin este largo período de bloqueo, consulta Balancear rangos que exceden el límite de tamaño en su lugar.
_secondaryThrottlebooleano
opcional. Para WiredTiger, por defecto es
false.Si
true, por defecto, cada movimiento de documento durante la migración de fragmentos se propaga al menos a un secundario antes de que el balanceador continúe con el siguiente documento. Esto es equivalente a un nivel de confirmación de escritura (write concern) de{ w: 2 }.Utiliza la opción
writeConcernpara especificar un nivel de confirmación de escritura (write concern) diferente.Si
false, el balanceador no espera la replicación en un secundario y continúa con el siguiente documento.
Para obtener más información, consulte Acelerador secundario.
writeConcernDocumento
opcional. Un documento que expresa el nivel de confirmación de escritura (write concern) que el
_secondaryThrottleutilizará para esperar a los secundarios durante la migración de fragmentos.writeConcernrequiere_secondaryThrottle: true._waitForDeletebooleano
opcional. Si se establece en
true, la fase de borrar de una operaciónmoveChunkes bloqueante._waitForDeletees por defectofalse.Cuando el campo
_waitForDeleteestá configurado, MongoDB no espera el retrasoorphanCleanupDelaySecsantes de realizar el borrado de rango. Si utiliza el parámetro_waitForDeletey hay operaciones de lectura en réplicas secundarias, es posible que la lectura omita documentos debido a la fase de borrado de la migración.El valor de
boundstoma la forma:[ { hashedField : <minValue> } , { hashedField : <maxValue> } ] La sección Migración de fragmentos describe cómo se mueven los fragmentos entre las particiones de MongoDB.
Compatibilidad
Este comando está disponible en implementaciones alojadas en los siguientes entornos:
MongoDB Atlas: El servicio totalmente gestionado para implementaciones de MongoDB en la nube
MongoDB Enterprise: La versión basada en suscripción y autogestionada de MongoDB
MongoDB Community: La versión de MongoDB con código fuente disponible, de uso gratuito y autogestionada.
Considerations
Utiliza solo el moveChunk en circunstancias especiales, como al preparar tu clúster compartido para una primera ingesta de datos o una operación masiva de importación. En la mayoría de los casos, permite que el balanceador cree y equilibre fragmentos en clústeres fragmentados. Consulta Crear rangos en un clúster particionado para obtener más información.
Comportamiento
Indexes
moveChunk requiere que todos los índices existan en el destino (es decir, to ) partición antes de la migración y devuelve un error si un índice requerido no existe.
Meta Data Error
moveChunk devuelve el siguiente mensaje de error si otra operación de metadatos está en curso en la colección chunks:
errmsg: "The collection's metadata lock is already taken."
Si otro proceso, como un proceso balanceador, cambia los metadatos mientras moveChunk está en ejecución, puede aparecer este error. Puede volver a intentar la operación moveChunk sin efectos secundarios.
maxCatchUpPercentageBeforeBlockingWrites Server Parameter
A partir de MongoDB 5.0, puedes establecer el maxCatchUpPercentageBeforeBlockingWrites para especificar el porcentaje máximo permitido de datos aún no migrados durante una moveChunk en comparación con el tamaño total (en MB) del fragmento que se está trasladando.