Why after deleting a 110+ GB collection, my /var/lib/mongodb directory still have same size?
I am having some troubles with MongoDB and space usage. In particular, I once used to have a large collection of about 600 million records totaling 110+ GB on disk. Recently I decided to drop it because the data was outdated, to do so I dropped the collection through rockmongo's web interface. Accordingly, rockmongo doesn't show me the collection anymore, however my disk usage hasn't changed at all.
Is there any clean operation which I am not aware of, which must be run in order to synchronize the database with database files on disk?
I have tried to perform a "repair" but the system complains that there's not enough space on disk ... that's because it is all used by MongoDB.
Solution 1:
As with most database systems, the database files does not shrink when you delete data, the data is just removed/marked as deleted, and the space is reused.
You'll need to run db.repairDatabase()
to compact space as noted here
Solution 2:
While the above mongodump/drop/mongorestore approach will work fine from a technical perspective, it will require you to take the database offline while you do so, which would be a service-affecting event.
If you would like do this without downtime AND if you are using MongoDB Replica Sets[1], you could do so like this:
- Select a member and stop the MongoDB there (service mongodb stop). If this was the PRIMARY, wait for another member to be elected the PRIMARY.
- Remove the data files on this member (cd /var/lib/mongodb; rm *).
- Restart MongoDB service again (service mongodb start).
- Wait for the member to resync to the PRIMARY (rs.status()).
- This will rebuild only the required (smaller) data files.
Then repeat the above steps for each of the other members in the Replica Set.
[1] https://docs.mongodb.org/manual/tutorial/deploy-replica-set)