The repairDatabase command compacts all collections in the database. It is identical to running the compact command on each collection inpidually.
要注意的是compact不会像repairDatabase那樣釋放已經申請的磁碟空間,但是新的磁碟請求會使用整理出來的空間。另一個要注意的是,這兩個指令都需要額外的空間,請參閱 dick usage 一節。這也就是說,如果磁碟空間已經滿了,這兩個指令也用不了。不過這時,可以重新同步一個從結點,重建磁碟資料。
如果在replica set中使用repairDatabase或者compact的話,最好採用 rolling 的方式。
Rolling 的方式就是先把一個從結點(secondary)拿出來,整理磁碟。然後在所有的從結點重複以上步驟。最後撤銷主結點 (step down primary),然後在其上整理磁碟。這樣可以避免這些操作對線上服務的影響。
不需要匯出再導入,使用
repairDatabase
或者compact
都會壓縮資料。但是他們運行中對性能有影響。要注意的是
compact
不会像repairDatabase
那樣釋放已經申請的磁碟空間,但是新的磁碟請求會使用整理出來的空間。另一個要注意的是,這兩個指令都需要額外的空間,請參閱 dick usage 一節。這也就是說,如果磁碟空間已經滿了,這兩個指令也用不了。不過這時,可以重新同步一個從結點,重建磁碟資料。如果在replica set中使用
repairDatabase
或者compact
的話,最好採用 rolling 的方式。 Rolling 的方式就是先把一個從結點(secondary)拿出來,整理磁碟。然後在所有的從結點重複以上步驟。最後撤銷主結點 (step down primary),然後在其上整理磁碟。這樣可以避免這些操作對線上服務的影響。推薦使用
usePowerOf2Sizes
讓 MongoDB 在頻繁更新刪除下能更有效的使用磁碟,因為每次的申請和釋放都是2的冪次的大小。