MongoDB WiredTiger锁级别咨询:文档级锁及事务锁相关疑问
WiredTiger锁机制疑问解答
问题1:在WiredTiger中,执行插入、删除、更新操作时是否仅锁定相关文档?
不是的。WiredTiger确实采用文档级排他锁来控制单个文档的并发访问,但同时会额外持有数据库级和集合级的意向排他锁(IX锁)。这种IX锁是一种“声明性”的锁,它不会阻止其他操作对同集合/数据库加意向锁,只是用来防止其他操作对整个数据库或集合加排他锁(X锁)。
简单来说:核心的并发控制靠文档级锁——只要操作的不是同一个文档,多个写操作就能在同集合里并行执行;而数据库/集合的IX锁是用来避免“整个库/集合被锁死”的场景,不会影响正常的文档级并发。
问题2:事务场景下,若一个事务涉及2个集合并分别更新1个文档,是否仅锁定这2个文档而不锁定集合?
同样不是仅锁定两个文档。这个事务会同时持有:
- 两个目标集合所属数据库的IX锁
- 两个目标集合的IX锁
- 两个被更新文档的排他锁
但注意:集合的IX锁不会限制其他操作访问集合内的其他文档,它只是防止其他操作对整个集合加排他锁。真正会阻止并发的只有那两个被更新文档的排他锁——其他事务只要不碰这两个文档,依然可以正常操作两个集合里的其他数据。
内容的提问来源于stack exchange,提问作者Lion.k
相关产品推荐
相关产品推荐

