2011-04-01 28 views

回答

19
  1. 是的,這是正確的。
  2. 不,最好給mongodb儘可能多的磁盤空間(如果mongodb可以分配更多的空間而不是更少的磁盤碎片,那麼在額外的分配空間中操作會很昂貴)。但是,如果您希望可以從mongodb外殼運行db.repairDatabase()以縮小數據庫大小。
  3. 是的,你可以在現場MongoDB實例運行repairDatabase(最好在沒有運行高峯時段)
+20

雖然您可以在實時系統上運行修復,但它會使其不可用,因爲它在運行時鎖定服務器;我認爲這實際上意味着如果您打算繼續使用該實例,則無法在實例上運行它。 – 2011-04-03 14:39:44

3

我有另一種解決方案可能工作不是做db.repairDatabase(),如果您不能負擔的系統更好地被鎖定,或者不要沒有雙倍的存儲空間。

您必須使用副本集。

我的想法是,一旦你已經刪除了吞噬你的磁盤的所有多餘數據,停止一個輔助副本,擦除它的數據目錄,啓動它並讓它與主節點重新同步。重複與其他次級人物,一次一個。

在主設備上,執行rs.stepDown()以將MASTER切換到其中一個同步輔助設備,現在停止此設備,擦除它並重新同步。

該過程非常耗時,但執行rs.stepDown()時應該只花費幾秒鐘的停機時間。

相關問題