MongoDB 釋放磁盤空間 db.runCommand({repairDatabase: 1 })

磁盤空間優化

 

MongoDB 不會釋放已經佔用的硬盤空間。即使刪除 db 中的集合 ,MongoDB 也不會釋放磁盤空間。同樣,如果使用 GridFS 存儲文件,從 GridFS 存儲中刪除無用的垃圾文件,MongoDB 依然不會釋放磁盤空間的。這會造成磁盤一直在消耗,而無法回收利用的問題。

 

 

那怎樣才能釋放磁盤空間呢?

 

 

1.可以通過修復數據庫來回收磁盤空間,即在 mongo shell 中運行 db.repairDatabase()命令(已經不可用)或者 db.runCommand({repairDatabase: 1 }) 命令(此命令執行比較慢)。


使用通過修復數據庫方法回收磁盤時需要注意,待修復磁盤的剩餘空間必須大於等於存儲數據集佔用空間加上 2G,否則無法完成修復。因此使用 GridFS 大量存儲文件必須提前考慮設計磁盤迴收方案,以解決MongoDB 磁盤迴收問題。

 

2.使用 dump & restore 方式,即先刪除 MongoDB 數據庫中需要清除的數據,然後使用 mongodump 備份數據庫。備份完成後,刪除 MongoDB 的數據庫,使用 Mongorestore 工具恢復備份數據到數據庫。

 

當使用 db.repairDatabase()命令沒有足夠的磁盤剩餘空間時,可以採用 dump & restore 方式回收磁盤資源。如果 MongoDB 是副本集模式,dump & restore 方式可以做到對外持續服務,在不影響 MongoDB正常使用下回收磁盤資源。

 

MongoDB 使用副本集, 實踐使用 dump & restore 方式,回收磁盤資源。70G 的數據在 2 小時之內完成數據清理及磁盤迴收,並且整個過程不影響 MongoDB 對外服務,同時可以保證處理過程中數據庫增量數據的完整。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章