Definición
unshardCollectionDesharda una colección particionada existente y traslada los datos de la colección a una única partición. Cuando se desagrupa una colección, la colección no puede dividirse entre múltiples shards y la clave de partición se eliminan.
Nuevo en la versión 8.0.
Tip
En
mongosh, este comando también se puede ejecutar a travéssh.unshardCollection()de.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.Este comando debe ejecutarse en la base de datos
admin.Si la colección tiene una configuración de zona aplicada, primero debes remover las asociaciones de rango y las particiones de la zona antes de dividir la colección. Para obtener más información, consulta Zonas sin particiones.
Nota
Desfragmentar una colección es una operación intensiva en escritura que puede resultar en una mayor tasa de crecimiento del oplog. Para ayudar a mitigar esto, considera los siguientes cambios de configuración:
Para prevenir el crecimiento ilimitado del oplog, establece un tamaño fijo para el oplog.
Para reducir la posibilidad de que los secundarios queden obsoletos, aumente el tamaño del oplog.
Para obtener más detalles, consulta el Oplog del set de réplicas.
Compatibilidad
Este comando está disponible en implementaciones alojadas en los siguientes entornos:
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.
MongoDB Atlas: El servicio totalmente gestionado para implementaciones de MongoDB en la nube
Nota
Esta tarea no está disponible en los niveles gratuitos o flexibles de MongoDB Atlas.
Restricciones
No se puede utilizar unshardCollection para colecciones de cifrado consultable.
Sintaxis
db.adminCommand( { unshardCollection: "<database>.<collection>", toShard: "<shard-id>" } )
Campos de comandos
Campo | Tipo | Necesidad | Descripción |
|---|---|---|---|
| string | Requerido | Especifique o base de datos e a colección para desvincular. |
| string | Opcional | Especifica el ID de partición del destinatario. A medida que MongoDB deja de particionar la colección, mueve los datos de la colección de sus particiones actuales a esta partición específica. Si no se especifica, el clúster selecciona el fragmento con la menor cantidad de datos. |
Considerations
unshardCollectionSólo se puede ejecutar en clústeres fragmentados.unshardCollectionsolo puede operar en colecciones fragmentadas.unshardCollectionsolo puede operar en una única colección a la vez.unshardCollectiontiene una duración mínima de 5 minutos.Debe reconstruir los índices de búsqueda de Atlas después de que se ejecute
unshardCollection.No puede realizar cambios de topología, como añadir o remover particiones o pasar de servidores de configuración dedicados a embebidos, hasta que
unshardCollectionse complete.No puedes ejecutar las siguientes operaciones en la colección que se está desfragmentando mientras
unshardCollectionestá en curso:No se pueden ejecutar las siguientes operaciones en el clúster mientras
unshardCollectionesté en progreso:Las creaciones de índices que ocurran mientras
unshardCollectionesté en curso podrían fallar silenciosamente.No cree índices mientras
unshardCollectionesté en progreso.No llame a
unshardCollectionsi hay creaciones de índices en curso.
Requisitos
Antes de desfragmentar tu colección, asegúrate de cumplir los siguientes requisitos:
Su aplicación puede tolerar un periodo de dos segundos en el que la colección afectada bloquea las escrituras. Durante este periodo, la aplicación experimenta un aumento de latencia.
Su base de datos cumple con estos requisitos de recursos:
Asegúrate de que la partición a la que mueves la colección tenga suficiente espacio de almacenamiento para la colección y sus índices. La partición de destino requiere al menos
( Collection storage size + Index Size ) * 2bytes disponibles.Asegúrate de que tu capacidad de E/S esté por debajo de 50%.
Asegúrate de que la carga de tu CPU esté por debajo del 80%.
Comportamiento
Desfragmentar zonas
Para desfragmentar una colección que utiliza particionado por zona, primero debes detener el equilibrador y luego remover el rango y la partición de la zona.
Para obtener un ejemplo, consulta Desfragmenta una colección particionada por zonas.
Ejemplos
Eliminar partición de una colección
El siguiente ejemplo desfragmenta la colección sales.eu_accounts:
db.adminCommand( { unshardCollection: "sales.eu_accounts" } )
Liberar partición en una partición específica
El siguiente ejemplo desfragmenta las colecciones sales.us_accounts y ubica los datos de la colección en shard1:
db.adminCommand( { unshardCollection: "sales.eu_accounts", toShard: "shard1" } )
Desfragmenta una colección particionada por zona
El siguiente ejemplo desfragmenta una colección que utiliza zonas:
Detén el balanceador
Para detener el balanceador, ejecute el balancerStop comando:
db.adminCommand( { balancerStop: 1 } )
Identificar asociaciones de rango.
Para identificar los rangos asociados con las zonas, ejecute el sh.status() método y anote los rangos en el chunks campo para cada colección fragmentada:
sh.status()
Eliminar rango de la zona
Para remover un rango de una zona, ejecuta el comando updateZoneKeyRange:
db.adminCommand( { updateZoneKeyRange: "app.inventory", min: 100, max: 500, zone: null } )
Repita este paso hasta que haya eliminado todos los rangos de las zonas que utiliza la colección.
Eliminar los fragmentos de la zona
Para eliminar fragmentos de la zona, ejecute el removeShardFromZone comando
db.adminCommand( { removeShardFromZone: "shard01", zone: "us" } )
Repita hasta que haya eliminado todos los fragmentos de colección de las zonas.
Reiniciar el balanceador
Para reiniciar el balanceador, ejecuta el comando balancerStart:
db.adminCommand( { balancerStart: 1 } )