¿Por qué después de eliminar una colección de más de 110 GB, mi directorio / var / lib / mongodb todavía tiene el mismo tamaño?

12

Tengo algunos problemas con MongoDB y el uso del espacio. En particular, una vez solía tener una gran colección de aproximadamente 600 millones de registros con un total de más de 110 GB en disco. Recientemente decidí descartarlo porque los datos estaban desactualizados, para hacerlo descarté la colección a través de la interfaz web de Rockmongo. En consecuencia, rockmongo ya no me muestra la colección, sin embargo, el uso de mi disco no ha cambiado en absoluto.

¿Hay alguna operación de limpieza que no conozca, que deba ejecutarse para sincronizar la base de datos con los archivos de la base de datos en el disco?

He intentado realizar una "reparación" pero el sistema se queja de que no hay suficiente espacio en el disco ... eso es porque MongoDB lo usa todo.

Tunnuz
fuente

Respuestas:

19

Al igual que con la mayoría de los sistemas de bases de datos, los archivos de la base de datos no se reducen cuando elimina datos, los datos simplemente se eliminan / marcan como eliminados y el espacio se reutiliza.

Tendrá que correr db.repairDatabase()al espacio compacto como se indica aquí

nos
fuente
2
El espacio en el disco duro era demasiado bajo para hacer eso. Sin embargo he resuelto de esta manera: mongodump, oldDatabase.dropDatabase(), mongorestore --db newDatabase dump/oldDatabase.
Tunnuz
4

Si bien el enfoque mongodump / drop / mongorestore anterior funcionará bien desde una perspectiva técnica, requerirá que desconecte la base de datos mientras lo hace, lo que sería un evento que afectaría el servicio.

Si desea hacer esto sin tiempo de inactividad Y si está utilizando los conjuntos de réplicas MongoDB [1], puede hacerlo así:

  1. Seleccione un miembro y detenga el MongoDB allí (servicio mongodb stop). Si esto era PRIMARIO, espere a que otro miembro sea elegido PRIMARIO.
  2. Elimine los archivos de datos de este miembro (cd / var / lib / mongodb; rm *).
  3. Reinicie el servicio MongoDB nuevamente (inicio del servicio mongodb).
  4. Espere a que el miembro se vuelva a sincronizar a PRIMARY (rs.status ()).
  5. Esto reconstruirá solo los archivos de datos necesarios (más pequeños).

Luego repita los pasos anteriores para cada uno de los otros miembros del conjunto de réplicas.

[1] https://docs.mongodb.org/manual/tutorial/deploy-replica-set )

James Mernin
fuente