电影网站建设基本流程,神箭手wordpress免费吗,连云港市建设局网站,头条淘宝联盟网站推广怎么做MVCC 机制#xff0c;全称#xff08;Multi-Version Concurrency Control#xff09;多版本并发控制#xff0c;是确保 在高并发下#xff0c; 多个事务读取数据时不加锁也可以多次读取相同的值。 MVCC 在读已提交#xff08;READ COMMITTED#xff09;、可重复读… MVCC 机制全称Multi-Version Concurrency Control多版本并发控制是确保 在高并发下 多个事务读取数据时不加锁也可以多次读取相同的值。 MVCC 在读已提交READ COMMITTED、可重复读REPEATABLE READ 简称 RR模式下才生效。MVCC 在可重复读的事物隔离级别下可以解决脏读、脏写、不可重复读等问题。 我们知道MVCC 是基于乐观锁的实现所以很自然的想到 MVCC 是不是不会加锁。 这个问题也要看情况来回答 一般情况 在 MVCC 中通常不需要加锁来控制并发访问。相反每个事务都可以读取已提交的快照而不需要获得共享锁或排它锁。在写操作的时候MVCC 会使用一种叫为“写时复制”Copy-On-Write的技术也就是在修改数据之前先将数据复制一份从而创建一个新的快照。当一个事务需要修改数据时MVCC 会首先检查修改数据的快照版本号是否与该事务的快照版本一致如果一致则表示可以修改这条数据否则该事务需要等待其他事务完成对该数据的修改。另外这个事物在新快照之上修改的结果不会影响原始数据其他事务可以继续读取原始数据的快照从而解决了脏读、不可重复度问题。所以正是有了 MVCC 机制让多个事务对同一条数据进行读写时不需要加锁也不会出现读写冲突。 特殊情况
MVCC 本身是为了解决读写冲突避免阻塞所以理论上 MVCC 在存取数据时并不存在加锁的操作。但是在实际的数据库操作中MVCC 并不能完全无视锁机制。这是因为虽然 MVCC 可以解决读写冲突增强并发性但在某些场景下还是需要用到锁来控制并发比如更新操作。在 MVCC 中对一个数据进行更新操作通常会先对这个数据加锁防止其他的事务对同一个数据进行修改以保证数据的一致性。然后在这个事务持有锁的期间其他的事务如果要对同一个数据进行读取它可以读取这个数据的旧版本不会被阻塞。
总结
所以说MVCC 在处理过程中虽然本身不涉及加锁但在实际操作中为了防止更新操作导致的数据不一致会加锁但对读操作是非阻塞的。