centos

MongoDB如何处理并发请求

小樊
35
2025-12-25 07:39:19
栏目: 云计算

并发控制总览 MongoDB 通过多粒度锁读写器锁存储引擎级并发控制来同时保障一致性与吞吐:以WiredTiger 为默认存储引擎时,读写多为文档级并发,仅在全局/数据库/集合层级获取意向锁(IS/IX);当检测到冲突时由存储层触发写入冲突并重试,对应用基本透明。锁模式包含:S(共享)X(排他)IS(意向共享)IX(意向排他),其中 X 与任何模式互斥S 仅与 IS 共存;锁是公平的,按队列授予并批量放行兼容请求以避免饥饿。自 MongoDB 4.0 起支持多文档事务(副本集),4.2 起支持分片集群事务;从 3.0 起默认使用 WiredTiger(取代 MMAPv1 的集合级锁),大幅提升了并发能力。

锁与隔离

典型操作的锁行为

操作 数据库锁 集合锁 说明
查询(find/aggregate) r(IS) r(IS) 并发读
插入(insert) w(IX) w(IX) 写冲突在存储层检测并可能重试
更新(update) w(IX) w(IX) 多文档更新(multi)可能阶段性让渡锁
删除(remove) w(IX) w(IX) 同上
创建索引(前台) W(X) 长时间阻塞,建议在维护窗口执行
创建索引(后台) w(IX) w(IX) 降低阻塞,但仍会影响性能
删除集合 W(X) 需要独占数据库锁
db.copyDatabase / db.repairDatabase W(全局X) 全局独占,强烈建议在离线窗口执行

并发性能优化建议

监控与排障

0
看了该问题的人还看了