iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >MVCC 在RC 和 RR 隔离等级下的工作机制
  • 242
分享到

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

2024-04-02 19:04:59 242人浏览 独家记忆
摘要

一.数据行隐藏列 innodb为每行记录都实现了三个隐藏字段 6字节的事务ID(DB_TRX_ID) 7字节的回滚指针(DB_ROLL_PTR) 隐藏的ID 事务1修改行值过程: X锁锁定该行


一.数据行隐藏列
innodb为每行记录都实现了三个隐藏字段
6字节的事务ID(DB_TRX_ID)
7字节的回滚指针(DB_ROLL_PTR)
隐藏的ID

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

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

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

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

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


二.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<trx_id_1 则表示该行记录在本sql执行之前已经commit,所以该行可见。转至(8)</trx_id_1 则表示该行记录在本sql执行之前已经commit,所以该行可见。转至(8)<>
(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<trx_id_1 则表示该行记录在本事务开启之前已经commit,所以该行可见。转至(8)</trx_id_1 则表示该行记录在本事务开启之前已经commit,所以该行可见。转至(8)<>
(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
来源:慕课网
您可能感兴趣的文档:

--结束END--

本文标题: MVCC 在RC 和 RR 隔离等级下的工作机制

本文链接: https://www.lsjlt.com/news/49605.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作