Docs Menu
Docs Home
/ /

Eliminar partición de una colección

Puedes desfragmentar una colección particionada con el unshardCollection comando. Cuando se desfragmenta una colección, esta no puede particionarse en múltiples particiones y la clave de partición se elimina.

Por defecto, cuando desfragmentas una colección, MongoDB mueve los datos de la colección al partición con la menor cantidad de datos. Alternativamente, puedes especificar en qué partición colocar los datos.

Puedes realizar esta tarea en las implementaciones alojadas en los siguientes entornos:

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

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

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

  • unshardCollection solo puede operar en colecciones fragmentadas.

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

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

  • Debe reconstruir los índices de búsqueda de MongoDB Search después de ejecutar 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 unshardCollection se complete.

  • No puedes ejecutar las siguientes operaciones en la colección que se está desfragmentando mientras 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 unshardCollection esté en curso podrían fallar silenciosamente.

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

    • No llame a 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 está desfragmentando utiliza MongoDB Search, el índice de búsqueda se vuelve inaccesible cuando se completa la operación de desfragmentación. Necesitas 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.

Si tu implementación tiene control de acceso habilitado, el rol enableSharding te otorga acceso para ejecutar el comando unshardCollection.

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

1

Si deseas colocar los datos de tu colección particionada en una partición específica, necesitas el nombre de la partición objetivo.

Para ver la lista de nombres de particiones en tu clúster, utiliza el comando listShards:

db.adminCommand( { listShards: 1 } )

El campo shards._id lista el nombre de cada partición.

2

Para desfragmentar una colección, ejecuta el comando unshardCollection. El siguiente ejemplo desfragmenta una colección llamada us_accounts en la base de datos sales:

db.adminCommand( {
unshardCollection: "sales.us_accounts",
toShard: "shard1"
} )

Una vez completada la operación de desfragmentación, los datos en la colección us_accounts están en shard1. Si omites el campo toShard, los datos se colocarán en la partición con menor cantidad de datos.

3

Para confirmar que la colección no tiene fragmentación, utiliza la etapa $shardedDataDistribution e intenta hacer coincidir con el namespace no particionado:

db.aggregate( [
{ $shardedDataDistribution: { } },
{ $match: { "ns": "sales.us_accounts" } }
] )

Si la agregación no devuelve ningún dato, la colección no está particionada.

Volver

Colecciones no particionadas

En esta página