system.objectdisposedexception: 已释放该集合_如何在MongoDB集合上创建索引

本文深入探讨了在MongoDB 4.2中如何在已填充的集合上创建索引,包括其优化的索引构建过程,如缩短锁表时间,以及对数据库性能、复制集、故障恢复等方面的影响。同时,介绍了如何监视和终止正在进行的索引生成。
摘要由CSDN通过智能技术生成

fb73a9b5149281478d3b6f7fecae0933.png

ddb4f7b75388050988c7e1d2132cbae5.png

MongoDB Manual (Version 4.2)> Indexes > Index Builds on Populated Collections

本次我们将从以下几方面来了解如何在MongoDB集合上创建索引。

  • 行为

  • 索引构建对数据库性能的影响  

  • 复制集环境的索引生成

  • 构建失败和恢复

  • 监视正在进行的索引生成

  • 终止正在进行的索引生成

  • 索引生成过程

MongoDB 4.2版本新变化

对指定集合构建索引时会独占该集合的读写锁(注:构建索引时会锁表)。对集合构建索引时该集合读和写操作会加锁,直到mongod进程完成索引构建,该集合的读写操作锁才会释放。MongoDB 4.2对该过程进行了优化,仅在索引生成的开始和结束保留独占锁,构建索引的其余过程可对该集合进行交错读写操作。(注:MongoDB 4.2缩短了索引创建时的锁表时间)

索引构建过程汇总如下:

1. 初始化

mongod 进程对正在编制索引的集合使用独占锁。所有对该集合的读写操作将阻塞直到mongod 进程释放锁。在此期间,应用程序无法访问集合。

2. 数据提取和加工

mongod进程释放上一过程中获取的所有锁,然后针对被索引的集合获取一系列意向锁。在此期间,应用程序可以对集合发出读写操作。

3. 清理

mongod进程释放上一过程中获取的所有锁,然后针对被索引集合获取独占锁。这时将阻塞对该集合所有读写操作直到mongod进程释放锁。应用程序此时无法访问该集合。

4. 完成

mongod进程标记索引状态为已可用,然后释放索引构建过程中的所有锁。

索引构建过程中的加锁描述细节参见Index Build Process章节。更深入了解MongoDB的加锁行为参见FAQ: Concurrency。

行为

MongoDB 4.2索引构建过程完全替换了之前版本的索引构建过程。MongoDB忽视了createIndexes  命令或其shell中createIndex()createIndexes()函数的background选项。(注:MongoDB 4.2中无需在db.collectionName.createIndex()中设置{'background':true})。

需特性兼容版本设置为4.2版本

当MongoDB集群从4.0版本升级到4.2版本时,需设置特性兼容版本选项到4.2版本,以启用该优化过程,参见setFeatureCompatibilityVersion

MongoDB 4.2版本在特性兼容版本为4.0时,仅支持4.0的索引构建方式。

索引前后台创建的比较

先前版本的MongoDB支持前后台两种方

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值