2016-08-24 50 views
0

背景:有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釋放空間,儘管其他副本集成員可能會丟失數據?

+0

我的猜測是這是local.oplog.rs集合(https://docs.mongodb.com/manual/core/replica-set-oplog/)。查看「本地」數據庫中的db統計信息以確認。 –

+0

是的,你是絕對正確的!這是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

+0

@JamesWahlin,我可以以某種方式迫使MongoDB清理這個集合或清空它嗎?我知道,沒有成員需要同步,並且不再需要這些數據。如果需要,我總是可以選擇與第二個成員節點上的空DB開始同步。 – cleversokol

回答

0

基於您刪除的所有文件和不再需要該數據的事實:

  1. 停止mongod的過程
  2. 從./mongodb目錄手動

    > use admin 
    switched to db admin 
    > db.shutdownServer() 
    2016-08-24T08:50:29.085-0500 I NETWORK DBClientCursor::init call() failed server should be down... 
    2016-08-24T08:50:29.096-0500 I NETWORK trying reconnect to 127.0.0.1:27017 (127.0.0.1) failed 
    2016-08-24T08:50:30.103-0500 W NETWORK Failed to connect to 127.0.0.1:27017, reason: errno:10061 No connection could be made because the target machine actively refused it. 
    2016-08-24T08:50:30.104-0500 I NETWORK reconnect 127.0.0.1:27017 (127.0.0.1) failed failed couldn't connect to server 127.0.0.1:27017 (127.0.0.1), connection attempt failed 
    > 
    
    # cd ./mongodb 
    # rm -rf * 
    
  3. 刪除所有文件

當你重新啓動mongo時,它會根據需要初始化mongodb目錄。