首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

记一次 MongoDB 占用 CPU 过高问题的排查

官方文档 https://docs.mongodb.com/manual/reference/method/db.currentOp/?...包含信息 主要有以下信息: client — 请求是由哪个客户端发起的 opid — 操作的opid,有需要的话,可以通过 db.killOp(opid) 杀死操作 secs_running/microsecs_running...解决办法 — 添加索引 最好针对查询语句建立索引: db.col.createIndex({"title":1}) 我们也可以在添加索引时增加传入可选参数,例如,在生产环境我们通常希望索引添加的操作阻塞其他数据库操作...慢请求分析 — 索引设置不合理 有的时候,请求即使查询走了索引,执行也很慢,通常是因为索引建立不太合理或者匹配结果太多。 索引通常应该建立在区分度大的字段上。...参考资料 https://docs.mongodb.com/manual/reference/method/db.currentOp/?

2.1K10
您找到你想要的搜索结果了吗?
是的
没有找到

MongoDB CPU 利用率高解决方法

Step1: 分析数据库正在执行的请求 db.currentOp() client:请求是由哪个客户端发起的?...opid:操作的opid,有需要的话,可以通过 db.killOp(opid) 直接干掉的操作 secs_running/microsecs_running: 这个重点关注,代表请求运行的时间,如果这个特别大...profiling的结果输出含义在这里,多看官网文档 CPU杀手1:全表扫描 全集合(表)扫描 COLLSCAN,当一个查询(或更新、删除)请求需要全表扫描时,是非常耗CPU资源的,所以当你在 system.profile...一个查询扫描了多少文档,可查看 system.profile 里的 docsExamined 的,该越大,请求CPU开销越大。...> 关键字:COLLSCAN、 docsExamined CPU杀手2:不合理的索引 有的时候,请求即使查询走了索引,执行也很慢,通常是因为合理建立不太合理(或者是匹配的结果本身就很多,这样即使走索引,

1K10

浅尝辄止MongoDB:管理(2)

集合中的记录数与预期匹配。 任何一种迹象都可能表示应用出现了问题,或更麻烦的是,数据损坏或处于不一致状态。 1....查看服务器状态 db.serverStatus(); 输出中可以看到MongoDB的版本、后台刷写情况、副本集情况、操作数量情况、进出网络情况、连接数情况和内存情况等信息。...其中内存相关字段的含义是(单位是M): mapped:映射到内存的数据大小 visze:占用的虚拟内存大小 res:实际使用的内存大小 serverStatus输出了很多细节,在该函数的输出信息中可以找到两个最重要的部分...可以添加过滤条件: db.currentOP({"ns":"test"}); 5....越小越好,最好不要大于100。 flushes:表示刷写到磁盘的次数。 mapped:表示映射到内存的数量,约等于数据目录大小。 vsize:表示正在使用的虚拟内存大小,通常为数据目录的2倍。

41220

核心18问 | 万亿级数据库MongoDB集群性能优化实践合辑(下)

mongostat统计信息中最核心的几个影响性能的统计项: dirty:存储引擎脏数据比例,默认该为5%的时候,wiredtiger存储引擎自带的evict现成开始选择脏数据page淘汰到磁盘;如果该达到...qrw arw:等待队列数,如果该越大,说明会引起客户端请求排队处理。一般该会再dirty占比超过20%,used占比过高超过95%,或者磁盘IO慢会出现。...,则可以通过如下命令获取当前执行时间超过5s的所有请求,查询请求,command请求: db.currentOp({"secs_running":{"$gt":5}}) db.currentOp({"secs_running...":{"$gt":1}, "op":"query"}) db.currentOp({"secs_running":{"$gt":5}, "op":"command"}) kill查询时间超过5s的所有请求...mysql我不是很了解,mongodb推荐搭两集群双向同步来备份,直接利用mongodb原生的复制集功能来完成多活容灾,成本、性能、一致性都可以得到保证。

2.3K70

超硬核的MongoDB基础讲解。《记得收藏,不然看着看着就找不到了》

废话了 ? 前言 目前我们常用的MS SQL数据库、ACCESS数据库、MongoDB、My SQL数据库等等。 之前我讲过My SQL数据库,有兴趣的朋友可以去看看。...采用关系模型主要是为了获得更好的扩展性, MongoDB不再有”行”(row)的概念, 其运行方式主要基于两个概念:集合(collection)与文档(document)。...根据用户的服务器, 可分为32位或64位 Boolean 布尔, 用于存储布尔(真/假) Double 双精度浮点, 用于存储浮点 Arrays 用于将数组或列表或多个存储为一个键 Object...}) db_ct_name.fint() // 删除当前这个集合 db.ct.name.drop() 2、修改集合中的文档 // 修改匹配的第一条数据 db.ct_name.update({id:数字..." : 0, "microsecs_running" : NumberLong(47), "op" : "command", "ns

75620

MONGODB 出现问题怎么查找问题,三板斧

