Perché dopo aver eliminato una raccolta di oltre 110 GB, la mia directory / var / lib / mongodb ha ancora le stesse dimensioni?


12

Sto avendo dei problemi con MongoDB e l'utilizzo dello spazio. In particolare, una volta avevo una grande raccolta di circa 600 milioni di dischi per un totale di oltre 110 GB su disco. Di recente ho deciso di rilasciarlo perché i dati erano obsoleti, per farlo ho lasciato cadere la raccolta attraverso l'interfaccia web di rockmongo. Di conseguenza, rockmongo non mi mostra più la raccolta, tuttavia il mio utilizzo del disco non è cambiato affatto.

Esiste un'operazione pulita di cui non sono a conoscenza, che deve essere eseguita per sincronizzare il database con i file di database sul disco?

Ho provato a eseguire una "riparazione" ma il sistema si lamenta che non c'è abbastanza spazio sul disco ... questo perché è tutto usato da MongoDB.

Risposte:


19

Come con la maggior parte dei sistemi di database, i file di database non si riducono quando si eliminano i dati, i dati vengono semplicemente rimossi / contrassegnati come eliminati e lo spazio viene riutilizzato.

Dovrai correre db.repairDatabase()nello spazio compatto come indicato qui


2
Lo spazio sul disco rigido era troppo basso per farlo. Comunque ho risolto in questo modo: mongodump, oldDatabase.dropDatabase(), mongorestore --db newDatabase dump/oldDatabase.
Tunnuz,

4

Mentre l'approccio mongodump / drop / mongorestore sopra funzionerà bene dal punto di vista tecnico, ti richiederà di portare offline il database mentre lo fai, il che sarebbe un evento che influisce sul servizio.

Se desideri farlo senza tempi di inattività E se stai utilizzando MongoDB Replica Sets [1], puoi farlo in questo modo:

  1. Seleziona un membro e ferma MongoDB lì (servizio mongodb stop). Se questo era il PRIMARY, attendi che un altro membro venga eletto PRIMARY.
  2. Rimuovere i file di dati su questo membro (cd / var / lib / mongodb; rm *).
  3. Riavviare nuovamente il servizio MongoDB (avvio del servizio mongodb).
  4. Attendere la risincronizzazione del membro con PRIMARY (rs.status ()).
  5. Ciò ricostruirà solo i file di dati richiesti (più piccoli).

Quindi ripetere i passaggi precedenti per ciascuno degli altri membri nel set di repliche.

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


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.