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

MongoDB索引选择重要性

线上某业务,频繁出现IOPS 使用率100%(每秒4000IOPS)现象,每次持续接近1个小时,从慢请求日志发现是一个 getMore 请求耗时1个小时,导致IOPS高;深入调查之后,最终发现竟是一个索引选择问题...,查询时会按 _id 排序,2个主要查询条件如下,先执行find命令,然后遍历cursor,读取所有满足条件文档。...,总文档数超过1亿条 MongoDBfind、getMore特性 find命令,会返回第一批满足条件batch(默认101条记录)以及一个cursor getMore 根据find返回cursor...17w,才找到101条符合条件记录,耗时46s 第二次要累计近4MB符合条件文档(8419条)才返回,需要全表扫描更多文档,最终耗时1个小时,由于全表扫描对cache非常不友好,所以一直是要从磁盘读取...从日志可以看出,绝大部分情况,MongoDB 都是走 created_at 索引 上述case,那个索引更优,其实是跟数据分布情况相关 如果满足 created_at 查询条件文档特别多,那么对大量文档排序开销也是很大

61130

MongoDB索引选择重要性

线上某业务,频繁出现IOPS 使用率100%(每秒4000IOPS)现象,每次持续接近1个小时,从慢请求日志发现是一个 getMore 请求耗时1个小时,导致IOPS高;深入调查之后,最终发现竟是一个索引选择问题...,查询时会按 _id 排序,2个主要查询条件如下,先执行find命令,然后遍历cursor,读取所有满足条件文档。...,总文档数超过1亿条 MongoDBfind、getMore特性 find命令,会返回第一批满足条件batch(默认101条记录)以及一个cursor getMore 根据find返回cursor...17w,才找到101条符合条件记录,耗时46s 第二次要累计近4MB符合条件文档(8419条)才返回,需要全表扫描更多文档,最终耗时1个小时,由于全表扫描对cache非常不友好,所以一直是要从磁盘读取...从日志可以看出,绝大部分情况,MongoDB 都是走 created_at 索引 上述case,那个索引更优,其实是跟数据分布情况相关 如果满足 created_at 查询条件文档特别多,那么对大量文档排序开销也是很大

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

有坑勿踩(二): 关于游标

前 言 聊一聊一个最基本问题,游标的使用。可能你从来没有注意过它,但其实它在MongoDB使用中是普遍存在,也存在一些常见坑需要引起我们注意。...所以当程序进行查询时候,实际上在后台发生事情包括: 驱动在后台获取batchSize条数据并自己缓存起来; 每次程序调用游标的next()方法时,从这些缓存中提取一条并返回; 当batchSize条数据都返回完之后...那么假设你通过游标读取数据时候是为了进行一系列分析处理,那么下一次getmore在什么时候发生将取决于你应用在多长时间内消耗完了当前缓存中数据。...“游标不存在”另一种可能性是有些用户热衷于在MongoDB前面加上负载均衡/自动故障恢复软/硬件。...事实上MongoDB和其驱动本身就已经能够完成高可用和负载均衡,并不需要额外画蛇添足。 ? 作者:张耀星 MongoDB大中华区高级咨询顾问 MongoDB中文社区联席主席

96920

serverStatus详解

asserts.rollovers:自上次MongoDB进程启动以来翻转计数器已翻转次数。在2^30个断言之后,计数器将翻转为零。使用此值可为asserts数据结构中其他值提供上下文 。...报告自上次启动以来对mongod实例查询操作指定 读取关注级别的文档。 ? opReadConcernCounters之和等于 opcounters.query。...transactions:包含有关可重试写入和 多文档事务数据文档。 transactions.retriedCommandsCount:相应可重试写入命令已经提交之后收到重试总数。...metrics.operation.scanAndOrder:返回无法使用索引排序操作已排序数目的查询总数。...注意 这个数字可能非常大,因为即使getmore操作没有初始返回数据,MongoDB也会等待更多数据。

2.8K30

MongoDB command命令处理模块源码实现二

