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

记一次十亿级延敏感集群加索引引起业务抖动及快速恢复方法

读多少 峰值流量8-10W/s 该集群对应MongoDB内核版本:3.6.13,某天业务自己通过MongoDB管控平台串行方式添加几个索引(backgroud后台添加),一个索引添加执行完成返回后,...由于无法登陆后台做killop操作,于是直接kill进程,kill进程后启动,发现mongod还是构建索引,如下: 重启后,还是需要构建索引,因为之前索引没有执行完成mongod进程就挂了,因此需要重建索引来保持与主节点状态一直...也就是主节点同一刻只会有一个索引执行,IO负载低,此外由于主节点流量本身不高,读流量几乎都在从节点,索引索引执行很快,并且几乎不会影响流量延。 4. 为何连接数暴涨?...例如增加了链接限制白名单后,就可以通过127.0.0.1登陆到节点内部,然后通过killOp操作把从节点正在构建索引操作干掉。 6. 延敏感型业务如何做到业务无感知索引添加?...方法一:所有主从确保索引执行完成后添加下一个索引(影响相对较小) 后台backgroud加索引,确保所有主从索引构建完成后,才开始下一个索引创建,避免出现本文所说多个索引同时在从节点执行引起业务抖动

52220

搞会这个索引添加法,十亿级延敏感集群想抖动都难

读写分离 读多少 峰值流量8-10W/s 该集群对应mongodb内核版本:3.6.13,某天业务自己通过mongodb管控平台串行方式添加几个索引(background后台添加),一个索引添加执行完成返回后...由于无法登陆后台做killop操作,于是直接kill进程,kill进程后启动,发现mongod还是构建索引,如下: 重启后,还是需要构建索引,因为之前索引没有执行完成mongod进程就挂了,因此需要重建索引来保持与主节点状态一直...也就是主节点同一刻只会有一个索引执行,IO负载低,此外由于主节点流量本身不高,读流量几乎都在从节点,索引索引执行很快,并且几乎不会影响流量延。 为何连接数暴涨?...例如增加了链接限制白名单后,就可以通过127.0.0.1登陆到节点内部,然后通过killOp操作把从节点正在构建索引操作干掉。 六、延敏感型业务如何做到业务无感知索引添加?...方法一:所有主从确保索引执行完成后添加下一个索引(影响相对较小) 后台background加索引,确保所有主从索引构建完成后,才开始下一个索引创建,避免出现本文所说多个索引同时在从节点执行引起业务抖动

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

MongoDB限制与阈值

索引键限制存在: 如果现有文档索引条目超过索引键限制,则MongoDB不会在集合上创建索引。 如果索引字段索引条目超过索引键限制,则重新索引操作将出错。...有关CRUD操作列表,请参阅CRUD操作。 使用fcv**“4.4”**或更高版本,可以事务中创建集合和索引。有关详细信息,请参见事务中创建集合和索引。...例如,如果您在一个分片中写入现有集合,而在另一个分片中隐式创建一个集合,则MongoDB无法同一事务中执行这两项操作。 您无法限制(capped)集合。...4.4版本中有更新 以下操作事务中不被允许: 影响数据库目录操作,例如在使用fcv**"4.2"或更低版本创建/删除集合或索引。...批量大小限制 单个批处理操作中允许100,000次写入,这由对服务器单个请求定义。 3.6版中进行了更改:写入限制从1,000增加到100,000。此限制也适用于旧式OP_INSERT消息

14K10

常见问题:索引

管理员应在构建索引之前考虑性能影响。 索引构建会如何影响数据库性能? 集合上构建索引(译者注:前台创建),保存集合数据库索引构建完成前都不可进行读取或写入操作。...如果需要构建一个很大索引,请考虑在后台(background)构建索引。请参阅 对已填充数据集合进行索引构建操作副本集上构建索引。...要返回当前正在运行索引创建操作相关信息,请参阅Active Indexing Operations。要终止正在运行索引创建操作,请参阅db.killOp()。部分构建索引将被删除。...当索引太大而无法放入内存MongoDB必须从磁盘读取索引,这比从内存读取操作要慢得多。 某些情况下,索引不需要完全放入内存。有关详细信息,请参阅仅在内存中保留索引最近使用值。...操作如何影响索引操作可能需要更新索引: 如果写入操作修改了索引相关字段,MongoDB将更新所有键中包含该字段索引

82120

常见问题:MongoDB诊断

