MongoDB CPU飙高&慢日志优化

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 下的操作选择获胜计划

猜你喜欢

转载自blog.csdn.net/qq_28722667/article/details/130839380