我將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àn)樵缤磉€會占回來,而且空閑的空間反正也還會重用,如果不是真的缺那點(diǎn)空間,就別去釋放了。
至于是不是停機(jī)的問題,不止是這個(gè)問題,大部分時(shí)候都應(yīng)該考慮復(fù)制集來解決,多個(gè)結(jié)點(diǎn)并行運(yùn)行就是為了不停機(jī)準(zhǔn)備的,拿掉一個(gè)下來做維護(hù)不會有多大的問題,拿主結(jié)點(diǎn)的時(shí)候可能會有幾秒鐘不可寫而已。
理論上說回收磁盤空間對性能不會有任何有益的影響。但是在3.0.6和3.0.7所使用的WiredTiger引擎上發(fā)生過一個(gè)bug,在大量刪除文檔時(shí)BTree會有錯(cuò)誤的平衡從而導(dǎo)致性能嚴(yán)重下降。詳細(xì)情況請參考JIRA Ticket SERVER-21063。