【基础】MongoDB的Caching机制

MongoDB是通过内存映射文件(memory-mapped files)来使用内存的。也就是说,MongoDB将内存管理的任务交给了操作系统。

这样做的好处是,MongoDB简化了自己的工作。但同时也减少了内存使用上的灵活性。

操作系统如何对内存进行管理,这里不作叙述。着重说一下这种mmap的方式,会给MongoDB带来什么样的影响。

 

1. MongoDB会将所有的数据文件都进行mmap,所以Virtual memory看起来数值会大得惊人。因为Virtual memory往往会远大于物理内存的大小,所以可以认为,MongoDB会吃掉系统所有的内存。

 

2. 在操作系统眼里,所有mmap的文件,地位都是同等的。但实际上,我们更希望将索引放入到内存。当然了,操作系统是不会知道这些的。(也可能我杞人忧天了,毕竟索引是会经常被访问的数据,OS内存策略不会把这些索引淘汰掉)

 

3. 内存当然越大越好。内存大小 > 索引 + 热数据, 应该就可以了。

 

4. journal,以及oplog 占用了很大的空间。但我个人认为,没必要将所有的journal和oplog都放到内存当中。毕竟它们只是被顺序读取的。同样的,操作系统也不知道这一点。估计会对内存的利用率有点影响。

 

5. 有人说没有办法控制MongoDB对内存的使用。显然是可以的,调整进程使用内存的上限即可(ulimit -v, ulimit -m)

 

6. 可以通过db.closeAllDatabases() 释放内存。(估计一般是用不上的)

 

7. mongostat里面有一列是faults,如果发现不为0,不要担心。它只不过是说操作不能在内存中完成。频繁发生,可能是内存太小了。(放心,不会导致数据写入失败)

 

8. 预留

 

9. 预留


额外的一点,MongoDB会为每个connection起一个线程,线程当然自身也是有开销的。虽然可以调节连接数的大小,不过我还是认为不要去调节的好。如果连接数过多,可以考虑建个连接池。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值