InnoDB MVCC 要点摘录

来源:互联网 发布:网络割接是什么意思 编辑:程序博客网 时间:2024/06/05 22:41

MVCC(多版本并发控制,MultiVersion Concurrency Control)

  • 很多数据库都实现了MVCC,但是因为没有统一标准,实现细节不同,表现也不同
  • MVCC可以认为是行级锁的一个变种,为了获得并发性能的同时,尽量减少加锁,管理锁带来的性能损耗
  • MVCC是通过保存数据库记录的快照来实现的,也就是说,同一条记录,在使用MVCC后,可能在数据库的存储引擎中,对用多个记录,但是版本号不同(空间换时间),这就造成,不同事务,因为版本号不同,对同一记录在同一时间看到的数据可能不同

MVCC实现

  • 通过在记录后增加隐藏的两列:行创建时间(行创建版本号),行过期时间(行过期版本号)来实现
  • 当一个事务中读取数据时,只能读取到行创建版本号小于当前事务版本号,并且行过期版本号大于当前事务版本号的数据
  • 当新增数据时,将当前事务版本号赋给行创建版本号
  • 删除数据时,将当前事务版本号赋给行删除版本号
  • 修改数据时,会创建一条新纪录,将当前版本号赋给新纪录的行创建版本号,同时将当前版本号赋给旧记录的行删除版本号

InnoDB

  • InnoDB通过MVCC来支持并发,默认的隔离级别是可重复读,并且通过”间隙锁”(对索引的间隙加锁)来避免幻读的出现
原创粉丝点击