无标签
- 分类
- 分布式系统
- 难度
- 未设置
- 来源数
- 1
- 更新时间
- 2026/03/29 00:57
答案
read view当中记录了几个东西:创建该read view的事务id、最小事务id、已开启但未提交的事务id列表、下一个事务id。对于当前事务来说,min_trx_id之前的数据是可见的。在每一行数据中,innodb会为他插入两个隐藏字段,一个是trx_id,一个是roll pointer,指向上一个旧版记录,可以根据这个链表查询所有旧版记录。 **可重复读:**对于可重复读来说,它是在事务启动的时候创建read view。当事务执行查询操作的时候,会判断当前行的trx_id是否在min id之前,如果在的话直接读取,如果在m_ids列表中,则会顺着undo log链表查找到第一个id小于min id 的数据进行读取。且可重复读是基于启动时的read view进行执行的,就算启动后m_ids中的事务提交了,其依然不会读取到这些事务提交的值 **读已提交:**对于读已提交来说,每次操作前创建read view,那么当 一个事务的修改未提交时,创建的read view中的m ids有这个事务,就不会读到,当事务提交后,再查询的时候就会读到修改的数据。
相关题目(5)
什么是热点 key,如何处理?共源 1
分布式系统Redis
watch dog 机制是什么?共源 1
分布式系统并发锁Redis
Redis 如何实现分布式锁?共源 1
分布式系统锁Redis
分布式系统并发Redis
元信息
审核状态: active
关联来源: 1
来源面经题(0)
这道题目前没有手动沉淀的面经题来源。
来源(1)
Java八股(数据库).md
knowledge_noteQuestion 41: 什么是read view?如何工作的?
Source answer: read view当中记录了几个东西:创建该read view的事务id、最小事务id、已开启但未提交的事务id列表、下一个事务id。对于当前事务来说,min_trx_id之前的数据是可见的。在每一行数据中,innodb会为他插入两个隐藏字段,一个是trx_id,一个是roll pointer,指向上一个旧版记录,可以根据这个链表查询所有旧版记录。 **可重复读:**对于可重复读来说,它是在事务启动的时候创建read view。当事务执行查询操作的时候,会判断当前行的trx_id是否在min id之前,如果在的话直接读取,如果在m_ids列表中,则会顺着undo log链表查找到第一个id小于min id 的数据进行读取。且可重复读是基于启动时的read view进行执行的,就算启动后m_ids中的事务提交了,其依然不会读取到这些事务提交的值 **读已提交:**对于读已提交来说,每次操作前创建read view,那么当 一个事务的修改未提交时,创建的read view中的m ids有这个事务,就不会读到,当事务提交后,再查询的时候就会读到修改的数据。
Reviewed answer: read view是MVCC中的一致性读视图,记录创建该视图的事务信息、最小事务ID、活跃未提交事务ID列表和下一个事务ID。InnoDB行记录中有trx_id和roll pointer等隐藏字段,可沿undo链找历史版本。可重复读通常在事务开始时创建read view并复用;读已提交通常每次查询前创建新的read view。