问题描述
检查腾讯云数据库 MySQL 实例的 CPU 使用率情况,如果MongoDB实例的CPU使⽤率过⾼,会导致MonogoDB响应缓慢,甚⾄业务不可⽤。
解决方案
CPU 使用率高一般是多种问题综合影响的,一般可以按照如下顺序进行排查:
- 慢查询堆积。
- 业务高峰期,请求量突增,出现过量的并发。
针对慢查询堆积:
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 掉堆积的慢查询来解决。慢查询优化级数据库问题咨询等方面如需要协助,可以联系通讯云数据库技术专家团队。