快盘下载:好资源、好软件、快快下载吧!

快盘排行|快盘最新

当前位置:首页软件教程电脑软件教程 → MongoDB之内存管理

MongoDB之内存管理

时间:2022-09-18 22:55:45人气:作者:快盘下载我要评论

//

MongoDB之内存管理

//

今天我们看看MongoDB的内存管理方面的知识。

00

MongoDB的内存用在哪儿?

在MongoDB中,加载各种依赖的lib到内存、管理客户端请求、元数据管理存储等工作都需要占用内存,但其实内存使用的大部分还是在存储引擎和客户端连接请求处理方面。

一方面是存储引擎的cache,通常情况下,我们可以使用参数cacheSizeGB参数(下面会讲到)来控制内存使用率,一旦超过这个内存使用率,则MongoDB的存储引擎会淘汰掉部分内存中的数据页。

正常运行的MongoDB实例,内存使用率大约为80%的cacheSizeGB参数值,因为超过80%之后,内存淘汰策略就开始淘汰过期的数据页了,如果出现使用率过大,则多半表示当前实例内存淘汰的压力比较大。请求就有延时的可能。

另一方面,如果客户端的连接数过多,建立过多的tcp链接,这些连接的维护,需要有read buffer和write buffer以用来收发网络包,所以也会产生开销。每个连接占用的内存大小约为2MB左右。

01

如何限制MongoDB对内存的使用?

最近在线上发现了一些有意思的现象,比如某一台服务器上部署了mysql和MongoDB的服务,然后内存报警,说是内存已经使用了超过85%了,这个时候,通常我们会想到迁移服务。将MySQL或者MongoDB的服务切换到其他的机器上,这样,服务器的内存就可以节省下来。

但是实际的现象就是,如果我们迁移了MySQL的服务之后,服务器的内存临时会降下来,但是一段时间过后,又会报警,因为MongoDB已经将MySQL腾出来的内存空间也占用完了。

我们知道,在MySQL中,占用内存比较多的就是innodb_buffer_pool,还有一堆其他的buffer,除此之外,连接数也是一个需要考虑的因素。

在MongoDB中,如果我们不限制MongoDB的内存使用,那么MongoDB就会尽可能的占用更多的内存来提高读写性能。具体的策略如下:

从MongoDB3.4开始, WiredTiger存储引擎默认的cache size是下面2个值中较大的一个。

公式一:0.5*(物理内存-1GB)

公式二:256MB

例如,物理内存4G,则cache size=1.5GB,如果物理内存1.5G,则cache size=0.5*(1.5-1)=250MB < 256MB ,所以取值为256MB

MongoDB中可以通过配置文件的内容限定MongoDB所使用的内存,关键参数如下:

storage:
   wiredTiger:
      engineConfig:
         cacheSizeGB: <number>   # 单位是GB,浮点型
         journalCompressor: <string>
         directoryForIndexes: <boolean>
         maxCacheOverflowFileSizeGB: <number>
      collectionConfig:
         blockCompressor: <string>
      indexConfig:
         prefixCompression: <boolean>

上面的参数,一般情况下,单机单实例,建议配置在内存的60%左右。

02

cacheSizeGB参数配置的注意事项

几点建议:

1、不要增加WiredTiger的内部cache size超过默认值

2、WiredTiger存储引擎使用WiredTiger内部缓存和文件系统缓存

3、WiredTiger会自动使用所有剩余的文件系统缓存

4、单机多实例请务必减少mongod的内存分配值

03

如何查看内存使用情况?

db.hostInfo()

这个命令可以查看MongoDB的内存限制情况,查看结果如下:

SECONDARY> db.hostInfo()
{
        "system" : {
                "currentTime" : ISODate("2020-12-31T03:51:28.278Z"),
                "hostname" : "localhost.localdomain:24204",
                "cpuAddrSize" : 64,
                "memSizeMB" : 64393,
                "numCores" : 8,
                "cpuArch" : "x86_64",
                "numaEnabled" : false
        },

相关文章

  • 一步步带你设计MySQL索引数据结构

    一步步带你设计MySQL索引数据结构,想想我们生活中的例子,比如新华字典,我们有一个目录,目录根据拼音排序,内容包含了汉字位于字典中具体的的页码。聪明的你肯定也想到了,我们也可以借鉴这种思想,建立一个MySQL的目录,叫做“索引”。...
  • 影刀连接Mysql数据库

    影刀连接Mysql数据库,影刀配置连接mysql数据库基础版...

网友评论

快盘下载暂未开通留言功能。

关于我们| 广告联络| 联系我们| 网站帮助| 免责声明| 软件发布

Copyright 2019-2029 【快快下载吧】 版权所有 快快下载吧 | 豫ICP备10006759号公安备案:41010502004165

声明: 快快下载吧上的所有软件和资料来源于互联网,仅供学习和研究使用,请测试后自行销毁,如有侵犯你版权的,请来信指出,本站将立即改正。