如果mongod基于UNIX或基于UNIX平台上意外关闭,并且mongod无法记录关闭或错误消息,请检查系统日志中是否有与MongoDB相关消息。...如果我们没有收到对端keepalive探测包回复消息,我们便可以断定连接已经不可用,进而可以采取一些措施。)...从磁盘加载数据到内存MongoDB交给操作系统进行。它只是通过内存映射其所有数据文件,并依赖于操作系统来缓存数据。当内存不足操作系统通常会从内存中驱逐最近最少使用数据。...默认情况下,WiredTiger对所有集合使用Snappy块压缩,对所有索引使用前缀压缩。压缩默认设置可在全局级别配置,也可在每个集合和每个索引创建期间单独进行设置。...最后,如果您片键具有低基数,MongoDB可能无法在数据之间创建足够分割(chunk将无法继续分裂)。 为什么一个分片会在分片集群中收到不均衡流量?

1K30

mongodb 索引详解(二)

单字段索引 MongoDB为文档集合中任何字段提供完整索引支持 。默认情况下,所有集合在_id字段上都有索引,应用程序和用户可以添加其他索引以支持重要查询和操作。...1.4 其他注意事项 如果集合包含大量数据,并且您应用程序需要能够构建索引访问数据,请考虑在后台构建索引,如 Background Construction。...如果尝试创建包含散列索引字段复合索引,则会收到错误。...当需要使用前缀索引MongoDB可以使用复合索引代替。 2.4 索引交集 从2.6版开始,MongoDB可以使用索引交集来完成查询。选择创建支持查询或依赖索引交集,取决于系统细节。...2.5 其他注意事项 如果集合包含大量数据,并且您应用程序需要能够构建索引访问数据,请考虑在后台构建索引,如 Background Construction。

1.1K30

定义和构建索引(四)

这是构建索引之前使用SetMapSelecability()方法处理索引构建期间对数据活动更新不会反映在索引条目中。这是通过在生成索引使生成操作锁定单个行来处理。...这是使用SetMapSelecability()完成。这使得查询优化器无法使用该索引重建现有索引创建索引都应执行此操作。...索引构建期间建立并发操作: 对于新索引类中创建索引定义(或在类%Storage.SQL中创建SQL Index Map规范)。编译类。...PLockFlag=2标志在重建过程中单个行上建立独占锁,以便并发数据修改操作构建索引操作相协调。...如果%BuildIndices()因检索数据出现问题而失败,系统将生成一个SQLCODE错误和一条消息(%msg),其中包含遇到错误%ROWID。 构建索引后,启用映射以供查询优化器选择。

74030

MongoDB是什么?看完你就知道了!

4.C/S服务模型 MongoDB核心服务器主要是通过mongod程序启动,而且启动不需对MongoDB使用内存进行配置,因为其设计哲学是内存管理最好是交给操作系统,缺少内存配置是MongoDB...1.切换数据库 use dba 创建数据库并不是必须操作,数据库与集合只有第一次插入文档才会被创建,与对数据动态处理方式是一致。简化并加速开发过程,而且有利于动态分配命名空间。...3.索引构建问题 如果数据集很大构建索引将会花费很长时间,且会影响程序性能,可通过 db.currentOp() //查看索引构建时间 当使用 mongorestore 时会重新构建索引。...,由分片自行决定使用哪个索引来执行该查询 (2)索引 每个分片都维护了自己索引,当在分片集合上声明索引,每个分片都会为它那部分集合构建独立索引,每个分片上分片集合都应该拥有相同索引。...八、部署与管理 1.部署 (1)部署架构 使用64位机器、32位机器会制约mongodb内存,使其最大值为1.5GB (2)cpu mongodb 只有当索引和工作集都可放入内存,才会遇到CPU瓶颈

1.1K20

MongoDB是什么?看完你就知道了!

4.C/S服务模型 MongoDB核心服务器主要是通过mongod程序启动,而且启动不需对MongoDB使用内存进行配置,因为其设计哲学是内存管理最好是交给操作系统,缺少内存配置是MongoDB...1.切换数据库 use dba 创建数据库并不是必须操作,数据库与集合只有第一次插入文档才会被创建,与对数据动态处理方式是一致。简化并加速开发过程,而且有利于动态分配命名空间。...3.索引构建问题 如果数据集很大构建索引将会花费很长时间,且会影响程序性能,可通过 db.currentOp() //查看索引构建时间 当使用 mongorestore 时会重新构建索引。...一旦到了某个分片上,由分片自行决定使用哪个索引来执行该查询 (2)索引 每个分片都维护了自己索引,当在分片集合上声明索引,每个分片都会为它那部分集合构建独立索引,每个分片上分片集合都应该拥有相同索引...八、部署与管理 1.部署 (1)部署架构 使用64位机器、32位机器会制约mongodb内存,使其最大值为1.5GB (2)cpu mongodb 只有当索引和工作集都可放入内存,才会遇到CPU

81030

MongoDB 3.6中新功能 (1) - 发展速度

