MONGODB内存使用分析

来源:互联网 发布:神武3手游数据 编辑:程序博客网 时间:2024/05/22 01:54

  下午在和同事讨论mongodb在内存吃紧后,性能急剧下降的问题.同事问什么时候什么情况下mongodb性能会下降?有什么方法可以优化内存的使用?

 

首先我们要了解mongodb是怎么样使用内存.mongodb内存吃的快是因为mongodb对数据文件进行了file mapping,其它的部分如:index什么的并不占多少内存.当file mapping 用的内存越来越的时候,那么pages faults/sec 就会越来越高,于是性能会下降.

 

对于第一个问题: 

  1. 监控系统的faults, 可以mongostat进行查看(Linux only).当faults很高的时候,mongodb性能就会下降.此时就可以考虑进行碎片整理,或者sharding了.
  2. db data file大了并不意味着faults一定会高.因为要看db中冷热数据的比例.

对于第二个问题:

  1. 进行碎片整理.因为mongodb在update一个document的时候,如果update后的document比原来的大,那么这个document会放尾巴上去.这也是有时候用mogodump一个运行中的系统会出现数据不一致性的情况的原因.只是mongodb不支持在线整理.而且它提供的db.repairDatabase()速度也比较慢. 所以想进行compact的话,可以考虑将primary关掉,然后删除所有数据文件,然后再上线.
    可以运行以下命令查看是否需要进行compact
      
  2. file mapping这层基本上没什么可做的了.倒也可以考虑将热数据集中放在一起.不过这个可能相当的麻烦...

总结一下:还是要实时监控,如果faults高,或者觉得DB file size和内存比例比较大了,就要考虑碎片整理,当然这是个麻烦事.或者进行sharding,当然这也是个麻烦事.

 

原创粉丝点击