限制MongoDB使用的内存

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了限制MongoDB使用的内存相关的知识,希望对你有一定的参考价值。

参考技术A 限制MongoDB使用的内存,可以通过对配置文件某一项添加约束。
mongod.conf:

定义WiredTiger将用于所有数据的内部缓存的最大大小。索引构建消耗的内存 与WiredTiger缓存内存是分开的。
值的范围可以从0.25GB到10000GB。

从MongoDB 3.4开始,默认的WiredTiger内部缓存大小是以下两者中的较大者:

例如,在总共有4GB的RAM系统上,WiredTiger缓存将使用1.5GB的RAM,因为这是总RAM减去1GB后的一半,0.5*(4GB-1GB)=1.5GB。相反,总内存为1.25GB的系统将为WiredTiger缓存分配256 MB,0.5*(1.25GB-1GB)=128MB<256MB
默认的WiredTiger内部缓存大小值假定每台计算机有一个mongod实例。如果一台机器包含多个MongoDB实例,则应减小设置以容纳其他mongod实例。

或者还可以通过启动配置文件时添加参数:

效果和上述修改配置文件是一样的,0.5的单位也是GB。

MongoDB 索引限制

额外开销

每个索引占据一定的存储空间,在进行插入,更新和删除操作时也需要对索引进行操作。所以,如果你很少对集合进行读取操作,建议不使用索引。


内存(RAM)使用

由于索引是存储在内存(RAM)中,你应该确保该索引的大小不超过内存的限制。

如果索引的大小大于内存的限制,MongoDB会删除一些索引,这将导致性能下降。


查询限制

索引不能被以下的查询使用:

  • 正则表达式及非操作符,如 $nin, $not, 等。
  • 算术运算符,如 $mod, 等。
  • $where 子句

所以,检测你的语句是否使用索引是一个好的习惯,可以用explain来查看。


索引键限制

从2.6版本开始,如果现有的索引字段的值超过索引键的限制,MongoDB中不会创建索引。


插入文档超过索引键限制

如果文档的索引字段值超过了索引键的限制,MongoDB不会将任何文档转换成索引的集合。与mongorestore和mongoimport工具类似。


最大范围

  • 集合中索引不能超过64个
  • 索引名的长度不能超过125个字符
  • 一个复合索引最多可以有31个字段

以上是关于限制MongoDB使用的内存的主要内容,如果未能解决你的问题,请参考以下文章

mongodb内存限制初探

MongoDB索引限制

配置mongoDB限制使用最大内存

mongodb 怎么限制文档数量

MongoDB 索引限制

Windows下使用WSRM限制MongoDB内存