背景:有1個成員和1個仲裁器的MongoDB副本集已建立。 需要釋放磁盤空間,因爲MongoDB中的數據不再需要。 使用db.collection.remove({})
命令刪除所有文檔。 後db.runCommand ({ compact: 'collection', force:true})
,db.collection.reIndex()
和db.repairDatabase()
都跑了,db.stats()
看起來像:從MongoDB回收可用空間3.2
> db.stats()
{
"db" : "database",
"collections" : 2,
"objects" : 6,
"avgObjSize" : 167.83333333333334,
"dataSize" : 1007,
"storageSize" : 153042944,
"numExtents" : 0,
"indexes" : 5,
"indexSize" : 45056,
"ok" : 1
}
正如你所看到的,也有在DB與153MB的總存儲大小僅有6文件(第二集合)。 但是,如果我們看一下磁盤空間使用情況:
# du -h --max-depth=1 | grep mongodb
9.8G ./mongodb
和MongoDB目錄內:
ls -l
total 9365696
-rw-r----- 1 username usergroup 16384 Aug 19 14:19 collection-0-2472884588219438804.wt
-rw-r----- 1 username usergroup 36864 Aug 19 14:19 collection-0-4266045208498277842.wt
-rw-r----- 1 username usergroup 12288 Aug 24 15:55 collection-0--7009505821458556818.wt
-rw-r----- 1 username usergroup 49152 Aug 19 14:20 collection-0--7439052959034576211.wt
-rw-r----- 1 username usergroup 36864 Aug 19 14:20 collection-0-8676027872146699793.wt
-rw-r----- 1 username usergroup 36864 Aug 19 14:19 collection-2-2472884588219438804.wt
-rw-r----- 1 username usergroup 32768 Aug 23 13:54 collection-2-2911328926458913167.wt
-rw-r----- 1 username usergroup 9589645312 Aug 24 15:55 collection-4-2472884588219438804.wt
-rw-r----- 1 username usergroup 36864 Aug 19 14:19 collection-7--7439052959034576211.wt
-rw-r----- 1 username usergroup 36864 Aug 19 14:19 collection-9--7439052959034576211.wt
drwxr-x--- 2 username usergroup 4096 Aug 24 16:03 diagnostic.data
-rw-r----- 1 username usergroup 4096 Aug 24 15:54 index-10-561247476684508201.wt
-rw-r----- 1 username usergroup 36864 Jul 20 15:09 index-10--7439052959034576211.wt
-rw-r----- 1 username usergroup 36864 Aug 19 14:19 index-11--7439052959034576211.wt
-rw-r----- 1 username usergroup 16384 Mar 4 09:20 index-1-2472884588219438804.wt
-rw-r----- 1 username usergroup 36864 Jul 20 15:09 index-1-4266045208498277842.wt
-rw-r----- 1 username usergroup 36864 Aug 19 14:20 index-1--7439052959034576211.wt
-rw-r----- 1 username usergroup 16384 Jul 5 13:25 index-1-8676027872146699793.wt
-rw-r----- 1 username usergroup 36864 Jul 20 15:09 index-2-4266045208498277842.wt
-rw-r----- 1 username usergroup 16384 Mar 4 09:20 index-3-2472884588219438804.wt
-rw-r----- 1 username usergroup 16384 Aug 23 14:00 index-6-561247476684508201.wt
-rw-r----- 1 username usergroup 16384 Aug 23 14:00 index-7-561247476684508201.wt
-rw-r----- 1 username usergroup 4096 Aug 24 15:54 index-8-561247476684508201.wt
-rw-r----- 1 username usergroup 16384 Aug 19 14:19 index-8--7439052959034576211.wt
-rw-r----- 1 username usergroup 4096 Aug 24 15:54 index-9-561247476684508201.wt
drwxr-x--- 2 username usergroup 4096 Aug 24 15:55 journal
-rw-r----- 1 username usergroup 36864 Aug 24 15:55 _mdb_catalog.wt
-rwxr-x--- 1 username usergroup 6 Aug 19 14:19 mongod.lock
-rw-r----- 1 username usergroup 36864 Aug 24 15:56 sizeStorer.wt
-rw-r----- 1 username usergroup 95 Dec 30 2015 storage.bson
-rw-r----- 1 username usergroup 46 Dec 30 2015 WiredTiger
-rw-r----- 1 username usergroup 534 Dec 30 2015 WiredTiger.basecfg
-rw-r----- 1 username usergroup 4096 Aug 19 14:19 WiredTigerLAS.wt
-rw-r----- 1 username usergroup 21 Dec 30 2015 WiredTiger.lock
-rw-r----- 1 username usergroup 903 Aug 24 15:57 WiredTiger.turtle
-rw-r----- 1 username usergroup 94208 Aug 24 15:57 WiredTiger.wt
此字符串覺得奇怪,我:
-rw-r----- 1 username usergroup 9589645312 Aug 24 15:55 collection-4-2472884588219438804.wt
問題:什麼可以在mystery collection-4-2472884588219438804.wt文件中? 爲什麼它不受compact,repairDatabase命令的影響? 有沒有辦法強制MongoDB清空這個文件或以某種方式回收它的空間?
更新:在@ james-wahlin的幫助下,我們發現9.8Gb是Reploga Set Oplog的大小。但是我怎麼能強制MongoDB釋放空間,儘管其他副本集成員可能會丟失數據?
我的猜測是這是local.oplog.rs集合(https://docs.mongodb.com/manual/core/replica-set-oplog/)。查看「本地」數據庫中的db統計信息以確認。 –
是的,你是絕對正確的!這是oplog.rs的文件:'> db.oplog.rs.stats(){ 「NS」: 「local.oplog.rs」, 「計數」:30036627, 「大小」:7106989772, 「avgObjSize」 :236, 「storageSize」:9589645312, 「封端」:真, 「最大值」:-1, 「MAXSIZE」:NumberLong( 「7050707456」), 「sleepCount」:0, 「sleepMS」:0 , 「wiredTiger」:{ ..., 「uri」:「statistics:table:collection-4-2472884588219438804」,' – cleversokol
@JamesWahlin,我可以以某種方式迫使MongoDB清理這個集合或清空它嗎?我知道,沒有成員需要同步,並且不再需要這些數據。如果需要,我總是可以選擇與第二個成員節點上的空DB開始同步。 – cleversokol