我將mongo里面大量多余的數(shù)據(jù)都刪除后,發(fā)現(xiàn)內(nèi)存和文件并沒有收縮,仍然占用大量內(nèi)存和硬盤,性能變化不大,請問,mongodb怎么進(jìn)行碎片整理?
什么版本的MongoDB,什么引擎?
3.2以上的WT引擎可以使用Compact來釋放空間,之前的版本無論是WT還是MMAPv1都只能通過重新同步復(fù)制集的方式釋放空間。
問題是,生產(chǎn)環(huán)境一般來說沒有必要釋放,因為早晚還會占回來,而且空閑的空間反正也還會重用,如果不是真的缺那點空間,就別去釋放了。
至于是不是停機的問題,不止是這個問題,大部分時候都應(yīng)該考慮復(fù)制集來解決,多個結(jié)點并行運行就是為了不停機準(zhǔn)備的,拿掉一個下來做維護(hù)不會有多大的問題,拿主結(jié)點的時候可能會有幾秒鐘不可寫而已。
理論上說回收磁盤空間對性能不會有任何有益的影響。但是在3.0.6和3.0.7所使用的WiredTiger引擎上發(fā)生過一個bug,在大量刪除文檔時BTree會有錯誤的平衡從而導(dǎo)致性能嚴(yán)重下降。詳細(xì)情況請參考JIRA Ticket SERVER-21063。