MongoDB CPU占用率高的原因分析

本文通过分析MongoDB的日志和运行命令,揭示了由于缺少适当索引导致的高CPU占用问题。查询操作`find`在`bws.block`集合上进行了全表扫描,扫描了40多万条记录,执行时间超过200ms。解决方案是后台创建索引以提高查询效率。
摘要由CSDN通过智能技术生成
  1. 通过查找Stack Overflow找到相关问题的解答
  2. 跟索引相关
  3. 使用db.currenyOp();命令得到正在执行的命令(增删改查)以及通过ns来查看是否正在使用索引'ns':'collections.system.indexes';            
  4. 同时,查看MongoDB log日志 MongoDB日志器会打印索引查询时间超过100ms的操作,发现当前数据库打印的数据查询超过400m
  5. 2018-06-28T16:51:08.275+0800 I COMMAND  [conn30] command bws.block command: find { find: "block", filter: { blockhash: "378bc0ec06bc22534f2967db5b2b1855dc9776596a7e6b46ad76805aad71d6e3" }, sort: { blockheight: -1 }, limit: 1 } planSummary: COLLSCAN keysExamined:0 docsExamined:376638 hasSortStage:1 cursorExhausted:1 numYields:2944 nreturned:1 reslen:4594 locks:{ Global: { acquireCount: { r: 5890 } }, Database: { acquireCount: { r: 2945 } }, Collection: { acquireCount: { r: 2945 } } } protocol:op_query 396ms
  6. 从日志得出查询时间较长的语句,单独执行db.collections.find({条件}).sort({value:-1}).limit(1).explain('executionStatus');得出查询详细信息。其中totalDocsExamined指的是MongoDB扫描的文档数量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值