万字长文,帮你梳理存储引擎之Heap表关键知识点

本文深入探讨了Greenplum存储引擎中的Heap表,重点讲解了MVCC机制、文件结构、页面结构和元组结构。通过实例解析了MVCC的事务可见性判断和元组的可见性,强调了数据的多版本管理和并发控制。同时,介绍了Greenplum的文件分片存储、页面组织方式以及Heap表的优化策略,如HOT技术和共享缓冲区管理,为理解Greenplum的存储机制提供了详细的知识框架。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

了解更多Greenplum相关内容,欢迎访问Greenplum中文社区网站

《深入浅出Greenplum内核》系列直播已经进行到第八场,还有二场就要告一段落啦!**前八场的视频内容可以前往Greenplum中文社区B站频道观看相关视频,相关PPT均已上传Greenplum中文社区网站(cn.greenplum.org)的下载页面,欢迎获取!**现在让我们通过这篇万字长文来回顾一下第七场活动《Greenplum分布式事务》精华内容。

存储引擎的知识体系非常庞杂,拥有很多分支内容。而其中,Heap表是最为关键的模块之一,包含了众多重要的知识点,本文将为大家介绍其中的一些关键内容,来帮助大家进一步学习和理解Heap表。

MVCC机制

之前在《Greenplum MVCC并发控制:严格的一致性与极致的性能》中,大家学习了并发控制相关的内容。由于MVCC是存储引擎中非常重要的内容,今天我们再来回顾一下相关要点。

MVCC,全称是Multiversion concurrency control,翻译成中文是多版本管理。多版本控制管理的核心是对数据的更新、修改、和删除处理。在大学计算机课程里,对于数据的增删查改,通常是这么处理的:删除数据会把数据整体抹掉,更新会在数据存储的内存二进制的文件上,或是在文件映像上直接更改数据,从而不会留下历史数据,并且会引起读写互相等待。

MVCC:INSERT, DELETE, UPDATE

多版本管理中,数据的更新和删除并不一定会在原数据上进行修改,而是需要创立一个新的版本,把原数据标记为失效的数据,再在新版本上增加新数据,数据具有多个版本,这也是多版本管理的名称的由来。插入数据需要记住两个信息,一个是数据的创建者,另一个是数据的删除者,每个数据均带有版本信息。

下图中,事务编号为40的事务创建了原始数据,创建记录会被记录下来。在处理删除时,并不会直接将数据抹掉,而是会记录另一个信息:数据的失效时间或是被删除时间。创建事务是40,删除事务是47。而更新会包括两个操作,一个是删除老的事务,一个是增加新的数据。因此更新会增加两个记录,图中的删除记录是78,增加新数据的记录中创建记录也是78。

总结一下MVCC的特点:

  • **每个数据带有一个版本信息。** 同一个行的数据内容,经过不停修改后,会变成多个数据,历史版本均会存下来。

  • **数据的更新或删除并不会影响原来数据在磁盘或文件中的位置。** 行更新后,原来的行会被标记为删除,行的位置所在的空间还在,新记录不会替换老记录,老记录的位置将不会改变,这让老数据的指针非常有效,这是一个非常重要的特性。

Greenplum中,在扫描一些数据时,利用第二个特性可以通过不用加锁的方式来访问页面。这是因为该快照时刻可见的数据,被认为是不会被移动的,即使被标记为失效,也不会影响到数据移动并仍然有效。

事务间可见性

事务可见性其实就是基于这种MVCC这种朴实的概念。

上图中,事务快照在时间点100上,红线和绿线代表事务的起始时间,红色的事务和时间点100有交集。由于事务结束在100之后,此时事务还未结束。也就是说红色事务所做的修改,对当前位于时间点100的事务均是不可见的。相反,绿色的事务已经结束,因此所做的修改能够被100点的事务看到。

数据的可见性判断

利用上述特性可以进行当前数据的可见性判断。下图中,假设基于事务快照,最大已提交的事务编号是100。也就是说,100以上事务都被认为还在运行当中。但对于小于100的事务,由于可能还在运行中,并不一定已经提交了。因此,需要记录一个信息来标识仍在执行中的事务。例子中的25,50,75

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值