千家信息网

MVCC 在RC 和 RR 隔离等级下的工作机制

发表于:2025-02-04 作者:千家信息网编辑
千家信息网最后更新 2025年02月04日,一.数据行隐藏列innodb为每行记录都实现了三个隐藏字段6字节的事务ID(DB_TRX_ID)7字节的回滚指针(DB_ROLL_PTR)隐藏的ID事务1修改行值过程:X锁锁定该行 -> 记录redo
千家信息网最后更新 2025年02月04日MVCC 在RC 和 RR 隔离等级下的工作机制
一.数据行隐藏列
innodb为每行记录都实现了三个隐藏字段
6字节的事务ID(DB_TRX_ID)
7字节的回滚指针(DB_ROLL_PTR)
隐藏的ID



事务1修改行值过程:
X锁锁定该行 -> 记录redo log -> 把该行修改前的值copy至undo -> 修改当前行的值,填写事务编号,使回滚指针指向undo log中的修改前的行



事务2修改行值过程:
与事务1相同,此时undo log,中有有两行记录,并且通过回滚指针连在一起




二.RC 和 RR 适用MVCC的过程

RC
事务开始
(1).执行SQL语句之前,将系统中非当前活跃事务信息输出到一个副本trx_list
(2).用户在当前SQL开始读取记录,假设读取到的记录事务ID为trx_id_0
(3).找出trx_list 中最早的事务trx_id_1 和 最晚的事务trx_id_2
(4).如果trx_id_0
(5).如果trx_id_0>trx_id_2 则表示该行记录在本SQL执行之后发生了其他事务,因此该行不可见。转至(7)
(6).如果trx_id_1<=trx_id_0<=trx_id_2 则表示该行记录在本SQL开启时处于活动状态,因此该行不可见。转至(7)
(7).从该行记录的DB_ROLL_PTR指针所指向的回滚段中取出最新的undo-log的版本号,将它赋值该trx_id_0,然后跳到步骤(4)
(8).将该行的数据返回给用户,跳转至(2)
(9).所有记录遍历完毕,关闭trx_list,跳转至(1),执行下一条SQL
事务结束

RR
事务开始,将系统中非当前活跃事务信息输出到一个副本trx_list
(1).执行SQL语句
(2).用户在当前本事务开始读取记录,假设读取到的记录事务ID为trx_id_0
(3).找出trx_list 中最早的事务trx_id_1 和 最晚的事务trx_id_2
(4).如果trx_id_0
(5).如果trx_id_0>trx_id_2 则表示该行记录在本事务开启之后发生了其他事务,因此该行不可见。转至(7)
(6).如果trx_id_1<=trx_id_0<=trx_id_2 则表示该行记录在本事务开启时处于活动状态,因此该行不可见。转至(7)
(7).从该行记录的DB_ROLL_PTR指针所指向的回滚段中取出最新的undo-log的版本号,将它赋值该trx_id_0,然后跳到步骤(4)
(8).将该行的数据返回给用户,跳转至(2)
(9).所有记录遍历完毕,跳转至(1),执行下一条SQL
事务结束,关闭trx_list

三.MVCC读类型
1.快照读
读取的是记录的可见版本,或是从undo中读取的历史版本。
普通的查询即为快照读

2.当前读
读取的是记录的最新版本,会与dml语句发生阻塞。
select * from table where ? lock in share mode;
select * from table where ? for update;


转载:
作者: mark_rock
链接:http://www.imooc.com/article/17290?block_id=tuijian_wz
来源:慕课网
事务 指针 版本 用户 指向 数据 语句 过程 信息 副本 字节 快照 步骤 状态 系统 中非 活动 输出 普通 相同 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 进口网络技术材料模板 剑灵服务器是用什么语言写的 哪一家的服务器比较好 客服软件开发推荐易聊科技 软件开发合同 移交源代码 5g服务器销量排名 鲁班建站网络技术有限公司 计算机网络技术答辩题目 苹果手机抹掉数据连接不上服务器 安徽一对一网络技术开发项目 桌面软件开发那个最简单 qms软件开发企业怎么审 数据库智慧公交系统技术路线 广元有没有学习软件开发的大学 看网络安全课观后感 安卓软件一般使用什么数据库 最终幻想14水晶塔服务器 独立软件开发文档建立 服务器端口版本信息查看 网络安全等级保护3纪 面向对象数据库技术难吗 php上传数据库失败 2021中国服务器市场规模 强化网络安全网信办 数据库中供应商属性怎么填写 服务器系统有哪些版本支持10代 中科院信工所网络安全是A吗 译钦网络技术有限公司 access制作简易数据库 网络安全意识培养短句
0