摘要:摘要操作步驟很多,但是可以有效減少磁盤使用量。關(guān)于操作,我列了幾個簡單的。操作效果怎么樣減少了接近的磁盤空間,這個大小應(yīng)該與被刪除的文檔數(shù)量有關(guān)。操作步驟由于操作會阻塞的讀寫操作,因此應(yīng)該對每個節(jié)點依次進行操作。
摘要: compact操作步驟很多,但是可以有效減少磁盤使用量。
MongoDB與磁盤當(dāng)Fundebug處理的數(shù)據(jù)越來越多,這導(dǎo)致MongoDB的磁盤使用量越來越多,增長也越來越快。于是,我開始定時刪除過期數(shù)據(jù),優(yōu)化算法減少冗余數(shù)據(jù)。但是,我發(fā)現(xiàn),單純刪除文檔不能減少MongoDB磁盤使用量。這是為什么呢?下面是官方文檔的解釋:
對于WiredTiger存儲引擎(mongodb 3.2之后默認使用):How do I reclaim disk space in WiredTiger?
The WiredTiger storage engine maintains lists of empty records in data files as it deletes documents. This space can be reused by WiredTiger, but will not be returned to the operating system unless under very specific circumstances.
也就是說,被刪除的文檔所占用的磁盤空間仍然由MongoDB保留,不會釋放。對于舊版MongoDB的MMAPv1存儲引擎,這一點也是一樣的。這樣做無可厚非,因為數(shù)據(jù)庫將會不斷存儲新的文檔,它們可以利用之前保留的磁盤空間。
但是,如果你刪除了很多文檔,需要MongoDB釋放磁盤空間,應(yīng)該如何做呢?正如文檔所述,對于WiredTiger存儲引擎,我們可以使用compact操作來實現(xiàn)。
To allow the WiredTiger storage engine to release this empty space to the operating system, you can de-fragment your data file. This can be achieved using the compact command.關(guān)于compact操作
compact操作會重新整理碎片化的磁盤,釋放多余的空間。
Rewrites and defragments all data and indexes in a collection. On WiredTiger databases, this command will release unneeded disk space to the operating system.
關(guān)于compact操作,我列了幾個簡單的Q&A。
compact是否會阻塞數(shù)據(jù)庫讀寫?會!因此不能在高峰期進行compact操作;對于復(fù)制集,應(yīng)該對每個節(jié)點依次進行compact操作。
compact是否可以釋放磁盤空間?對于WiredTiger,是可以的;但是對于WiredTiger存儲引擎,并不會,多余的磁盤空間仍然會保留給MongoDB。
compact操作是否會占用額外的磁盤空間?根據(jù)我的觀察,基本上不會。
paddingFactor應(yīng)該設(shè)為多少?我設(shè)置的值是1.1,這樣可以為每個文檔留一些多余空間,提高修改性能。這個值可以根據(jù)實際需要進行設(shè)置。
compact操作需要多少時間?一個400G的復(fù)制集節(jié)點,我花了不到1個小時。這樣時間應(yīng)該與數(shù)據(jù)量大小有關(guān)。
compact操作效果怎么樣?減少了接近50%的磁盤空間,這個大小應(yīng)該與被刪除的文檔數(shù)量有關(guān)。
compact操作步驟由于compact操作會阻塞MongoDB的讀寫操作,因此應(yīng)該對每個節(jié)點依次進行操作。另外,MongoDB復(fù)制集的標準維護流程是將Secodary節(jié)點暫定,使用多帶帶的端口啟動獨立的mongo實例進行操作,這樣可以復(fù)制集完全隔離。
我們Fundebug的MongoDB集群運行在Docker中,因此操作步驟稍微簡單一些,可以為大家提供參考。
Secondary節(jié)點關(guān)閉mongodb容器
sudo docker stop mongo
啟動獨立的臨時mongodb容器
sudo docker run -it -d -p 37017:27017 -v /data/db:/data/db --name mongo_tmp mongo:3.2
執(zhí)行compact命令
mongo 127.0.0.1:37017 db.runCommand( { compact : "events",paddingFactor: 1.1 } )
重啟mongodb節(jié)點
sudo docker rm -f mongo_tmp sudo docker start mongoPrimary節(jié)點
將Primary節(jié)點變?yōu)镾econdary節(jié)點
rs.stepDown()
按照secondary節(jié)點進行操作
參考MongoDB文檔:compact
MongoDB文檔:Perform Maintenance on Replica Set Members
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/19257.html
摘要:一緩沖區(qū)介紹用于和交互。的容量,位置,上限緩沖區(qū)實質(zhì)上就是一塊內(nèi)存,用于寫入數(shù)據(jù),也供后續(xù)再次讀取數(shù)據(jù)。在每個類中,方法用于分配緩沖區(qū)。沒有這句話會報錯將此緩沖區(qū)的位置重置為先前標記的位置。返回此緩沖區(qū)的限制。 一 Buffer(緩沖區(qū))介紹 Java NIO Buffers用于和NIO Channel交互。 我們從Channel中讀取數(shù)據(jù)到buffers里,從Buffer把數(shù)據(jù)寫入到...
摘要:存儲概念是分類的存儲來是數(shù)據(jù)文件的大小。這個操作會禁止數(shù)據(jù)的訪問,所以不能夠輕易地執(zhí)行。有兩個明顯的缺點。必須禁止訪問數(shù)據(jù)庫一段時間。需要同等的硬盤及??梢酝ㄟ^構(gòu)建來防止空間占據(jù)過大。 mongodb 存儲 db.stats() { db : exemplum, collections : 10, objects : 110857, avgObjSize : 239...
摘要:并依賴于提供的機制提供高數(shù)據(jù)可靠性,目前支持單機事務(wù)。源通知目標開始同步數(shù)據(jù)源收到發(fā)送的命令后,會向目標發(fā)送的命令,通知目標開始遷移數(shù)據(jù)真正的數(shù)據(jù)遷移由目標主動發(fā)起。源收到的結(jié)果,整個數(shù)據(jù)遷移的步驟完成。 本文分兩部分,分布式和單機。單個db的存儲引擎,物理和數(shù)據(jù)存儲簡介,事務(wù)實現(xiàn)等。分布式架構(gòu),分布式涉及的復(fù)制集,分片等可靠性和擴展性保障。 第一部分 單機存儲引擎介紹mondod 引...
摘要:摘要對于的多鍵查詢,創(chuàng)建復(fù)合索引可以有效提高性能。不妨通過一個簡單的示例理解復(fù)合索引。但是,使用的是與的復(fù)合索引即根據(jù)索引去查詢文檔,不需要過濾??梢酝茰y,應(yīng)該是索引的問題導(dǎo)致的。 摘要: 對于MongoDB的多鍵查詢,創(chuàng)建復(fù)合索引可以有效提高性能。 showImg(https://segmentfault.com/img/bV5PFN?w=800&h=450); 什么是復(fù)合索引? 復(fù)...
閱讀 1249·2023-04-26 02:38
閱讀 928·2023-04-25 20:13
閱讀 3589·2021-11-19 11:31
閱讀 2396·2019-08-30 15:55
閱讀 2717·2019-08-30 14:11
閱讀 3157·2019-08-30 13:45
閱讀 1371·2019-08-29 18:41
閱讀 1147·2019-08-29 16:18