今天我们就来这个序列第1部分,来了解一下3.6版本MongoDB核心数据库产品上做功能改善,包括变更流,可重试操作,更强数组操作能力及开发者工具。...文档模式可以动态地创建和修改,并且无需对数据库进行停机,使构建和衍变应用程序变得非常快速。...插入或修改文档通过触发API调用来实现微服务架构中数据同步。比如说,一条刚写入数据库新客户订单可以自动触发生成发票和交货计划操作。 数据变化时实时更新仪表板,分析系统及搜索引擎等。...安全性 - 用户只能在自己有访问权限集合上创建变更流。 可靠性 - 通知只大多数提交写入操作上发送,并在节点或网络出现故障持续使用。...可恢复性 - 当节点在故障后恢复,假设应用程序接收到最后一个事件还在oplog记录内,变更流可以自动恢复。

1.5K10

MongoDB 3.6中新功能 (1) - 发展速度

今天我们就来这个序列第1部分,来了解一下3.6版本MongoDB核心数据库产品上做功能改善,包括变更流,可重试操作,更强数组操作能力及开发者工具。...文档模式可以动态地创建和修改,并且无需对数据库进行停机,使构建和衍变应用程序变得非常快速。...插入或修改文档通过触发API调用来实现微服务架构中数据同步。比如说,一条刚写入数据库新客户订单可以自动触发生成发票和交货计划操作。 数据变化时实时更新仪表板,分析系统及搜索引擎等。...安全性 - 用户只能在自己有访问权限集合上创建变更流。 可靠性 - 通知只大多数提交写入操作上发送,并在节点或网络出现故障持续使用。...可恢复性 - 当节点在故障后恢复,假设应用程序接收到最后一个事件还在oplog记录内,变更流可以自动恢复。

1.5K10

MONGODB索引 大内存 与连锁思维

创建MONGODB 索引,属于基本操作,但如果是一个有2T collection 要加一个索引,也属于基本操作,实际上量变产生质变,很多问题考虑都不在那么简单。...创建索引时候,可以通过下面的语句来查看相关进度 db.currentOp(true).inprog.forEach(function(op){ if(op.msg!...==undefined) print(op.msg) }) MONGODB 4.2 系统上,构建过程开始和结束阶段,索引构建仅对被索引集合获取独占锁,以保护元数据更改。...构建过程其余部分使用后台索引构建生成行为,以便在构建期间最大化对集合读写访问。4.2尽管有更宽松锁定行为,但索引构建仍然可以生成高效索引数据结构。...mongodb4.2 系统应该是已经抛弃了 background参数来创建搜索,根据一代比一代强想法,自然是 background 有一些需要改进地方,新版本才会进行变动。

2.5K10

5个要点,带你了解MongoDBWiredTiger存储引擎

当存储引擎检测到两个操作之间存在冲突,将引发冲突,从而导致MongoDB自动重试该操作。 一些全局操作(通常是涉及多个数据库短暂操作)仍然需要全局“实例范围级别的”锁。...早期版本中,MongoDB将检查点设置为WiredTiger中以60秒间隔或在写入2GB日志数据对用户数据进行检查,以先到者为准。 写入新检查点期间,先前检查点仍然有效。...这样,即使MongoDB写入新检查点终止或遇到错误,重启后,MongoDB仍可从上一个有效检查点恢复。...压缩设置还可以集合和索引创建期间基于每个集合和每个索引进行配置。请参见指定存储引擎选项和db.collection.createIndex()storageEngine选项。...压缩默认值是可以全局级别配置,也可以收集和索引创建期间基于每个集合和每个索引进行设置。

1.9K20

常见问题:MongoDB基础知识

如果数据库不存在,MongoDB会在您第一次存储该数据库数据创建数据库。 如果集合不存在,MongoDB会在您第一次存储该集合数据创建集合。...发生在myNewDB库创建之后createIndex操作,将创建索引,并且如果集合不存在的话同时也会创建myNewCollection2集合。...3.2版中更改:但是,从MongoDB 3.2开始,您可以更新和插入操作期间强制执行集合文档验证规则。 某些集合属性(例如指定最大大小)可以显式创建集合期间指定并进行修改。...可以单个操作中写入一个或多个字段,包括对多个子文档和数组元素更新。MongoDB提供保证确保文档更新是完全隔离; 任何错误都会导致操作回滚,以便客户端收到文档一致视图。...MongoDB如何解决 SQL或Query注入问题? BSON 当客户端程序MongoDB中组合一个查询,它会构建一个BSON对象,而不是一个字符串。因此传统SQL注入攻击并不是问题。

1.9K10

mongodb-4.x复制集数据同步(replica-set-sync)

