前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >zheap存储引擎那点事

zheap存储引擎那点事

作者头像
用户4700054
发布2022-08-17 12:39:05
8410
发布2022-08-17 12:39:05
举报
文章被收录于专栏:存储内核技术交流

zheap是什么?

  • zheap是PostgreSQL新一代的存储引擎,遵循PostgreSQL的license.zheap引擎最初是由EnterpriseDB开发。开源版本目前是由https://github.com/cybertec-postgresql/postgres/tree/REL_13_ZHEAP项目接管,持续更新。zheap的整体目标是整合到PostgreSQL中
zheap设计的初衷是什么?
  • 在特定的场景下PostgreSQL的表会变得很膨胀,PostgreSQL默认是heap表,采用Cow方式,有效行数据和无效行数据会存储在表中,如果不做full vacuum表的空间不会得到回收。zheap的目标就是效仿Oracle的方式,无效数据(被删除或者删除数据)和有效数据分开存储,引入undo的技术。
  • 每个主流的DBMS实现MVCC都采用不同的技术,PostgreSQL是元组的所有版本存储在表中;Oracle和MySQL是旧版本数据存储在undo日志中;SQL Server是把旧版本数据存储在tempdb中,每一种实现各有特色。
  • zheap的设计是为了达到至少2个目标,第一是更好的控制表的膨胀,执行行数据的原地"更新"来避免表膨胀;第二是保持更小的tuple headers,目前PostgreSQL默认的引擎中表的header存储了大量的事务和为了对齐而采用的padding技术。zheap引擎是要消除这些padding同时在page中不存储事务信息。
zheap 采用什么新技术?
  • 在zheap存储引擎中,引入了undo的技术,同时每个page设计了固定数量的transaction slots,每个slot存储了事务信息,事务信息包括transaction idepochlast undo record pointer信息。每个zheap的page是可以配置,默认是4个transaction slots.每个transaction slot占用16个字节。 transaction slots在zheap存储引擎中是可以复用,当事务提交了,这些transaction slot可以resued,所以每个page中不需要那么多的slot.
zheap 是如何工作的?
  • zheap引入undo,所有的旧版本数据存储在undo中。当执行一个记录更新的事务,先写wal(redo)日志,随后记录这个操作涉及到所有变更到undo(记录所有的变更)。当事务aborts,undo被用来回滚所有的变更。
  • undo日志存储了MVCC需要的所有的记录的版本数据,少量的事务信息记录在表中,减少表中的padding,这样也达到了减少表的表在磁盘上的空间占用。
  • 当事务更新记录中发生了crash,可以借助PostgreSQL的wal先进行恢复,后借助undo日志进行回滚那些未被提交或者终止的事务。
  • zheap引擎中undo需要记录每条记录的insert/update/delete操作。insert操作采用了heap存储引擎+undo日志,heap表插入数据同时在undo日志中记录删除操作;delete操作采用heap存储引擎+undo日志,undo日志记录所有被删除的数据;update操作首先将旧记录存储在undo日志中,原地更新防止表膨胀,但是这会导致undo日志膨胀,但是一旦失误提交或者回滚undo相关的空间就重用。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-12-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 存储内核技术交流 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • zheap是什么?
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档