Ich verwende Open edX, die MongoDB verwendet, um Kurse zu speichern. Wir führen ein Replikatset mit drei Knoten aus. Es verwendet derzeit Split-Mongo - eine Funktion, die eine Kopie des aktuellen Dokuments (Backup) vor der Bearbeitung erstellt. Im Laufe der Zeit stapelt sich dies, was zu einem großen Speicherplatzverbrauch führt. Momentan gibt es ungefähr 30 Kurse und wenn ich es exportiert, verbraucht es ungefähr 2-3 GB. Es ist jedoch der Speicherplatz tatsächlich verwendet wirdOpen edX und Split Mongo verbraucht Speicherplatz
Ich habe versucht, die unerwünschten Kurse zu reinigen this script mit
Darauf in primären Mitglied ausgeführt wird, dauert es einige Zeit und löscht alle unerwünschten Dokumente. Aber es gibt den Speicherplatz nicht frei.
rs0:SECONDARY> db.stats()
{
"db" : "edxapp",
"collections" : 5,
"objects" : 277557,
"avgObjSize" : 112645.21484235671,
"dataSize" : 31265467896,
"storageSize" : 57843929088,
"numExtents" : 0,
"indexes" : 6,
"indexSize" : 6938624,
"ok" : 1
}
[email protected]:~# df
Filesystem 1K-blocks Used Available Use% Mounted on
udev 4082828 12 4082816 1% /dev
tmpfs 817564 396 817168 1% /run
/dev/xvda1 8115168 1805528 5874364 24%/
none 4 0 4 0% /sys/fs/cgroup
none 5120 0 5120 0% /run/lock
none 4087804 0 4087804 0% /run/shm
none 102400 0 102400 0% /run/user
/dev/xvdf 62904320 57542660 5361660 92% /edx
/dev/xvdh 72117576 53012 68378164 1% /tmp/repairdb
Ich versuchte, die DB zu verdichten
rs0:SECONDARY> db.runCommand({ compact : 'modulestore.structures', force: 'true' })
{ "ok" : 1 }
Es verwendet hat auch nicht geholfen.
Könnte mir bitte jemand sagen, wie man den Speicherplatz in einer solchen Situation zurückgewinnen kann? Ich möchte das so schnell wie möglich im Prod Server machen.
Mojo Antwort lesen: https://stackoverflow.com/questions/5518581/mongodb-dat-remove-reclaim-diskspace – Hackerman