Quiero reducir el tamaño de los archivos de datos recuperando el espacio eliminado, pero no puedo ejecutar db.repairDatabase()
, porque el espacio libre en el disco no es suficiente.Cómo reclamar espacio eliminado sin `db.repairDatabase()`?
Respuesta
La respuesta original a esta pregunta es aquí: Reducing MongoDB database file size
realmente no hay nada fuera de repair
que recuperar espacio. El compact
debería permitirle ir mucho más tiempo en el espacio existente. De lo contrario, tendrá que migrar a una unidad más grande.
Una forma de hacerlo es utilizar un secundario fuera de línea de su conjunto de réplicas. Esto debería darle una ventana completa de mantenimiento para migrar, reparar, retroceder y volver a subir.
Si no está ejecutando un conjunto de réplicas, es hora de hacer eso.
¿Esta respuesta sigue siendo válida a partir de ahora? –
Desde que se publicó esta respuesta, MongoDB ha agregado WiredTiger para almacenar archivos. WiredTiger es mucho más eficiente en términos de uso de disco, sin embargo, no puede implementarlo "en el lugar". Por lo tanto, las respuestas anteriores aún se deben aplicar. –
Puede ejecutar el comando compact
en una sola colección, o una por una en todas las colecciones que desee contraer.
http://www.mongodb.org/display/DOCS/Compact+Command
db.runCommand({ compact : 'mycollectionname' })
Como se señaló en los comentarios, yo estaba equivocada, compacto en realidad no recuperar espacio en el disco, sólo se desfragmenta y reconstruye los índices de recogida.
En su lugar, podría utilizar la opción "--repairpath" si tiene otra unidad disponible que tiene espacio libre disponible.
Por ejemplo:
mongod --dbpath /data/db --repair --repairpath /data/db0
se muestra aquí: http://docs.mongodb.org/manual/tutorial/recover-data-following-unexpected-shutdown/
Esto realmente no reclama espacio en el disco, estoy bastante seguro. –
Solo un aviso, de acuerdo con los documentos, '--repairpath' es," solo está disponible para la instancia de mongod que usa el motor de almacenamiento MMAPv1 ". https://docs.mongodb.com/manual/reference/program/mongod/#cmdoption--repairpath – Grinn
Hay otra opción, si está utilizando un conjunto de réplicas, pero con muchas advertencias. Puede conmutar por error a otro miembro del conjunto, luego eliminar los archivos en el primario anterior y hacer una resincronización completa. Una resincronización completa reescribe los archivos desde cero de forma similar a una reparación, pero también tendrá que volver a generar los índices. Esto no debe hacerse a la ligera.
Si sigue este camino, mi recomendación sería tener un conjunto de réplicas de 3 miembros antes de hacer esto para la recuperación de espacio en disco, de modo que en cualquier momento cuando un miembro esté sincronizando desde cero tenga 2 miembros completamente operativos.
Si no tiene un conjunto de réplicas, le recomiendo que cree una, con dos secundarias. Cuando los sincronices inicialmente, estarás creando una buena versión sin fragmentar y sin relleno de tus datos. Más aquí:
http://www.mongodb.org/display/DOCS/Replica+Set+Configuration
Puede que también haga un mongodump manual y mongorestore. Eso es básicamente lo mismo que reparaDatabase. De esta forma, puede volcarlo y restaurarlo a/desde una máquina diferente con suficiente espacio en disco.
+1 puede escribir una secuencia de comandos para hacer un mongodump/mongorestore en cada nodo –
ESTO. Asegúrese de colocar el db primero antes de restaurarlo, para reclamar el espacio. Por supuesto, esta opción significa un poco de tiempo de inactividad, ¡pero para eso es 3AM! – CommaToast
Si está ejecutando un conjunto de réplicas, querrá emitir una resincronización en cada uno de sus secundarios, uno a la vez. Una vez que esto se haya completado, reduzca su primario y vuelva a sincronizar el secundario recientemente asignado.
Para volver a sincronizar, detenga su instancia de mongod, elimine los locales e inicie la copia de seguridad del proceso. Mire los registros para asegurarse de que todo vuelva a comenzar correctamente y se haya iniciado la resincronización.
Si tiene muchos datos/índices, asegúrese de que su oplog sea lo suficientemente grande, de lo contrario, es probable que quede obsoleto.
- 1. ¿Auto compacto el espacio eliminado en mongodb?
- 2. reclamar el espacio después de una gran eliminación en el oráculo
- 3. :: sin espacio de nombres
- 4. ¿Se ha eliminado de STL std :: queue sin destruir el objeto eliminado?
- 5. ¿Cómo se carga el xib eliminado?
- 6. ¿Cómo reiniciar un servicio eliminado automáticamente?
- 7. ¿Cómo recuperar el archivo eliminado en TortoiseSVN?
- 8. Cómo localizar y recuperar un archivo eliminado
- 9. Crear DMG sin espacio adicional
- 10. <img> sin espacio
- 11. SelectSingleNode sin espacio de nombres
- 12. Git: Buscar código eliminado
- 13. Dividir una cuerda por un espacio sin quitar el espacio?
- 14. ¿Devolviendo una matriz sin un elemento eliminado? ¿Usar empalme() sin cambiar la matriz?
- 15. centos espacio libre en el disco sin actualizar
- 16. ¿Se ha eliminado definitivamente la compatibilidad del espacio aéreo en WPF 4.5?
- 17. ¿Cómo saber qué objeto ha sido eliminado?
- 18. TFS 2010: ¿cómo recuperar un archivo eliminado?
- 19. ¿Cómo restauro un archivo eliminado en CVS?
- 20. Imprimir sin espacio en python 3
- 21. Cómo reemplazar un personaje en NSString sin insertar un espacio?
- 22. ¿Cómo conseguir un espacio de nombres sin un nombre?
- 23. ¿Cómo creo dos cuadros sin espacio entre ellos?
- 24. ¿Cómo copio/clono un repositorio git sin perder espacio?
- 25. ¿Cómo puedo hacer un espacio sin interrupciones en reStructuredText?
- 26. Cómo finalizar un nombre de variable en cadena sin espacio
- 27. ¿Cómo puedo obtener awk para imprimir sin espacio en blanco?
- 28. cómo reclamar atómicamente una fila o recurso usando ACTUALIZAR en mysql
- 29. Restaurar archivo eliminado del repositorio
- 30. WPF GroupBox sin espacio de cabecera
¿Puede mover sus archivos a otro disco/máquina y hacer esto? Creo que este es uno de los puntos dolorosos en el conjunto de herramientas de mongo existente: qué hacer cuando se queda sin espacio en disco. –