,例如mongo shell敲一个mongodb无法识别得命令,这里就会统计出来 static Counter64 unknownCommands; //根据命令字符串名查找对应命令 static...命令run 结合《命令处理模块源码实现一》和本章节对command处理流程可以得出,runCommandImpl接口通过如下调用流程最终执行特定命令run接口,这里以insert写入和读取流程为例,mongod...,即使是无法识别的命令也会统计,命令统计可以通过db.serverStatus().metrics.commands获取,如下图所示: ?...作者:杨亚洲 前滴滴出行技术专家,现任OPPO文档数据库MongoDB负责人,负责oppo千万级峰值TPS/十万亿级数据量文档数据库MongoDB内核研发及运维工作,一直专注于分布式缓存、高性能服务端、...MongoDB-全球领先现代通用数据库 点击访问MongoDB官网www.mongodb.com/zh ?

1.1K30

JavaScrip最容易犯十大错误及其避免方法()

Uncaught TypeError: Cannot read property 如果你是一个javascript开发者,你肯定看到过此错误 读取属性或调用方法对象未定义 这可能由于许多原因而发生,...反过来,这意味着ItemList将项目定义为未定义,并且您在控制台中收到错误 - “Uncaught TypeError无法读取未定义属性’map’”。 这很容易解决。...这是因为对于空白对象引用,DOM API返回null。 任何执行和处理DOM元素JS代码都应该在创建DOM元素之后执行。 JS代码按照HTML中布局从上到下进行解释。...Uncaught TypeError: Cannot set property 当我们尝试访问未定义变量时,它总是返回undefined,我们无法获取或设置undefined任何属性。...在这种情况下,应用程序将抛出“Uncaught TypeError无法设置未定义属性”。 10.

11610

有坑勿踩(二): 关于游标

前 言 聊一聊一个最基本问题,游标的使用。可能你从来没有注意过它,但其实它在MongoDB使用中是普遍存在,也存在一些常见坑需要引起我们注意。...所以当程序进行查询时候,实际上在后台发生事情包括: 驱动在后台获取batchSize条数据并自己缓存起来; 每次程序调用游标的next()方法时,从这些缓存中提取一条并返回; 当batchSize条数据都返回完之后...那么假设你通过游标读取数据时候是为了进行一系列分析处理,那么下一次getmore在什么时候发生将取决于你应用在多长时间内消耗完了当前缓存中数据。...“游标不存在”另一种可能性是有些用户热衷于在MongoDB前面加上负载均衡/自动故障恢复软/硬件。...事实上MongoDB和其驱动本身就已经能够完成高可用和负载均衡,并不需要额外画蛇添足。 作者:张耀星 MongoDB大中华区高级咨询顾问 MongoDB中文社区联席主席

79130

MongoDB数据库查询性能提高40倍

MongoDB数据库查询性能提高40倍经历分享 大家在使用 MongoDB 时候有没有碰到过性能问题呢?...当然这是已经加了索引结果,否则可能都无法得到结果了。 减少查询次数 瓶颈显而易见,在循环中查询Collection B,增加了网络开销,自然也就增加时间,如果一次查询出所有结果,自然会大大提高效率。...仔细查找,发现在查询数据集B时有很多getMore命令。这就奇怪了,我是一次性查询,为什么还有getMore。 赶紧查下官方文档,然后发现了下面的内容: ?...batcSize参数指定了每次返回个数,默认101个。那看来这个应该是问题所在。找下pymongo文档,也可以设置这个参数,那就设个大吧10000。...返回值减负 当日不能放弃,继续通过日志查找线索,发现还是有很多getMore。通过各方查找,发现mongodb每次最多返回16M记录,通过getMore日志比对,发现的确如此。

3K20

MongoDB运维与开发(7)---MongoDB监控

