分享

Heap Only Tuple 

 昵称22398178 2015-03-17

大家知道PostgreSQL使用多版本技术,对记录的更新操作都会产生一个新版本,版本之间从老到新形成一条版本链。此外更新操作不但会在堆中产生记录的新版本,在表的每个索引中也会产生新版本的索引记录。即对一条记录的每个版本都有对应版本的索引记录,即使更新操作没有修改索引属性,也会在每个索引中都产生一个新版本。这一技术的问题是浪费存储空间,老旧版本占用的空间只有在进行VACUUM时老能被回收,增加的数据库的负担。

为减轻这一问题,PostgreSQL 8.3中加入了HOT技术。使用HOT后,若所有索引属性都没被修改(索引键是否修改是在执行时逐行判断的,因此若一条UPDATE语句修改了某属性,但前后值相同则认为没有修改),且新版本与原版本存储在一个页面上则不会产生新的索引记录,因此这些记录被称为HOT(Heap Only Tuple)。HOT会被打上HEAP_ONLY_TUPLE标志,而HOT的上一个版本则被打上HEAP_HOT_UPDATED标志。当通过索引获取记录时首先会找到同一页中最老的拥有HEAP_ONLY_TUPLE标志的版本,然后顺着版本链向后找,直到遇到HOT为止。限制HEAP_ONLY_TUPLE版本与HOT在同一页的目的是为了通过版本链向后找时不产生额外的IO操作从而影响到性能。因此HOT技术消除了拥有完全相同键值的索引记录,减小了索引大小。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多