模型服务连接失败
无标签
分类
分布式系统
难度
未设置
来源数
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)

分布式系统Redis
分布式系统并发Redis
分布式系统Redis
分布式系统并发Redis

元信息

审核状态: active
关联来源: 1

来源面经题(0)

这道题目前没有手动沉淀的面经题来源。

来源(1)

Java八股(数据库).md

knowledge_note
Question 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。