佛山做网站制作公司,公司手机版网站制作,彩票走势图网站是用什么程序做的,wordpress后台密码破解MVCC概念
MVCC(Multi-Version Concurrency Control) 多版本并发控制#xff0c;是一种并发控制机制,用于处理数据库中的并发读写操作#xff0c;它通过在每个事务中创建数据的快照#xff0c;实现了读写操作的隔离性#xff0c;从而避免了读写冲突和数据不一致的问题。
M…MVCC概念
MVCC(Multi-Version Concurrency Control) 多版本并发控制是一种并发控制机制,用于处理数据库中的并发读写操作它通过在每个事务中创建数据的快照实现了读写操作的隔离性从而避免了读写冲突和数据不一致的问题。
MySQL基本并发控制机制
锁机制当前读
MySQL使用锁机制来控制并发访问数据库的操作锁可以分为两种类型共享锁S锁和排他锁X锁共享锁允许多个事务同时读取同一数据而排他锁则只允许一个事务进行写操作。
这种方式它读取的是记录的最新版本读取时还要保证其他并发事务不能修改当前记录会对读取的记录进行加锁。
对于我们日常的操作如select ... lock in share mode(共享锁)select ... for update、update、insert、delete(排他锁)都是一种当前读。
MVCC快照读
MVCC是一种高级并发控制机制它通过创建数据的快照和版本控制来实现读写操作的隔离性。MVCC允许事务在读取数据时看到之前的版本从而避免了读写冲突和数据不一致的问题。
简单的select不加锁就是快照读快照读读取的是记录数据的可见版本有可能是历史数据不加锁是非阻塞读。
Read Committed(RR)每次select都生成一个快照读。Repeatable Read(RC)开启事务后第一个select语句才是快照读的地方。Serializable快照读会退化为当前读加锁。 MVCC的重要组件
Read View读视图
ReadView是快照读SQL执行时MVCC提取数据的依据记录并维护系统当前活跃的事务未提交的id也就是开始事务时的数据。
ReadView四个核心字段 快照是在每个事务开始时创建的一个数据库状态的副本该快照包含了当前数据库中所有数据行的版本信息每个事务在开始时会记录一个时间戳用于标识该事务的开始时间。 读操作时MySQL会根据事务开始的时间戳和快照中的版本信息来判断数据行的可见性。如果某个数据行的版本早于事务开始的时间戳则该数据行对当前事务可见反之如果数据行的版本早于事务开始的时间戳或者被当前事务修改过则该数据行对当前事务不可见。
不同的隔离级别生成ReadView的时机不同 READ COMMITTED 在事务中每一次执行快照读时生成ReadView。 REPEATABLE READ仅在事务中第一次执行快照读时生成ReadView后续复用该ReadView。 版本链
每个数据行都维护着一个版本链该链表结构包含了该数据行的不同版本每次对数据行进行修改时MySQL会在版本链中创建一个新的版本并将该版本与之前的版本连接起来。
版本链中的每个版本都包含了该版本的时间戳、事务ID以及数据行的值。通过版本链MySQL能够追踪和管理数据行的历史变化从而实现并发读写操作的隔离性。 Undo Log回滚日志
回滚日志在insert、update、delete的时候产生的便于数据回滚的日志记录了事务对数据行的修改操作。当insert的时候产生的undo log日志只在回滚时需要在事务提交后可被立即删除。而update、delete的时候产生的undo log日志不仅在回滚时需要在快照读时也需要不会立即被删除。如果事务读取到了已被其他事务修改的数据版本使用undo log中的信息将数据回滚到适当的版本以确保事务读取的数据是一致的。
当事务需要回滚时MySQL会根据Undo Log中的信息将数据行恢复到事务开始之前的状态。 Undo Log的实现方式是将事务对数据行的修改操作记录在磁盘上的一个日志文件中在回滚操作时MySQL会按照Undo Log中的日志记录逆向执行相应的操作将数据行恢复到原始状态。 MVCC原理分析
读已提交RC隔离级别
RC隔离级别下在事务中每一次执行快照读时生成ReadView。
当一个事务开始时它会获取一个读视图并在读视图中记录当前活跃的事务和它们的提交状态。当事务执行读操作时它会检查读视图中的信息来确定哪些版本的数据对该事务可见。 如果一个数据行的最新版本的时间戳早于事务的读视图创建时间戳那么该数据行对事务是可见的。如果一个数据行的最新版本的时间戳晚于事务的读视图创建时间戳那么该数据行对事务是不可见的因为它是其他事务在事务开始之后修改的。
读视图记录了事务开始时的数据库状态版本链用于跟踪数据行的不同版本。通过比较读视图和版本链中的时间戳事务可以确定哪些数据对它是可见的。 可重复读RR隔离级别
RR隔离级别下仅在事务中第一次执行快照读时生成ReadView后续复用该ReadView所以 在一个事务中执行两次相同的select语句查询到的结果是一样的。
当一个事务读取数据时它只能看到在该事务开始时间之前已经提交的版本这样事务可以看到一致的快照视图而不会受到其他并发事务的影响。
当一个事务修改数据时它会为修改操作创建一个新的版本并将该版本的时间戳设置为当前事务的时间戳其他事务仍然可以读取旧版本的数据直到当前事务提交。 MVCC的优点
- 并发性能优化MVCC允许多个事务同时读取数据库提高了并发性能。
- 隔离性MVCC提供了读写操作的隔离性避免了读写冲突和数据不一致的问题。
- 降低锁冲突MVCC使用乐观锁机制减少了锁冲突的可能性提高了系统的吞吐量。