MVCC 在RC 和 RR 隔离等级下的工作机制
发表于:2024-11-19 作者:千家信息网编辑
千家信息网最后更新 2024年11月19日,一.数据行隐藏列innodb为每行记录都实现了三个隐藏字段6字节的事务ID(DB_TRX_ID)7字节的回滚指针(DB_ROLL_PTR)隐藏的ID事务1修改行值过程:X锁锁定该行 -> 记录redo
千家信息网最后更新 2024年11月19日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的过程
三.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
来源:慕课网
一.数据行隐藏列
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安全错误
数据库的锁怎样保障安全
数据库 表关系
排名第一的游戏服务器
安卓 倒 数据库
怎么添加时间服务器
qq飞车连接游戏服务器关闭
无法被访问数据库
服务器到期直接换可以吗
2021血透室基础数据库
网络安全技术演示
心电监测器显示的数据库
网络安全建设有哪些
获取数据库中值为变量的字段
国外数据库资源
软件开发 电脑选择
微腾互联网科技有限公司
软件开发快捷
视频直播 阿里云服务器
安卓软件开发用那些软件
软件开发ut和pt
网络安全评估年限
iis服务器组件
下载软件开发网站
k12教育基础数据库
银川网络安全工资高
青岛网络安全产业中标
inca导入显示数据库不存在
腾讯云服务器购买后可以退款吗
新乡动力网络技术服务有限公司
服务器主机和普通主机
45技能大赛网络安全