鍍金池/ 問(wèn)答/Java  數(shù)據(jù)庫(kù)/ 關(guān)于mongodb3.4的內(nèi)存的一些困惑

關(guān)于mongodb3.4的內(nèi)存的一些困惑

大家好,有個(gè)問(wèn)題想請(qǐng)大家?guī)兔饣蟆?br>我們前段時(shí)間將mongodb升級(jí)到3.4.6,我們每天有個(gè)刪除歷史數(shù)據(jù)的動(dòng)作,數(shù)據(jù)庫(kù)只保存幾天的數(shù)據(jù),數(shù)據(jù)量不大
scm:PRIMARY> show dbs
admin 0.000GB
local 15.234GB
scm 4.198GB
scm:PRIMARY>
包括local里面的oplog一共才20G
但是通過(guò)top和mongodb自己的命令查看內(nèi)存情況,發(fā)現(xiàn)遠(yuǎn)遠(yuǎn)超過(guò)了20G
通過(guò)db.serverStatus().wiredTiger.cache查看

    "bytes belonging to page images in the cache" : 27709364089,
    **"bytes currently in the cache" : 85890560448,--大約80G**
    "bytes not belonging to page images in the cache" : 58181196359,
    "bytes read into cache" : 51861301488,
    "bytes written from cache" : NumberLong("4133625131732"),
    **"maximum bytes configured" : 107374182400,--設(shè)置最大inner內(nèi)存wiredTigerCacheSizeGB=100**
    "maximum page size at eviction" : 4481266,

通過(guò)db.serverStatus().mem查看

    **"resident" : 106492,--大約106G 應(yīng)該是file system cache=106-80=24G**
    "virtual" : 112000,

問(wèn)題1::80G的inner cache包含哪些數(shù)據(jù),我知道的有熱數(shù)據(jù)和索引(現(xiàn)在看來(lái),即使是所有的數(shù)據(jù)放到內(nèi)存,包含oplog,也才20G),還有oplog會(huì)占內(nèi)存嗎。
問(wèn)題2:inner cache可以通過(guò)wiredTigerCacheSizeGB參數(shù)設(shè)置最大大小,那么file system cache大小有什么辦法限制嗎,現(xiàn)在看來(lái)這個(gè)file system cache很大,里面主要存了什么數(shù)據(jù)

回答
編輯回答
吃藕丑
  1. oplog 在 MongoDB 里是一個(gè)普通的 capped collection,對(duì)于存儲(chǔ)引擎來(lái)說(shuō),oplog只是一部分普通的數(shù)據(jù)而已。所以,在開(kāi)啟復(fù)制集的時(shí)候,oplog應(yīng)該會(huì)在內(nèi)存里,因?yàn)閛plog會(huì)經(jīng)常性地被重放來(lái)達(dá)到數(shù)據(jù)同步的作用。
  2. 第二個(gè)問(wèn)題搭車(chē)期待大?;卮?。
2018年1月31日 04:52
編輯回答
舊城人

你需要復(fù)習(xí)一下操作系統(tǒng)原理。file system cache并不是任何一個(gè)應(yīng)用來(lái)控制的,而是由操作系統(tǒng)控制。操作系統(tǒng)用沒(méi)有被使用的內(nèi)存緩沖一些讀過(guò)的文件內(nèi)容。因?yàn)榉凑矝](méi)人用,放在那里空著就浪費(fèi)了。如果緩沖一些內(nèi)容,就會(huì)有一定的機(jī)會(huì)被重復(fù)利用,總比空著好。如果有其他應(yīng)用需要使用這部分內(nèi)存,操作系統(tǒng)會(huì)釋放掉。所以你不用太關(guān)心file system cache的問(wèn)題。

2018年1月28日 04:11