美文网首页
Mongodb系列~实践

Mongodb系列~实践

作者: 开心的蛋黄派 | 来源:发表于2024-05-28 10:24 被阅读0次

一、增加索引导致的性能问题

问题描述:

  1. 并发增加大表索引时出现问题。
  2. 从库在异常重启后,构建索引到一半时崩溃。

具体流程:

  1. 主节点查询对应表数据,并开始构建索引。
  2. 索引数据构建完成后,向客户端返回OK(注意:此时从节点可能尚未开始构建索引)。
  3. 生成createIndex对应的oplog数据。
  4. 从节点获取到createIndex的oplog操作,并开始构建索引。

问题解决:

  1. 去掉副本集参数,以单实例模式启动并增加索引,完成后再将其加入集群(注意:noindexbuildretry参数在4.2版本已被废弃)。
  2. 重新构建从库。

二、global-lock突然上升与读写TICKET剩余量减少

问题获取:

  • 通过db.serverStatus().globalLock获取状态,默认读写ticket为128个。

问题描述:

读写请求在globalLock层级加的是意向锁。读为MODE_IS,写为MODE_IX。当无法获取ticket时,globalLock值会上升。

问题解决:

  1. 优化查询语句。
  2. 升级实例的内存/CPU。

三、MONGO聚合内存不足

问题描述:

进行聚合操作时内存不足,内存限制大小为16M。

问题解决:

使用{allowDiskUse: true}选项来允许聚合操作使用磁盘空间。

四、mongo-config异常(3.2X版本)

问题描述:

在3.2.X版本中,mongo-config还是作为独立节点启动。某个config服务异常可能导致整体异常,从而使分配不可用。

问题解决与避免:

  1. 通过对比不同节点的hash值来确认问题,并同步正确数据。
  2. 升级MongoDB版本来避免此类问题。

五、mongo无法写入

可能的原因包括:

  1. mongos层崩溃。
  2. mongos层整体堆积。
  3. 某个分片会话堆积。

六、too many open files导致的服务异常

查看方法:

  • 使用相关命令查看最大文件打开数和已使用的文件句柄。

解决方式:

  1. 减少collections数量。
  2. 增加Linux系统中MongoDB的文件打开数限制。
  3. 在服务启动参数中添加相关限制。

七、mongos高负载

问题描述:

mongos需要进行聚合计算,可能导致高负载。

解决方式:

  • 扩展mongos节点,减少单个mongos的资源消耗。

八、secondary节点长期处于rollback状态

当rollback数据大于300MB时,需要手动干预。最简单的解决方法是重新同步数据。

九、mongokill会话问题

相关命令:

  • 使用db.currentOp查询长时间运行的会话。
  • 使用db.killOp终止长时间运行的会话。

注意事项:

被kill的会话可能进入killpending状态。如果堆积过多,释放会非常缓慢,建议进行主从切换并重启从节点来释放。但如果回滚数据过多,可能需要重新同步数据。

相关文章

网友评论

      本文标题:Mongodb系列~实践

      本文链接:https://www.haomeiwen.com/subject/osjqqjtx.html