关于mongodb3.4的内存困惑 10C

hi,大家好,有个问题想请教下大家,我们最近将mongodb从2.2.2版本升级到了3.4.6版本,用的是WiredTiger引擎,运行一段时间后,发现几个不是很能理解的问题。
图片说明
数据总大小(包括local里的oplog数据20G左右)
但是通过top查看内存情况,达到了104G
图片说明
疑问1:为什么实际使用内存比存储内存大那么多?
疑问2:我设置了启动参数wiredTigerCacheSizeGB=100,但是现在使用内存超过了100G,看官网文档上说,mongodb有两部分内存,一个是WiredTiger internal cache,一个是file system cache,wiredTigerCacheSizeGB参数设置的应该是 internal cache,那整个mongodb的使用内存大小能通过参数设置吗,如果不能设置,那不是无限占用内存(官网说MongoDB automatically uses all free memory that is not used by the WiredTiger cache or by other processes)。
疑问3:oplog的数据会全部放到内存吗,还是只放入一部分热数据

3个回答

1.热数据

这一点是SQL和nosql之间的巨大差距,将热数据存在内存相当于自带cache,若wiredtigercache大小控制合理,此处内存性价比相当高。

2.索引

跟热数据同样

3.连接所消耗内存

这里算是与SQL基本相同的一部分

热数据和索引在内存,保证了高速

weixin_38072974
相对忘贫 这个是知道的,索引和热数据都放内存里,现在疑惑的是数据库真正的数据(包括oplog)也才20G,但是整个mongo进程内存用了100多个G
2 年多之前 回复

使用mlogfilter查看索引使用效率不高的MongoDB查询语句 如下所示

2017-10-28T06:40:08.791+0000 I COMMAND [conn4431] command foo.data_02 command: find { find: "data_02", filter: { $and: [ ... ] }, projection: { ...}, limit: 50, shardVersion: [ Timestamp 0|0, ObjectId('000000000000000000000000') ] } planSummary: IXSCAN { field1: -1.0, field2: -1.0 } keysExamined:589735 docsExamined:589735 cursorExhausted:1 keyUpdates:0 writeConflicts:0 numYields:4610 nreturned:0 reslen:217 locks:{ Global: { acquireCount: { r: 9222 } }, Database: { acquireCount: { r: 4611 } }, Collection: { acquireCount: { r: 4611 } } } protocol:op_command 8785ms
扫描了58万多条记录,却返回了0条 我想知道像这种情况MongoDB到底是怎么缓存数据的呢?

即只缓存返回结果(0) 还是所有扫描的记录呢(589735)。从内存的角度来说的话, 是返回结果越少内存占用越小 还是 扫描记录越少 内存占用越小?

另外WiredTiger又分两种缓存

WiredTiger internal cache
filesystem cache
这两个缓存是怎么分配的呢?

是internal cache 满了再用filesystem cache呢?
还是同时都有分配呢? 那么这种情况下 什么数据进internal cache 什么数据进filesystem cache呢?

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问