CPU 使用率偏高解决方法

最近更新时间:2024-09-02 19:03:42

我的收藏

问题描述

日常运维,登录 MongoDB 控制台,单击实例 ID 进入实例详情页面,选择系统监控页签,检查实例的监控指标详情,发现数据库 CPU 监控类 指标明显持续偏高。



原因分析及解决方法

序号
可能原因
原因分析
排查方法
解决方法
1
频繁建立短连接

实例大量资源消耗在处理频繁短连接上,引起 CPU 使用率较高,连接数较高,然而 QPS(集群每秒访问次数)未达到预期。
借助数据库智能管家 DBbrain 的诊断优化功能,分析数据库实例的实时会话统计视图及数据,确认是否存在连接数突增的现象。具体查询方式,请参见 实时会话
将短连接调整为长连接,不同语言类型的更多参数信息,请参见 MongoDB 官网
2
业务侧存在较多非预期的请求耗时较长
非预想的请求较多,或者被恶意请求,可能会导致 CPU 资源过度浪费。
请借助数据库智能管家(TencentDB for DBbrain,DBbrain)的诊断优化功能,在实时会话页面,排查业务侧所有连接的客户端请求,是否为业务实际真实所需。
对于非预期的请求,可在数据库智能管家 (TencentDB for DBbrain,DBbrain)的 诊断优化中,在实时会话页面,直接进行 Kill 操作,进行清理。具体操作,请参见 实时会话
数据库智能管家(TencentDB for DBbrain,DBbrain)的诊断优化中,在SQL 限流页面,创建 SQL 限流任务,自主设置 SQL 类型、最大并发数、限流时间、SQL 关键词,来控制数据库的请求访问量和 SQL 并发量,从而达到服务的可用性。具体操作及应用案例,请参见 SQL限流
3
存在高复杂的请求

高复杂的请求,可能因为如下原因导致 CPU 资源过度消耗。
排序操作:在查询过程中进行排序,本身将消耗较大 CPU资源。
全表扫描:若数据库没有使用索引,请求将可能进行全表扫描,对 CPU 和 IO 资源造成较大的压力,从而导致性能下降。
不合理的索引:可能会因为覆盖的字段不足,索引字段的顺序不合理,而导致大量的物理读和逻辑读,占有较多 CPU 资源
高复杂的查询请求,通常比较耗时,会相应产生慢日志。可借助数据库智能管家 DBbrain 的诊断优化功能进行慢日志分析,在慢日志信息列表中,查看是否存在相关的关键字。具体操作,请参见 慢 SQL 分析
排序相关关键字:Sort、hasSortStage 等。
全表扫描关键字
COLLSCAN:说明该查询进行了全表扫描。
docsExamined:代表文档扫描条目。docsExamined 值越大,扫描的文档条目就越多,消耗 CPU 资源越多。
不合理索引关键字
IXSCAN:代表进行了索引扫描。
keysExamined:指明索引扫描条目。keysExamined 值越大,扫描的条目就越多,消耗CPU资源越多。
针对慢查询,请进行索引优化。
可借助数据库智能管家(TencentDB for DBbrain,DBbrain)索引推荐 ,选择最优的索引。
请参见最佳实践 索引优化解决读写性能瓶颈,提升数据库性能。
4
5
6
业务上涨,资源不足
业务量上涨,数据规模增长,当前实例的 CPU 规格不足。
登录 MongoDB 控制台,单击实例 ID 进入实例详情页面,选择系统监控页签,查看实例总请求指标 QPS,查看节点每秒被请求的次数是否明显偏高。

调整实例配置规格。
Mongod 节点:提升Mongod 的 CPU 与内存配置。具体信息,请参见 变更 Mongod 节点配置规格
Mongos 节点:如果 Mongos 达到瓶颈,请提升 Mongos 的节点规格,或增加 Mongos 数量。具体操作,请参见 变更 Mongos 节点配置规格新增 Mongos 节点