zoukankan      html  css  js  c++  java
  • MySQL 多版本并发控制(MVCC)

    可以认为MVCC是行级锁的一个变种,但是它在很多情况下避免了加锁的操作,因此开销会很低。主要实现的是非阻塞的读操作,写操作也只是锁定必要的行。MVCC的实现是通过保存数据在某个时间点的快照来实现的,也就是说,不管需要执行多长时间,每一个事务看到的数据都是一致的,根据事务开始的时间不同,每个事务对同一张表,同一时刻看到的数据可能是不一样的。

    InnoDB的MVCC是通过在每行记录后边保存两实际个隐藏的列来实现的(一个保存了创建时间,另一个保存了过期时间)。当然,保存的不是实际的时间,而是系统的版本号(System Version Number)。每个开始的新任务,系统版本号都会递增,事务开始时刻的系统版本号会作为事务的版本号,用来和查询到的每行记录的版本号进行比较,MVCC的具体操作:

    • SELECT InnoDB会根据两个条件来检查每行记录: 1.InnoDB只查找版本早于当前事务版本的数据行。2. 行的删除版本要么未定义,要么大于当前事物版本号。
    • INSERT InnoDB会为新插入的每一行保存当前系统版本号。
    • DELETE InnoDB会为删除的每一行保存当前系统版本号作为行删除的标识。
    • UPDATE InnoDB会为插入一行新记录,保存当前系统版本号作为行版本号,同时保存当前系统版本号到原来的行作为行删除标识。

    MVCC只在REPEATABLE READ 和READ COMMITED两个隔离级别下工作。其余两个都不兼容(一个是只读取最新行,一个是加锁)

  • 相关阅读:
    数据持久化的复习
    iOS: 消息通信中的Notification&KVO
    iOS 证书与签名 解惑详解
    数据持久化 技术比较
    iOS开发拓展篇-XMPP简单介绍
    iOS block并发
    Xcode把应用程序打包成ipa
    谈谈用SQLite和FMDB而不用Core Data
    cannot use the same dataset for report.dataset and page.dataset
    cxGRID中的字段怎么能以0.00的格式显示
  • 原文地址:https://www.cnblogs.com/gscienty/p/6531043.html
Copyright © 2011-2022 走看看