本文介紹云數據庫MongoDB版釋放磁盤空間的方法。
背景信息
MongoDB從3.2版本開始,使用WiredTiger作為默認的存儲引擎。云數據庫MongoDB數據都配置了storage.directoryPerDB:true
參數,于是每個數據庫以獨立文件夾的形式存儲在磁盤上,而數據集合都是對應數據庫文件夾下獨立的文件。storage.directoryPerDB:true
參數的更多信息,請參見storage.directoryPerDB。
操作步驟
1.檢查是否存在廢棄的索引、集合或者數據庫,然后使用dropIndexes、drop、dropDatabase命令刪除對應的索引、集合或者數據,該類命令執行后,會立即將對應的文件刪除,從而達到釋放磁盤空間的目的。
2.檢查是否存在不需要的文檔,然后使用delete命令,刪除對應的文檔。和MySQL類似,MongoDB的文檔刪除也可以看作是標記刪除,只是將對應的一小塊存儲空間標記為空閑,等待被重用,因此刪除文檔命令,不能立即釋放磁盤空間,如果想要立即釋放這部分空閑空間,請查看步驟3。
3.檢查集合是否存在大量的空閑空間,通過collStats命令,比較StorageSize
和freeStorageSize
這兩個字段,然后使用compact命令回收空閑的物理空間,具體操作請參見回收磁盤碎片以提升磁盤利用率。
說明
compact
命令,需要在每個節點上分別執行。MongoDB 4.4之前的版本,執行
compact
命令時,會阻塞其他所有的操作,請謹慎操作。使用cursor.forEach命令,將文檔全部復制到新的集合,然后重命名的方法也能達到釋放磁盤空間的目的。該方法僅適用于離線場景。
文檔內容是否對您有幫助?