Disk-Space-Utilization

為什麼刪除 110+ GB 的集合後,我的 /var/lib/mongodb 目錄仍然有相同的大小?

  • November 12, 2020

我在 MongoDB 和空間使用方面遇到了一些問題。特別是,我曾經在磁碟上擁有大約 6 億條記錄的大型集合,總計 110+ GB。最近我決定放棄它,因為數據已經過時,為此我通過 rockmongo 的 Web 界面刪除了該集合。因此,rockmongo 不再向我顯示該集合,但我的磁碟使用情況根本沒有改變。

是否有任何我不知道的干淨操作,必須執行才能將數據庫與磁碟上的數據庫文件同步?

我試圖執行“修復”,但係統抱怨磁碟上沒有足夠的空間……那是因為它全部被 MongoDB 使用。

與大多數數據庫系統一樣,刪除數據時數據庫文件不會縮小,數據只是被刪除/標記為已刪除,並且空間被重新使用。

您需要執行db.repairDatabase()到緊湊空間,如此處所述

雖然從技術角度來看,上述 mongodump/drop/mongorestore 方法可以正常工作,但它需要您在執行此操作時使數據庫離線,這將是一個影響服務的事件。

如果您想在不停機的情況下執行此操作並且如果您正在使用 MongoDB 副本集

$$ 1 $$,你可以這樣做:

  1. 選擇一個成員並在那裡停止 MongoDB(服務 mongodb 停止)。如果這是 PRIMARY,請等待另一位成員被選為 PRIMARY。
  2. 刪除該成員上的數據文件 (cd /var/lib/mongodb; rm *)。
  3. 再次重啟 MongoDB 服務(service mongodb start)。
  4. 等待成員重新同步到 PRIMARY (rs.status())。
  5. 這將僅重建所需的(較小的)數據文件。

然後對 Replica Set 中的每個其他成員重複上述步驟。

$$ 1 $$ https://docs.mongodb.org/manual/tutorial/deploy-replica-set )

引用自:https://serverfault.com/questions/269851