Ich möchte die Größe von Datendateien durch Wiederherstellen von gelöschtem Speicherplatz verkleinern, aber ich kann db.repairDatabase()
nicht ausführen, weil freier Speicherplatz nicht ausreicht.Wie man gelöschten Raum ohne `db.repairDatabase()` zurückfordert?
Antwort
Die ursprüngliche Antwort auf diese Frage ist hier: Reducing MongoDB database file size
Es gibt wirklich nichts außerhalb von repair
, die den Raum zurückfordern wird. Die compact
sollte es Ihnen ermöglichen, viel länger auf dem vorhandenen Speicherplatz zu gehen. Andernfalls müssen Sie auf eine größere Festplatte migrieren.
Eine Möglichkeit, dies zu tun, besteht darin, eine sekundäre Offline-Kopie von Ihrem Replikatsatz zu verwenden. Dies sollte Ihnen ein ganzes Wartungsfenster geben, um zu migrieren, zu reparieren, zurück zu bewegen und zu sichern.
Wenn Sie kein Replikat-Set ausführen, ist es an der Zeit, genau das zu tun.
Ist diese Antwort jetzt noch gültig? –
Seit dieser Antwort wurde MongoDB WiredTiger zum Speichern von Dateien hinzugefügt. WiredTiger ist weitaus effizienter in Bezug auf die Festplattennutzung, aber Sie können dies nicht "in-Place" ausführen. Daher sollten die obigen Antworten immer noch zutreffen. –
Sie können den Befehl compact
für eine einzelne Sammlung ausführen oder einzeln in allen Sammlungen, die Sie verkleinern möchten.
http://www.mongodb.org/display/DOCS/Compact+Command
db.runCommand({ compact : 'mycollectionname' })
Wie in den Kommentaren erwähnt, ich habe mich geirrt, kompakt nicht wirklich Speicherplatz zurückzufordern, es defragmentiert nur und umbaut Sammlung Indizes.
Stattdessen können Sie die Option "--repairpath" verwenden, wenn Sie ein anderes verfügbares Laufwerk haben, das über freien Speicherplatz verfügt.
Zum Beispiel:
mongod --dbpath /data/db --repair --repairpath /data/db0
Sehen Sie hier: http://docs.mongodb.org/manual/tutorial/recover-data-following-unexpected-shutdown/
Dies beansprucht nicht wirklich Speicherplatz, ich bin ziemlich sicher. –
Nur ein Heads-up, laut der Dokumentation, '--repairpath' ist" nur verfügbar für mongod-Instanz mit der MMAPv1-Speicher-Engine. " https://docs.mongodb.com/manual/reference/program/mongod/#cmdoption--repairpath – Grinn
Es gibt eine andere Option, wenn Sie ein Replikat verwenden, aber mit vielen Vorbehalten. Sie können ein Failover auf ein anderes Set-Mitglied durchführen, dann die Dateien auf dem nun ehemaligen primären Element löschen und eine vollständige Neusynchronisierung durchführen. Bei einer vollständigen Neusynchronisierung werden die Dateien wie bei einer Reparatur von Grund auf neu geschrieben, Sie müssen jedoch auch Indizes neu erstellen. Dies ist nicht leichtfertig zu tun.
Wenn Sie diesen Pfad durchgehen, würde ich eine 3-Mitglieder-Replik festlegen, bevor Sie dies für die Speicherplatz-Wiederherstellung tun, so dass zu jeder Zeit, wenn ein Mitglied von Grund auf neu synchronisiert hat 2 Mitglieder voll funktionsfähig.
Wenn Sie kein Replikatset haben, empfehle ich, eines mit zwei Secondaries zu erstellen. Wenn Sie sie zu Beginn synchronisieren, erstellen Sie eine schöne unfragmentierte und nicht gepolsterte Version Ihrer Daten. Mehr hier:
http://www.mongodb.org/display/DOCS/Replica+Set+Configuration
Sie können auch eine manuelle mongodump und mongorestore tun. Das ist im Grunde dasselbe, was repairDatabase tut. Auf diese Weise können Sie Daten auf einem anderen Computer mit genügend Speicherplatz freigeben und wiederherstellen.
+1 Sie können einfach ein Skript schreiben, um einen mongodump/mongorestore auf jedem Knoten zu erstellen –
DIESE. Stellen Sie sicher, dass Sie die DB zuerst löschen, bevor Sie sie wiederherstellen, um den Speicherplatz wieder freizugeben. Natürlich bedeutet diese Option ein wenig Ausfallzeit, aber dafür ist 3AM da! – CommaToast
Wenn Sie ein Replikat-Set ausführen, müssen Sie nacheinander eine Resynchronisierung für jedes Ihrer Secondaries durchführen. Sobald dies abgeschlossen ist, müssen Sie die primäre und die neu zugewiesene sekundäre synchronisieren.
Zum Neusynchronisieren stoppen Sie Ihre mongod-Instanz, löschen Sie die lokalen Namen und starten Sie den Prozess erneut. Beobachten Sie die Protokolle, um sicherzustellen, dass alles ordnungsgemäß gestartet wird und die Resynchronisierung eingeleitet wurde.
Wenn Sie viele Daten/Indizes haben, stellen Sie sicher, dass Ihr oplog groß genug ist, sonst wird es wahrscheinlich veraltet.
- 1. Regex Ausdruck Symbol ohne Raum
- 2. Entfernen Raum in gemischten Inhaltselement ohne normalisieren-Raum mit
- 3. JQuery, wie man Raum in Wert übergibt?
- 4. Python, wie man einen Raum druckt
- 5. Wie man ein Hauslayout, Raum für Raum, für die einfache Raum-zu-Raum-Navigation durch einen Roboter abbildet?
- 6. MongoDB gesperrt nach abgebrochenem db.repairDatabase()? Wie zu öffnen?
- 7. CSS3 Marquee Effekt, ohne den leeren Raum
- 8. Wrapping Grid Text ohne sichtbaren Raum
- 9. Welt Raum zu Kamera-Raum
- 10. Anzeigen der gelöschten Konsolenausgabe
- 11. Wie Wiederherstellen eines gelöschten Zweigs in TFS?
- 12. Hinzufügen Raum zwischen anklickbare Bilder ohne den Randraum klickbare
- 13. Wie kann man den Raum durch Elemente reduzieren?
- 14. ACCESS - wie man einzelnen Raum als Zellenwert speichert
- 15. Android: wie man Text abhängig von verfügbarem Raum einstellt
- 16. wie man Raum in der Mitte mit C#
- 17. Exchange Web Services: Wohin gehen die gelöschten Termine?
- 18. Wie man Zahlen ohne +
- 19. Wie lösche ich einen gelöschten Knoten in der Mitte einer Liste ohne Valgrind-Fehler?
- 20. Raum zwischen Bootstrap 3 Tasten
- 21. raum/zeitfenster schedule optimization
- 22. Wie füge ich weiß Raum zwischen Wort
- 23. Wie Raum zwischen Widget entfernen?
- 24. Wie behandelt man einen Baumkonflikt beim Verschmelzen mit TortoiseSVN, im Falle eines gelöschten Ordners?
- 25. HTML - Hiding Bilder ohne sie Besatzungs versteckten Raum
- 26. Wie erfassen Sie die gelöschten Datensätze in SQL Server?
- 27. Token-Eingang Raum
- 28. Terminal löschen, ohne leeren Raum in Python zu erstellen
- 29. Erfasst alle Ziffern (Dinkel) jede Größe ohne Hinter/führenden Raum
- 30. Veröffentlichung Raum ‚ohne Datacopy‘ gestrichen in Sybase-Datenbank
Können Sie Ihre Dateien auf einen anderen Datenträger/eine andere Maschine verschieben und dies tun? Ich denke, das ist einer der Schwachpunkte im bestehenden Mongo-Toolset: Was tun, wenn Ihnen der Speicherplatz ausgeht? –