没有合适的资源?快使用搜索试试~ 我知道了~
MYSQL数据库多版本并发控制(MVCC)
需积分: 1 0 下载量 140 浏览量
2023-08-17
17:39:32
上传
评论
收藏 330KB DOCX 举报
温馨提示
试读
9页
MYSQL数据库多版本并发控制(MVCC)
资源推荐
资源详情
资源评论
MySQL 数据库的多版本并发控制
1、简介
多版本并发控制(MVCC,Multi-Version Concurrency Control): 指的是
一种提高并发的技术。最早的数据库系统,只有读读之间可以并发,读写、写读
和写写都要因为加锁而相互阻塞。引入 MVCC 之后,只有写写之间才会相互阻塞,
其他三种操作之间可以实现不加锁的并发操作,这样大幅度提高了 MySQL 数据库
的并发度。在内部实现中,MySQL 数据库的 InnoDB 存储引擎通过 undo log 日志
保存每条数据的多个版本并且能够找回数据的历史版本提供给用户读取,每个事
务读取到的数据的版本可能是不一样的。在 READ-UNCOMMITTED 隔离级下,由于
事务可以读到未提交事务修改过的记录,所以可以直接读取记录的最新版本。
在 SERIALIZABLE 隔离级别下,InnoDB 规定使用加锁的方式来访问记录。MVCC 工
作在 READ-COMMITTED 和 REPEATABLE-READ 隔离级别下。在同一个事务中,用户
只能看到该事务创建快照之前已经提交的修改和该事务本身做的修改。
2、MVCC 原理
MVCC 的具体实现依赖 MySQL 数据库中的隐藏字段、undo log 日志、read view。
2.1、基本概念
(1)当前读:读取的是记录最新版本的数据,在读取数据时对记录加锁以
防止其他并发事务修改该记录,如 select ...... lock in share mode(共享
锁),select ...... for update、insert、update 和 delete(排它锁)。
(2)快照读:简单的 select(不加锁)就是快照读,读取的是记录数据
的可见版本,有可能是历史数据。这种不加锁的非阻塞的读取数据的方式大大
的提高了 MySQL 数据库的并发能力。
2.2、隐藏字段
MySQL 数据库的 InnoDB 存储引擎在每行数据的后面添加了隐藏字段:
(1)DB_TRX_ID:表示最后一次修改记录的事务 id,记录插入这条记录或
者或最后一次修改该记录的事务 id。
(2)DB_ROLL_PTR:回滚指针,指向当前记录行的上一个版本。
(3)DB_ROW_ID:当表没有主键或唯一非空索引时,InnoDB 存储引擎就会
使用 DB_ROW_ID 自动产生聚簇索引。如果表有主键或唯一非空索引,聚簇索引
资源评论
停留。。
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功