postgres HOT机制

HOT机制是什么?

HOT更新机制(Heap-Only Tuples update)是PG中一种优化技术,用于解决频繁更新操作导致的空间浪费和性能下降问题。

在传统的数据库系统中,更新操作通常会导致数据页膨胀和索引频繁更新,从而影响数据库的性能和空间利用效率。

因此引入HOT机制,通过修改数据存储方式和访问方式,实现了更高效的更新操作和空间利用,极大地改善了数据库的性能表现。

传统的模式

在append引擎下,每一次更新,都相当于一次delete + insert。对老数据的MVCC可见性的xmax进行赋值,并且插入一行新数据。

那么存在索引的时候,每一次更新,都会新插入一行元组,那么索引就会新一个叶子。

频繁的索引叶子插入更新会带来索引尺寸膨胀以及大量的性能损耗。

为了解决这个问题,引入了Heap-Only Tuples update的概念,简称HOT。

HOT原理

数据更新

当对表中的某一行进行更新操作时,如果新行和旧行存储在相同的数据页中,HOT技术会通过CTID指针的方式来定位新元组。
这样就无需插入相应的索引元组,避免了对索引的频繁更新,提高了更新操作的性能,也降低了空间消耗。
在这里插入图片描述
上图示例,一行元组一共更新了三次,有三个版本。索引指针仅指向第一个版本。
元组页面结构中,不同版本的元组有ctid指向(图中虚线)新版本,因此能够找到v1->v2->v3的一整条版本链,判断可见性时,仅需要根据MVCC进行判断即可。

页面清理

清理时,保留hot链上的第一个元组指针、最后一个元组指针、最后一个版本的数据即可。

在这里插入图片描述
如图所示,清理时,清理掉v1 v2的实际数据,仅保留v3的实际数据。

v1的元组指针指向v3的指针即可。

v2的元组指针不会删除,仅改为unused状态,后续可直接复用。

局限性

HOT不能够跨页面进行指向,因此若更新时,新版本元组插入了另一个页面,便不能使用hot机制。还是需要插入新的索引叶子。

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值