天津seo网站排名优化公司,东莞网站建设多少钱,自己做网站推广关键词,手机做网站服务器概念
MVCC#xff0c;全称Multi-Version Concurrency Control#xff0c;即多版本并发控制#xff0c;是一种并发控制的方法#xff0c;维护一个数据的多个版本#xff0c;使得读写操作没有冲突#xff0c;快照读为MySQL实现MVCC提供了一个非阻塞读功能。MVCC的具体实现…概念
MVCC全称Multi-Version Concurrency Control即多版本并发控制是一种并发控制的方法维护一个数据的多个版本使得读写操作没有冲突快照读为MySQL实现MVCC提供了一个非阻塞读功能。MVCC的具体实现还要依赖数据库记录中的三个隐式字段undo logreadView。
当前读
读取的是记录的最新版本读取时还要保证其他并发事务不能修改当前记录会对读取的记录进行加锁。对于我们日常的操作如:select...lock in share mode(共享锁)select... for update、update、insert、delete(排他锁)都是一种当前读。
快照读
简单的select(不加锁)就是快照读快照读读取的是记录数据的可见版本有可能是历史数据不加锁是非阻塞读。 Read Committed:每次select都生成一个快照读。 Repeatable Read:开启事务后第一个select语句才是快照读的地方。 Serializable:快照读会退化为当前读。 ibd2sdi ibd文件名 这条指令可以查看对应ibd文件中的信息。 undo log版本链
在执行修改操作前undo log会记录修改前的操作 执行修改后DB_TRX-ID和DB_ROLL_PTR都会进行相应的更新DB_TRX-ID更新为当前事务id DB_ROLL_PTR指向上一条记录在undo log中的存放地址 readview
min_ids 当前还未提交的事务id集合
min_trx_id 最小活跃事务id
max_trx_id 预分配事务id 当前最大事务id1 因为事务id是自增的
creater_trx_id ReadView创建时的事务id trx_id代表当前修改记录的事务id 当前隔离级别为RC
每执行一次快照读都会生成ReadView
这次读取的记录应该是DB_TRX-ID 2 的数据 这次读取的记录应该是DB_TRX-ID 3 的数据 当前隔离级别为RR
仅在事务第一次执行快照时生成ReadView后续复用 总结
redo log保证了事务的持久性
undo log保证了事务的原子性
redo logundo log保证了事务的一致性
MVCC锁保证了事务的隔离性