Mongodb系列~实践

2024-05-28  本文已影响0人  开心的蛋黄派

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

问题描述:

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

具体流程:

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

问题解决:

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

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

问题获取:

问题描述:

读写请求在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需要进行聚合计算,可能导致高负载。

解决方式:

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

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

九、mongokill会话问题

相关命令:

注意事项:

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

上一篇 下一篇

猜你喜欢

热点阅读