// MongoDB运维与开发(7)---MongoDB监控 // MongoDB中自带两个监控工具,分别是mongostat和mongotop,今天我们看看这两个工具使用方法。...: insert、query、update、delete 分别代表每秒操作次数 getmore代表当前批量查询得到文档个数,如果查询文档多,mongodb会自动批量查询 command代表primary...res:当前已经使用物理内存量,单位为Mb qrw:等待读取文档个数与等待写入文档个数 arw:正在执行读取文档个数与正在执行写入文档个数 net_in|net_out 进出网络流量 conn...collections:当前数据库中集合数量 view:当前数据库中视图数量 objects:当前数据库中所有文档数量 avgObjSize:数据库中文档平均大小 dataSize:当前数据库数据大小...:当前数据库中索引代销,单位是byte fsUsedSize:当前MongoDb所在硬盘已经使用空间大小 fsTotalSize:当前MongoDb所在硬盘总共空间大小 ok:1表示成功,0表示失败

1K10

来自1000多个项目的10大JavaScript错误浅析

在Chrome里读取未定义对象属性或调用未定义对象方法时就会发生这个错误,在Chrome开发者控制台可以很容易地重现这个错误。...TypeError: ’undefined’ is not an object 在Safari里读取未定义对象属性或调用未定义对象方法时就会发生这个错误,在Safari开发者控制台可以很容易地重现这个错误...TypeError: null is not an object 在Safari里读取空(null)对象属性或调用空对象方法时就会发生这个错误,在Safari开发者控制台可以很容易地重现这个错误。...TypeError: Object doesn’t support property 在IE里读取未定义对象属性或调用未定义对象方法时就会发生这个错误,在IE开发者控制台可以很容易地重现这个错误。...Uncaught TypeError: Cannot set property 我们无法对undefined变量进行赋值或读取操作,否则的话会抛出“Uncaught TypeError: cannot

6.2K80

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

COLLSCAN |grep -v "getMore" | grep -v "oplog.rs" 找出文件末尾1000000行中所有的慢日志,不包含oplog,getMore tail mongodb.log...如果对下面的命令不熟悉,可以查看 MongoDB 官方文档关于 Shard Zone/Chunk 解释。...数组中文档如果需要查询指定字段,一定记得对数组中嵌套字段添加子索引。 数组字段中文档一定要控制在一定范围,避免该数组过大,数组过大有遍历、磁盘IO过高等问题。 嵌套子文档层数不宜过多。...最后 国内真正拥有企业级分布式数据库自研能力公司主要集中在阿里、腾讯头部几家,即使二三线互联网公司也无法做到真正意义上企业级分布式数据库研发能力,拥抱开源是一个明智选择。...正如在Qcon专题:现代数据架构、dbaplus、mongodb中文社区所分享,当前mongodb国内影响力待提升最大问题在于国内真正研究mongodb内核实现细节的人太少,造成很多复杂问题无法解决,

2.3K70

1000多个项目中十大JavaScript错误以及如何避免

当你读取一个属性或调用一个未定义对象方法时,Chrome 中就会报出这样错误。 ? 导致这个错误发生原因有很多,常见一种情况是在渲染 UI 组件时,不正确地初始化状态。...这是在 Safari 中读取属性或调用未定义对象上方法时发生错误,这与 Chrome 上述错误基本相同,只是 Safari 使用不同错误消息。 ? 3....TypeError: Null Is Not an Object (evaluating...) 这是在 Safari 中读取属性或调用空对象上方法时发生错误。 ?...TypeError: Cannot Read Property ‘length’ 这是 Chrome 中发生错误,因为读取未定义长度属性变量。 ?...Uncaught TypeError: Cannot Set Property 当尝试访问未定义变量时,总会返回 undefined。我们也无法获取或设置 undefined 任何属性

8.2K40

10 种 JavaScript 最常见错误

当你读取一个未定义对象属性或调用其方法时,这个错误会在 Chrome 中出现。 您可以很容易在 Chrome 开发者控制台中进行测试。 ?...2、 TypeError: ‘undefined’ is not an object 这是在 Safari 中读取属性或调用未定义对象上方法时发生错误。...3、 TypeError: null is not an object 这是在 Safari 中读取属性或调用空对象上方法时发生错误。...8、 TypeError: Cannot read property ‘length’ 这是因为读取未定义变量长度属性而发生错误。 您可以在 Chrome 开发者控制台中进行测试。 ?...: Cannot set property 当我们尝试访问一个未定义变量时,它总是返回 undefined,我们不能获取或设置任何未定义属性

