Docs Menu
Docs Home
/ /

sh.unshardCollection (método mongosh)

sh.unshardCollection( namespace, shardID )

Desharda 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.

Importante

Método mongosh

Esta página documenta a Método mongosh. Esta no es la documentación de comandos de base de datos ni de controladores específicos del lenguaje, como Node.js.

Para el comando de base de datos, consulta el comando unshardCollection.

Para los drivers de API de MongoDB, consulte la documentación del driver de MongoDB específica del lenguaje.

El método sh.unshardCollection requiere especificar la partición que recibirá los datos de la colección. Con el comando unshardCollection, si no especificas la partición de destino, el clúster selecciona automáticamente la partición con menos datos.

Si la colección utiliza particionado por zonas, primero debes remover las asociaciones de rango y particionar desde la zona antes de desparticionar 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 las posibilidades de que los nodos secundarios estén desactualizados, aumente el tamaño del oplog.

Para obtener más detalles, consulta el Oplog del set de réplicas.

sh.unshardCollection tiene la siguiente sintaxis:

sh.unshardCollection( namespace, shardID )
Parameter
Tipo
Descripción

namespace

string

Especifique o base de datos e a colección para desvincular.

shardID

string

Especifica el ID de la partición receptora. A medida que MongoDB quita la partición de la colección, mueve los datos de la colección de los shards actuales a este shard específico.

Este método 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

  • sh.unshardCollection() solo se puede ejecutar en clústeres segmentados.

  • sh.unshardCollection() solo puede operar en colecciones fragmentadas.

  • sh.unshardCollection() solo puede operar en una única colección a la vez.

  • sh.unshardCollection() tiene una duración mínima de 5 minutos.

  • Debe reconstruir los índices de búsqueda de Atlas después de que se ejecute sh.unshardCollection().

  • writeConcernMajorityJournalDefault debe ser true.

  • 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 sh.unshardCollection() se complete.

  • No puedes ejecutar las siguientes operaciones en la colección que se está desfragmentando mientras sh.unshardCollection() está en curso:

  • No puedes ejecutar las siguientes operaciones en el clúster mientras unshardCollection está en curso:

  • Las creaciones de índices que ocurran mientras sh.unshardCollection() esté en curso podrían fallar silenciosamente.

    • No crear índices mientras sh.unshardCollection() esté en curso.

    • No llame a sh.unshardCollection() si hay creaciones de índices en curso.

  • Para evitar errores, MongoDB descarta automáticamente las zonas de tu colección cuando ejecutas unshardCollection.

  • Si la colección que se está desfragmentando utiliza Atlas Search, el índice de búsqueda se vuelve inaccesible cuando se completa la operación de desfragmentación. Debe reconstruir manualmente el índice de búsqueda una vez que se complete la operación de eliminación de particiones.

  • Si la colección que estás desvinculando está archivada en Atlas Online Archives, los ficheros del fichero en linea se marcan como Orphaned una vez que se completa la operación de desvinculación. Puedes crear otro fichero en linea para la misma base de datos, colección y campos que el fichero huérfano, siempre y cuando no exista otro fichero para esa misma combinación en el estado Active.

Antes de desfragmentar tu colección, asegúrate de cumplir los siguientes requisitos:

  • Su aplicación puede tolerar un período de dos segundos en el que la colección afectada bloquea los guardados. Durante el periodo en el que las écritas están bloqueadas, tu aplicación experimenta un aumento en la 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 ) * 2 bytes 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%.

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.

Este ejemplo desfragmenta una colección llamada inventory en la base de datos app a la partición número shard02.

sh.unshardCollection( "app.inventory", "shard02" )

Para obtener una lista de los ID de partición disponibles, ejecute sh.status(). Para más detalles, vea sh.status() Output.

Este ejemplo desacopla una colección que utiliza zonas:

1

Para detener el equilibrador, ejecute el método sh.stopBalancer():

sh.stopBalancer()
2

Para identificar los rangos asociados a las zonas, ejecute el método sh.status() y observe los rangos en el campo chunks para cada colección particionada:

sh.status()
3

Para remover un rango de una zona, utiliza el método sh.removeRangeFromZone():

sh.removeRangeFromZone( {
"app.inventory",
{ size: 100 },
{ size: 500 }
} )

Repita este paso hasta que haya eliminado todos los rangos de las zonas que utiliza la colección.

4

Para remover una partición de una zona, ejecuta el método sh.removeShardFromZone():

sh.removeShardFromZone( "shard01", "mid" )

Repite hasta que hayas eliminado la partición de todas las zonas.

5

Para reiniciar el equilibrador, ejecute el método sh.startBalancer():

sh.startBalancer()
6

Para desfragmentar la colección, ejecute el método: sh.unshardCollection

sh.unshardCollection( "app.inventory", "shard01" )

Volver

sh.detenerBalanceador

En esta página