版本3.4中变更:赋值每个集合文档,初始化数据同步会构建所有的集合索引早期MongoDB版本中,此阶段仅构建_id索引。...版本3.4中变更:初始化数据同步时会在复制数据期间拉取源节点oplog新增加记录。确保目标成员节点在local数据库中有足够磁盘空间来临时存储这些操作记录。...MongoDB始终以原始写入顺序来应用oplog数据到指定文档。 当应用oplog数据MongoDB会阻塞所有的读取操作。...预提取索引以提高复制吞吐量 注意:此项仅适用于MMAPv1引擎 MMAPv1存储引擎中,MongoDB可以获取包含受影响数据和索引内存页,以提高应用oplog数据性能。...这个预取阶段可以最大程度减少应用oplog数据MongoDB保持时间。 默认配置下,次要成员节点将预取所有的索引

96020

使用MongoDB开发过程常见错误分析

使用随机值类型字段作为片键,例如version 4 UUID (Random UUID) b) .对自增长型字段创建哈希索引创建片键通过hashed选项,指定使用该哈希索引值作为片键,例如: ?.../on-selecting-a-shard-key-for-mongodb 3 程序里游标循环迭代过程中进行长时间操作 问题描述: 大概类似如下代码描述操作方式,程序中可能经常会遇到这样需求,...游标只有遍历完了所有查询结果以后,或者客户端主动发来消息要求终止(比如到达游标使用超时时间,默认是10分钟,或者是客户端检测到客户端游标已经不再使用时),MongoDB才会销毁游标,释放其占用资源...6 错误设计索引 问题描述: 通常,我们开发中遇到大部分读性能问题,可能都是因为没有为查询、排序操作建立索引,或者建立了错误索引导致。...特别是在数据量比较大情况,由于没有利用上索引,导致全表扫描,数据库需要从磁盘读取大量数据到缓存,占用大量内存,磁盘IO,CPU等系统资源,由于对这些资源争用,同时也可能会影响到期间进行写入操作

2.4K30

2020最新MongoDB规范你应该了解一下

MongoDB是为快速开发互联网应用 而设计数据库系统,其数据模型和持 久化策略就是为了构建高读/性能,并且可以方面的弹性拓展。...如果是读多创建我们可以尽量将 page size 设置比较小 ,比如 16KB,如果表数据量不大 ("internal_page_max=16KB,leaf_page_max=16KB,leaf_value_max...【建议】MongoDB 支持 TTL 索引,该索引能够按你需要自动删除XXX秒之前数据并会尽量选择在业务低峰期执行删除操作;看业务是否需要这一类型索引; 7....【建议】在数据量较大时候,MongoDB 索引创建是一个缓慢过程,所以应当在上线前或数据量变得很大前尽量评估,按需创建会用到索引; 8....【建议】写入大量数据时候可以选择使用 batchInsert,但目前 MongoDB 每一次能够接受最大消息长度为48MB,如果超出48MB,将会被自动拆分为多个48MB消息; 9.

1.9K30

深入浅出MongoDB复制

1.2、MongoDB Oplog MongoDB Oplog是MongoDB Primary和Secondary复制建立期间和建立完成之后复制介质,就是Primary中所有的写入操作都会记录到MongoDB...通过上图我们可以看到一共有7个步骤,下面我们看看每一个步骤MongoDB都做了什么: 主库收到添加从库命令 主库更新副本集配置并与新从库建立心跳机制 从库收到主库发送过来心跳消息与主库建立心跳 其他从库收到主库发来新版本副本集配置信息并更新自己配置...以上步骤Mongo 3.4 Initial Sync 有如下改进: 创建集合时候同时创建索引(与主库一样),MongoDB 3.4版本之前只创建_id索引,其他索引等待数据copy完成之后进行创建...通过上面触发切换场景,我们了解到MongoDB心跳信息是MongoDB判断对方是否存活重要条件,当达到一定条件MongoDB主库或者从库就会触发切换。...源码中构建心跳信息片段。

1.2K50

亿级月活全民K歌Feed业务如何玩转腾讯云MongoDB

翻页把上一次返回数据最小时间戳basetime带过来,然后把basetime之前有发布Feeduid以及basetime之后有发布最近20个uid过滤出来,重复上面步骤构建候选集合过程来输出这一页数据...为了避免TTL删除数据消耗线上业务性能,可以写入数据指定过期时间。过期时间直接配置成业务低峰期时段。...数据可靠性高场景会降低性能,K歌Feed业务使用初期场景中,我们会发现大多数场景都延迟不太稳定,核心业务都出现了这种情况,从5ms到1s抖动。...链式复制不足:当策略为majority请求耗时变大。 当业务采用“大多数”策略,应相应地关闭链式复制,避免请求耗时变大。我们关闭了链式复制后整体延迟稳定在10ms以内。...但是,随着集群数据量逐渐增加,当前该集群数据量已经比较大,开始出现凌晨集群定期抖动,主要现象如下: 访问延增加 慢日志增加 CPU使用率增加 通过分析,发现问题和数据备份时间点一致,由于物理备份和逻辑备份期间需要对整实例进行数据备份

84610
领券