8.5K20

1000多个项目中十大JavaScript错误以及如何避免

当你读取一个属性或调用一个未定义对象方法时,Chrome 中就会报出这样错误。 [image.png] 导致这个错误发生原因有很多,常见一种情况是在渲染 UI 组件时,不正确地初始化状态。...这是在 Safari 中读取属性或调用未定义对象上方法时发生错误,这与 Chrome 上述错误基本相同,只是 Safari 使用不同错误消息。...[image.png] TypeError: Null Is Not an Object (evaluating...) 这是在 Safari 中读取属性或调用空对象上方法时发生错误。...TypeError: Cannot Read Property ‘length’ 这是 Chrome 中发生错误,因为读取未定义长度属性变量。...我们也无法获取或设置 undefined 任何属性。在这种情况下,应用程序将抛出“Uncaught TypeError cannot set property of undefined”。

6.2K30

MongoDB大数据量模型设计最佳实践

基于MongoDB解决方案 1. MongoDB天生json处理能力,不需要固定字段。并在4.2版本推出 Wildcard index 天生支持对不固定子集查询(索引)。...MongoDB本身一个文档大小限制为16M,这里考虑到,我们设备会比较多,2W个设备。可能每个用户只需要查询其中几十或者几百个设备,所以,我们设计成上面数据桶方式。...字段解释: id —文档ID(MongoDBObjectId) deviceId —查询设备ID date—样品日期;我们可以将其存储在此处以简化聚合 first —在存储桶中读取最旧数据时间戳...last —存储桶中读取最新数据时间戳 samples —数据容器 经过实际,测试每个文档对应一个设备id,每个文档中存放1000条设备记录查看这个文档大小: 评估实际场景当个文档大小 rs01:...下面是研发按照实际生产环境数据模型压测结果: MongoDB每秒upsert数量 insert query update delete getmore command dirty used flushes

1K70

MongoDB限制与阈值

`和`$`,并且不受MongoDB官方驱动程序支持。 警告 MongoDB不支持重复字段名称 MongoDB查询语言对于具有重复字段名称文档未定义。...该名称指的是SORT阶段在返回任何输出文档之前读取所有输入文档要求,从而阻止了该特定查询数据流。...(从MongoDB 4.2开始) 您无法在config,admin或local数据库中读取/写入集合。 您无法写入system.*集合。 您无法返回受支持操作查询计划(即explain)。...对于在事务外部创建游标,不能在事务内部调用getMore。对于在事务中创建游标,不能在事务外部调用getMore。...( {}, { size: 1, "size.uom": 1 } ) // Invalid starting in 4.4 在以前版本中,嵌入文档及其字段之间最后一个投射决定了整个投射: 如果嵌入式文档投射紧随其字段所有投射之后

14K10

巧用 maxTimeMS 服务端超时,避免承载亿级用户腾讯云数据库MongoDB服务雪崩

腾讯云数据库MongoDB作为一款基于开源社区MongoDB版本文档数据库产品,其承载着公司内外包括微信、看点、QQ音乐在内亿级用户重量级APP产品。.../command/find/ getmore 支持 支持 https://docs.mongodb.com/v4.0/reference/command/getMore/getMore 这里特指 awaitDataTimeOut...腾讯云MongoDB对 maxTimeMS 服务端超时优化 1.完善 mongos 写命令对 maxTimeMS 支持 Mongos 会根据原始请求按目标 shard 分组之后重构子请求,并将每个子请求转发给对应...腾讯云MongoDB在原生版本基础上,解决了 4.0 和 4.2 版本无法在 mongos 侧正确处理写命令超时问题,并支持了服务端默认配置,保证服务端超时后能很快退出,防止后端请求积压导致服务雪崩...招贤纳士 腾讯云MongoDB作为一款基于开源社区MongoDB版本文档数据库产品,其承载着公司内外包括微信、看点、QQ音乐在内亿级用户重量级APP产品。

1K50

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券