【最佳实践】巡检项:云数据库(MongoDB)CPU 使用率

问题描述

检查腾讯云数据库 MySQL 实例的 CPU 使用率情况,如果MongoDB实例的CPU使⽤率过⾼,会导致MonogoDB响应缓慢,甚⾄业务不可⽤。

解决方案

CPU 使用率高一般是多种问题综合影响的,一般可以按照如下顺序进行排查:

  1. 慢查询堆积。
  2. 业务高峰期,请求量突增,出现过量的并发。

针对慢查询堆积:

1、优化处理慢查询

方式一:选择数据库管理 > 慢查询管理页,列表会展示当前实例正在执行的请求(包括从节点的请求),您可单击批量Kill对慢查询语句进行 Kill 操作。

慢查询管理

方式二:选择慢日志查询页,您可以浏览分析慢日志,系统会记录执行时间超过100毫秒的操作,慢日志保留时间为7天。

抽象查询:代表是经过对查询条件的模糊处理后的统计值,这里可以看到按平均执行时长排序的慢查询统计,我们建议先优化top5的请求。

慢查询查询

具体查询:代表是记录完整的用户执行请求,包括执行计划,扫描的行数,执行时长,锁等待的一些信息。

请关注:command、COLLSCAN、IXSCAN、keysExamined、docsExamined 等关键字 需注意的关键字如下:

  • command 指出慢日志中记录的操作。
  • COLLSCAN 代表该查询进行了全表扫描(全表扫描说明没有用上索引,或者优化器认为索引扫描的效率更低),IXSCAN 代表进行了索引扫描。
  • keysExamined 代表索引扫描条目,docsExamined 代表文档扫描条目。keysExamined 和 docsExamined 越大代表没有建索引或者索引的区分度不高。请确认索引的创建字段

针对并发过大的场景

这里如果业务侧没有特别慢的请求,引起CPU占用高的可能原因为业务并发过⾼。如果是并发过⾼导致了CPU占用高的问题,在云数据库MongoDB可以通过扩容CPU来解决:

1、通过升级配置来增加云数据库的读写能力

  • 登录 MongoDB 控制台。
  • 在左侧导航栏 MongoDB 的下拉列表中,选择副本集实例或者分片实例。 副本集实例与分片实例操作类似。
  • 在右侧实例列表页面上方,选择地域。
  • 在实例列表中,找到目标实例。
  • 在目标实例的操作列,在配置调整的下拉列表中,选择配置调整
  • 配置调整页面,可以重新调整节点内存、节点中容量、Oplog 容量。如下图(以分片实例)所示。

2、如果是读多写少,对数据库一致性要求不是十分高的业务场景,可以增加副本个数,当前没有开启副本读,也是开启读从副本,具体参考文档

3、如果是想要扩展写能力,除了升级配置外,也可以通过DTS升级至分片集群,这样可以进一步提升云数据库的读写能力。

注意事项

MongoDB频繁短连接也会导致CPU使用升高,如果日志中发现⼤量包含saslStart的报错信息,如果业务存在这种情况可以优化为长连接来解决。

慢查询堆积的时候也可以通过回滚业务变更,并 kill 掉堆积的慢查询来解决。慢查询优化级数据库问题咨询等方面如需要协助,可以联系通讯云数据库技术专家团队。