Mongo动态创建集合及加锁场景下其他集合读写是否受影响
结论:该假设在绝大多数生产环境下是成立的,仅少数老旧版本/操作不当场景会有例外
- MongoDB 3.0之后默认使用WiredTiger存储引擎,常规读写操作的锁粒度为文档级,只有元数据变更类操作才会申请对应范围的意向锁。你提到的创建集合、后台创建索引、集合分片三类操作,都仅会申请当前数据库、目标集合的元数据锁,完全不会占用其他集合的锁资源,正常情况下不会阻塞其他集合的读写请求。
- 需要注意几个特殊场景:
- 若使用3.0以下的老旧MongoDB版本(采用已经淘汰的MMAPv1存储引擎),锁粒度为库级,此时创建集合会锁定整个库,会阻塞同库下所有其他集合的读写。
- 若你误操作用前台模式创建索引(而非你规划的后台模式),建索引期间会持有目标集合的排他写锁,会阻塞该集合的所有读写,但依然不会影响其他集合的请求。
- 分片操作执行过程中如果涉及chunk迁移、拆分逻辑,仅可能影响目标分片集合的部分请求,不会波及其他集合。
- 补充优化建议:如果业务对延迟敏感度极高,可以把动态建集合的操作放到业务低峰期执行,规避极端情况下元数据锁冲突的极小概率风险。
内容的提问来源于stack exchange,提问作者septerr
相关产品推荐
相关产品推荐

