让我们一起 , 一探究竟 , 继续学习MongoDB数据库性能监控 , 实现快速入门 , 丰富个人简历 , 提高面试level , 给自己增加一点谈资 , 秒变面试小达人 , BAT不是梦 。
文章插图
最近项目在使用MongoDB作为图片和文档的存储数据库 , 为啥不直接存MySQL里 , 还要搭个MongoDB集群 , 麻不麻烦?一、MongoDB启动慢?1、启动日常卡住根本不用为了截屏而快速操作 , MongoDB启动真的超级慢 。
让我们一起 , 一探究竟 , 继续学习MongoDB数据库性能监控 , 实现快速入门 , 丰富个人简历 , 提高面试level , 给自己增加一点谈资 , 秒变面试小达人 , BAT不是梦 。
文章插图
文章插图
2、启动MongoDB配置服务器 , 间歇性失败
文章插图
文章插图
3、查看MongoDB日志 , 分析“MongoDB启动慢”的原因
文章插图
4、耗时“一小时” , MongoDB启动成功!
文章插图
二、原因分析在MongoDB关闭之前 , 有较大的索引建立的操作没有完成 , MongoDB就直接shutdown了 , 等MongoDB再次启动的时候 , MongoDB默认会将这个index重建好 , 重建期间处于startup状态 。
由于不清楚重建索引需要多久 , 因此可以通过重启mongod时加上–noIndexBuildRetry参数来跳过索引重建 。等启动完成后 , 再创建这个索引 。
下面从几方面 , 监控一下MongoDB的性能问题 。三、MongoDB内存使用
文章插图
- 常驻内存:常驻内存是MongoDB在RAM中显式拥有的内存 。如果查询一个集合数据 , MongoDB会将其放入常驻内存中 , MongoDB会获得其地址 , 这个地址不是RAM中数据的真实地址 , 而是一个虚拟地址 。MongoDB可以将它传递给内核 , 内核会查找出数据的真实位置 。如果内核需要从内存中清理缓存 , MongoDB仍然可以通过该地址对其进行访问 。MongoDB会向内核请求内存 , 然后内核会查看数据缓存 , 如果发现数据不存在 , 就会产生缺页错误并将数据复制到内存中 , 最后再返给MongoDB 。
- 虚拟内存:操作系统提供的一种抽象 , 它对软件进程隐藏了物理存储的细节 。每个进程都可以看到一个连续的内存地址空间 。在Ops Manager中 , MongoDB的虚拟内存是映射内存的两倍 。
- 映射内存:包含MongoDB曾经访问过的所有数据 。
- 可以添加一个分片;
- 删除未使用的索引;
- 可以执行压缩操作;
- 关闭副本集成员 , 将其数据复制到更大的磁盘中挂载;
- 用较大驱动器的成员替换副本集中的成员;
db.hostInfo()
- 1.
文章插图
2、MongoDB获取系统内存情况
db.serverStatus().mem