NC这一阵子MONGODB 的需求起来了,但问题是之前没来之前也用MONGODB 但实际得情况是,不怎么样。运维的同事告诉我,MONGODB 在公司原来的情况可以用一句话来表达,有这么个东西。...这边表到底我怎么解决的这个问题,这里先说说,遇到这样得问题,我们怎么办。...第二斧, 针对当前访问数据库的源地址,进行分类,将每个地址对数据库访问进行统计 db.currentOp(true).inprog.reduce( (accumulator, connection...; }, { TOTAL_CONNECTION_COUNT: 0 } ) 下面是一个更详细的展示方式 db.getSiblingDB("admin").aggregate( [ { $currentOp...db.currentOp({"secs_running": {$gte: 5}}) 或者直接在系统的currentOp中查看当前是否有慢的语句在执行。

74910

mongo创建索引及索引相关方法

2、复合索引 MongoDB 支持复合索引,其中复合索引结构包含多个字段 复合索引可以支持在多个字段上进行的匹配查询,语法结构如下: db.collection.createIndex ({ <key1...默认为 false. sparse Boolean 对文档中不存在的字段数据启用索引;这个参数需要特别注意,如果设置为true的话,在索引字段中不会查询出包含对应字段的文档.。...如果一个索引能够精确匹配一个查询,那么查询优化器就会使用这个索引。 如果不能精确匹配呢?可能会有几个索引都适合你的查询,那MongoDB是怎样选择的呢?...secs_running 表示该操作已经执行的时间,单位为秒。如果该字段返回的特别大,需要查看请求是否合理。 microsecs_running 表示该操作已经执行的时间,单位为微秒。...该越大,CPU开销越大。 如果索引建立的不太合理,或者是匹配的结果很多。这样即使使用索引,请求开销也不会优化很多,执行的速度也会很慢。

3.6K20

【最佳实践】MongoDB导出导入数据

uid: Binary.createFromBase64("O0CMtIVItQN4IsEOsJdrPL8s7jv5xwh5a/A5Qfvs2A8=", 0) }, secs_running...: Long("53877"), microsecs_running: Long("53877330742"), op: 'command', ns: 'likingtest.oprcesDataObjInit...uid: Binary.createFromBase64("O0CMtIVItQN4IsEOsJdrPL8s7jv5xwh5a/A5Qfvs2A8=", 0) }, secs_running...的大集合是可以接受的,但是最后的索引创建实在过于缓慢,且没有找到合适的解决办法:索引需多并发执行创建,且确保索引生效,本次索引创建最后并未生效■ 2023-09-15T19:02 第4次10并发导入测试,恢复索引...to restore.以上可见,耗时:2h22m结论1、restore 时需设置大数据量 collection 多并发导入:--numInsertionWorkersPerCollection=82、恢复索引

58760

MongoDB权威指南学习笔记5---索引相关的知识点

cursor表明是否用了索引 nscanned 要分2部分解释:如果使用了索引,是扫描的索引条目;否则就是扫描的文档总数 nscannedObjects---mongodb完成这个查询扫描的文档总数。...2 建立索引 db.user.ensureIndex({"username":1}) 3 查询某个集合的所有索引 db.doc.getIndexes() 4 查看当前服务器的操作 db.currentOp...() { "inprog" : [ { "opid" : 486, "active" : true, "secs_running" : 2, "op" : "getmore...db.user.ensureIndex({"username":1},{"unique":true,"dropDups":true}) 18 唯一索引与null 如果是唯一索引,则他会把null看做是一个且必须唯一...注意,如果某个文档没有email字段,而又建立了稀疏索引 则这个文档不会在索引中存在,则你搜索的时候,是不会搜到这个文档的 mongoDB怎么这么多变态的东西!真是个大坑!

56750

【DB应用】MongoDB性能监控工具

它会间隔固定时间获取mongodb的当前运行状态,并输出。如果你发现数据库突然变慢或者有其他问题的话,你第一手的操作就考虑采用mongostat来查看mongo的状态。...高并发时,一般队列会升高。 · conn 当前连接数 · time 时间戳 使用profiler 类似于MySQL的slow log, MongoDB可以监控所有慢的以及不慢的查询。...设个合理的话,到达这个mongodb就拒绝新的连接请求,避免被太多的连接拖垮。...db.currentOp() Mongodb 的命令一般很快就完成,但是在一台繁忙的机器或者有比较慢的命令时,你可以通过db.currentOp()获取当前正在执行的操作。...在没有负载的机器上,该命令基本上都是返回空的 > db.currentOp() { "inprog" : [ ] } 以下是一个有负载的机器上得到的返回样例: { "opid" : "shard3:

1.1K40

MongoDB 常用运维实践总结

arbiter(仲裁节点):仲裁服务器本身包含数据,仅能在主节点故障时,检测所有副本服务器并选举出新的主节点,其实现方式是通过主节点、副本节点、仲裁服务器之间的心跳(Heart beat)实现。...({"active" : true,"secs_running" : { "$gt" : 2000 }}); 3、动态调整日志级别和设置缓存大小 # 设置日志级别参数 db.adminCommand(...改为后台新建索引,速度很会慢,但是不会影响业务,该索引只会在新建完成之后,才会生效; # 查询运行时间超过200ms操作 db.currentOp({"active" : true,"secs_running...开启profile功能命令为 db.setProfilingLevel(level); #level等级,level为1的时候,慢命令默认为100ms,更改为db.setProfilingLevel...一般情况下,建议使用升序片键(是一种随着时间稳定增长的字段,自增长的主键是升序键 ),因为这个会导致局部的热读热写,不能发挥分片集群的真正实力。

2.1K11
领券