Definición
compactReescribe y desfragmenta todos los datos e índices de una colección. En WiredTiger bases de datos, este comando liberará espacio en disco no necesario para el sistema operativo.
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
Importante
Este comando no es compatible con los clústeres M,0 M2 y5 M. Para obtener más información, consulte Comandos no compatibles.
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.
Sintaxis
El comando tiene la siguiente sintaxis:
{ compact: <collection name> }
Campos de comandos
El comando toma los siguientes campos:
Nota
A partir de MongoDB 4.2
MongoDB remueve el motor de almacenamiento MMAPv1 y las opciones específicas de MMAPv1 paddingFactor, paddingBytes, preservePadding para compact.
Campo | Tipo | Descripción |
|---|---|---|
| string | El nombre de la colección. |
| flag | opcional. A partir de la versión4.4, si se especifica, obliga a que A partir de la v4.4, |
| any | Opcional. Un comentario proporcionado por el usuario para adjuntar a este comando. Una vez configurado, este comentario aparece junto a los registros de este comando en las siguientes ubicaciones:
Un comentario puede ser de cualquier tipo BSON válido (string, objeto, arreglo, etc.). Nuevo en la versión 4.4. |
compact Privilegios requeridos
Para los clústeres que aplican la autenticación, debes autenticarte como usuario que tenga la acción de privilegio compact en la colección de destino. El rol dbAdmin proporciona los privilegios necesarios para ejecutar compact en colecciones que no son del sistema.
Para obtener más información sobre la configuración del documento resource, consulta Documento de recursos en implementaciones autogestionadas.
Para agregar el dbAdmin o el rol personalizado a un usuario existente, use db.grantRolesToUser() o db.updateUser(). La siguiente operación concede el rol personalizado compact al myCompactUser en la base de datos admin:
use admin db.grantRolesToUser("myCompactUser", [ "dbAdmin" | "myCustomCompactRole" ] )
Para agregar el dbAdmin o el rol personalizado a un nuevo usuario, especifique el rol en el arreglo roles del método db.createUser() al crear el usuario.
use admin db.createUser( { user: "myCompactUser", pwd: "myCompactUserPassword", roles: [ { role: "dbAdmin", db: "<database>" } | "myCustomCompactRole" ] } )
Comportamiento
Bloqueo
El comportamiento de bloqueo depende de la versión.
Versión | Comportamiento de bloqueo |
4.4 |
|
Publicar 4.4.17 y 5.0.12 |
|
Para ejecutar compact en un set de réplicas, consulte Set de réplicas para consideraciones adicionales.
Supervisión del progreso
Para comprobar el progreso de la operación compact, supervise la entrada de registro mongod o ejecute db.currentOp() desde otra instancia de shell.
Finalización de la operación
Si terminas compact con el método db.killOp() o reinicias el servidor antes de que finalice la operación, compact termina y puede fallar en su intento de liberar espacio en disco al sistema operativo.
Espacio en disco
Para ver cómo cambia el espacio de almacenamiento de la colección, ejecuta el comando collStats antes y después de la compactación.
En WiredTiger, compact intenta reducir el espacio de almacenamiento necesario para los datos e índices de una colección, liberando así espacio de disco innecesario para el sistema operativo. La eficacia de esta operación depende de la carga de trabajo y no se puede recuperar espacio de disco. Este comando es útil si ha eliminado una gran cantidad de datos de la colección y no planea reemplazarlos.
compact puede requerir espacio adicional en disco para ejecutar en bases de datos WiredTiger.
Sets de réplicas
Puede usar compact en colecciones e índices que se almacenan en un set de réplicas; sin embargo, hay algunas consideraciones importantes:
El nodo primario no replica el comando
compacta los nodos secundarios.Deberías ejecutar
compacten nodos secundarios siempre que sea posible. Si no puedes ejecutarcompacten los nodos secundarios, consulta la opción forzar.A partir de MongoDB 5.0.12:
Un nodo secundario puede replicarse mientras
compactse está ejecutando.Se permiten las operaciones de lectura.
Para ejecutar compact en un clúster
Reasigne el nodo primario.
Para bajar el nodo primario actual y activar una elección, utilice el método rs.stepDown(). Para nominar un nodo secundario en particular, ajuste la prioridad del nodo.
Consideraciones específicas de la versión para nodos secundarios
El comportamiento de bloqueo en los nodos secundarios depende de la versión.
Versión | Comportamiento de bloqueo |
4.4 |
|
Publicar 4.4.17 y 5.0.12 |
|
Mientras se ejecuta el comando compact, el set de réplicas permanece en un estado de SECONDARY.
Para obtener más información sobre los estados del set de réplicas, consulte Estados del nodo del set de réplicas.
Para el mantenimiento y la disponibilidad de los Sets de réplicas, consulta Realizar mantenimiento de los miembros del Set de réplicas autogestionados.
Clústeres fragmentados
compact solo se aplica a mongod instancias. En un entorno **particionado**, ejecuta compact en cada **partición** por separado como una operación de mantenimiento.
Construcción de índice
mongod reconstruye todos los índices en paralelo después de la operación compact.