MongoDB 初体验:存储引擎 MMAPv1 与高内存消耗及升级迁移

2020-05-22 00:00:00 数据库 专区 是一个 内存 引擎

想不到我和MongoDB的次亲密接触竟然是这样开始的。





当我对公司的一个内部系统性能无可忍受时,意外发现在这个内存仅为 32G 的服务器上,运行着一个 MongoDB 数据库,其主进程 mongod 占用了 30.705 G的虚拟内存空间。这立刻引起了我的兴趣,必须要研究一下其工作原理。





这个数据库的版本是 3.0 :


[root@enmotech bin]# ./mongod --version
db version v3.0.12


那么,为什么 MongoDB 会消耗这么多内存呢?


通过数据库的状态查询,可以看到同样内存分配情况,Resident的固有内存分配了254M,Virtual的虚拟内存分配了 31,441M:


> db.serverStatus().mem;
{
"bits" : 64,
"resident" : 254,
"virtual" : 31441,
"supported" : true,
"mapped" : 15498,
"mappedWithJournal" : 30996
}


再看一下存储引擎,当前数据库使用的存储引擎是 mmapv1 :


> db.serverStatus().storageEngine;
{ "name" : "mmapv1" }


MMAPv1 实际上就是 MongoDB 在 3.0 以前原有的存储引擎,在 3.0 版本它也继续作为 MongoDB 的默认存储引擎,而在 MongoDB 3.2 版本默认存储引擎已经改为 WiredTiger。


>>>阅读全文

相关文章