Single

MVCC(多版本并发控制)

什么MVCC

用来解决两个事务 读-写或者写-写的问题

就是用来解决读写冲突的问题

虽然可以用锁解决但是信息有些差

mvcc就是通过多个数据行的版本管理来实现数据库的并发控制

快照读

又叫 一致性读,读的是快照数据,不加锁简单的select都是快照读

快照读不一定是最新的

当前读

当前读就是读取记录的最新版本,读取的时候还要保证其他事务不能修改

什么是readView

readView负责管理事务过来读那一版本的数据(或者说哪一个版本的undo log)

readView就是事务在使用mvcc进行快照读时产生的读视图。当事务启动,数据库内部会有一个快照,innodb为每个事务都构建了一个数组,用来维护当前活跃事务的id(启动还没有提交的事务)

readVIew的设计结构

readView是解决隔离级别里面的可重复读和提交读两种级别

readView结构:

  • creator_trx_id 创建这个read view的事务id(只有对表写操作才会分配这个id)
  • trx_ids 表示在生成read view时当前系统中活跃的读写事务的id列表
  • up_limit_id 活跃事务最小的事务id
  • low_limit_id 系统中最大的事务id

read view判断的规则

  1. 如果被访问版本的trx_id熟悉和read view中creator_trx_id相同可以访问(这表明是自己在操作自己)
  2. 如果被访问版本的trx_id熟悉值小于read view中up_limit_id,表面该版本已经提交可以访问
  3. 如果被访问版本的trx_id属性值大于或者等于read view中的low_limit_id值,表明事务在当前事务生成后才有的所以不能访问
  4. 如果被访问版本的trx_id是爱read view的up_limit_id和low_limit_id之间,那就需要判断一下是否在trx_ids中。如果在说明read view生成的时候还是活跃的不可以访问。如果不在表面已经提交可以访问

如果隔离级别是读已提交,每一次select都会生成一次read view
可重复读隔离级别 只在第一次select中产生

幻读在事务提交后事务id大于读事务的low_limit_id,所以无法读

文章有(1)条网友点评

  • Avatar photo

    内容太少了,无关联内容。

发表评论
Avatar photo

相关推荐

暂无相关文章内容!