MVCC

基本概念

当前读和快照读

当前读: 总是读到最新的数据

复制select * from  lock in share mode

快照读: 读取的是历史版本的记录

select .....

隐藏字段 (每一行上包括几个用户不可见的字段)

  • DB_TRX_ID :创建或者是最后一次的修改的ID,比如某一个被 事务1,事务2,事务3,事务4 的顺序进行了修改,那么这个 DB_TRX_ID 则会记录4

  • DB_ROW_ID:隐藏主键。

  • DB_ROW_PTR: 回滚指针,指向 undolog

ReadView

事务在进行快照读的时候,产生的读视图

  • trx_list 系统活跃事务ID

  • up_limit_id 列表中事务最小的ID

  • low_limit_id 系统尚未分配的下一个事务ID

可见性判断的过程

  1. 首先判断DB_TRX_ID< up_limit_id,如果小于,则当前事务能看到看到 DB_TRX_ID 所在的记录,如果大于等于,则进入下一个判断。

  2. 接下来判断 DB_TRX_ID >= low_limit_id,如果大于等于代表 DB_TRX_ID所在的记录,在 Read View 生成以后才出现,那么对于当前事务肯定是不可见的。如果小于,则进入下一步判断。

  3. 判断DB_TRX_ID 是否在活跃事务中,如果在,那么表示,这个事务还在活跃中,还没有 commit,那么修改数据,当前事务是看不到的,如果不在,则说明这个事务在 read View 生成之前就已经开始开始commit了,那么修改的结果当然是可以看见的。

posted @   沧海一声笑rush  阅读(67)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
历史上的今天:
2020-09-17 Docker(rush_peng)
点击右上角即可分享
微信分享提示