天天看點

mongo碎片整理

一、前言:

當從MongoDB中删除文檔或集合時,MongoDB并不會将已經占用了的磁盤空間釋放,它會一直維護已經占用了磁盤空間的資料檔案,隻是邏輯上做了删除标記,其實未釋放空間。當用戶端程式再次插入文檔時,MongoDB會從空記錄清單中配置設定存儲空間給新文檔。是以在磁盤空間不足報警時等,為了釋放空間,我們需要對mongodb的資料檔案做碎片整理以及未使用空間的回收。

方法思路有兩種:

進行碎片整理

資料重新拷貝搭建新從庫

二、本次就compact操作記錄下相關流程

定義:對集合中的所有資料和索引進行重寫和碎片整理

指令:

步驟:

連接配接mongo執行個體scondary

切換至集合所在的資料庫

use yourdatabase;

檢視表占用空間大小

查詢預估回收空間

上面指令得到的數字可以/1024/1024/1024得到大概G機關的可以釋放的空間

執行以下指令,對某個集合進行碎片整理

等待執行,傳回{ "ok" : 1 }代表執行完成

可檢視collection占用空間釋放被回收

注意:

隻對WiredTiger引擎的mongo起作用

碎片整理期間,會堵塞執行個體的讀寫操作,故強烈建議在secondary上執行,然後切換主庫,做輪詢操作處理

操作的指令不會進行複制,故需要分别在不同的執行個體上單獨執行一遍

碰到特殊情況要停止運作該指令時,可通過db.currentOp()查詢程序資訊,然後通過db.killOp()幹掉程序