MongoDB CPU飙高&慢日志优化

当MongoDB CPU使用率飙升并出现慢日志时,通过查询慢SQL、执行计划分析,发现全表扫描导致性能问题。通过添加索引、优化业务逻辑、调整查询条件顺序等方法成功降低CPU压力,提高查询效率。总结经验:先解决紧急问题,再进行问题定位,关键功能应设有开关以应对突发状况。
摘要由CSDN通过智能技术生成

timeline

  1. 接口响应慢告警,重要的接口,危险危险。Nginx的log告诉我确实。
  2. 业务服务器内存、cpu均正常,报错日志少。
  3. 检查MongoDB CPU 99%,大量慢日志,三个shard,全集中压力到shard1
  4. 紧急扩容,卡死,重启扩容
  5. 定位具体SQL,找到业务逻辑,某种场景下有大量的查询和修改,没走索引直接爆炸。
  6. 业务设计上有逻辑限流、逻辑开关。紧急关闭,mongo压力降低。

定位手段

查询现在的慢SQL

db.currentOp()

查看这个表的执行计划

和MySQL一样,也有explain

db.test.find({"data_id" : "ae4b5769-896f-465c-9fbd-3fd2f3357637"}).explain();
db.test.find({"data_id" : "775f57c2-b63e-45d7-b581-3822dba231b4"}).explain("executionStats");

explain 中的参数有三种

  1. queryPlanner 模式
    默认情况下,db.collection.explain()在queryPlanner详细模式下运行(无参的默认形势)。
    MongoDB 运行查询优化器来为 evaluation 下的操作选择获胜计划
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值