0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

PostgreSQL 14新特性:减少索引膨胀

li5236 来源:yzsDBA 作者:yzsDBA 2022-03-29 15:38 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

PostgreSQL 14新特性--减少索引膨胀

PG12中索引的存储更加高效,PG13添加索引条目去重功能进一步提升存储效率。PG14将带来“自底向上”的索引条目去除功能,旨在减少不必要的页面分裂、索引膨胀和更新大量索引带来的碎片。

为什么会出现索引膨胀

对于B-tree索引,表中每个行版本都有一个未死的索引条目(对所有人可见)。执行vacuum删除死记录时,也会删除对应的索引条目。和表一样,同样会在索引页中创建空的空间。这样的空间可以重用,但是如果没有新元组插入该页,这样的空间会保持为空。

这种膨胀在某种程度上是不可避免的,也是正常的。但如果膨胀太多,索引效率就会降低:

1) 对于索引范围扫描,必须扫描更多的页

2) RAM中缓存了索引页,意味着缓冲膨胀,就是浪费了RAM

3) 每个页中更少的索引条目意味着更少的“fan out”,索引树的层级将更高

如果频繁更新相同行,就会发生这种情况。VACUUM清理老元组前,表和索引会维护相同行的很多版本。如果索引页填满,将令人很烦:然后PG会将索引页分裂成2个。这是一个昂贵的操作,VACUUM执行完清理,我们最终会得到2个臃肿的页面而不是一个。

当前用于改善索引膨胀和性能的特性HOT元组

HOT元组的创建可能是PG对抗索引中不必要条目的强大武器。使用此功能UPDATE创建产生的元组不会被索引条目引用,它还会引用元组的老版本。通过这种方法,不需要创建新的索引条目,可以避免索引膨胀。

杀死索引条目

当索引扫描遇到一个指向死元组的条目时,标记该条目“killed”。后续索引扫描会在VACUUM删除他们之前跳过这些条目。此外,PG可以在索引页面已满时删除这样的条目,以避免页分裂。

PG14如何进一步减少索引膨胀

自下而上的索引元组删除比之前方法更进一步:他在索引页分裂即将发生前就删除指向死元组的索引条目。这可以减少索引条目的数量并避免昂贵的分裂,以及稍后VACUUM清理参数的膨胀。

在某种程度上,这执行了之前VACUUM的部分公众,在这点上可以避免索引膨胀。

案例

为了演示新功能效果,使用pgbench分别在PG13和14上执行操作:

测试表:

image.png

Pgbench名为bench.sql的脚本:

image.png

我运行脚本 60000 次(6 个客户端 10000 次迭代),如下所示:

pgbench -n -c 6 -f bench.sql -t 10000 test

比较测试结果

我们使用pgstattuple扩展来获取psql 的索引统计信息:

image.png

这是我们在 v13 中得到的:

image.png

对于 v14,结果是:

image.png

改进最大的时testtab_unchanged_idx。在13中,索引膨胀严重,而在14中仅有60%的膨胀(这对索引来说还不错)。在这里我们看到了新功能的最大影响。UPDATE不扫扫描那个索引,因此没有killed的索引条目,“自底向上的删除”可以删除足够的这样的条目避免分裂。

也可以衡量testtab_pkey。由于UPDATE扫描该索引,死的索引元组被killed,新特性在分裂前删除这些元组。与13相比,效果不太明显,因为13已经很好地避免索引膨胀了。

索引testtab_changed_idx无法从新特性中获益。因为这进解决了UPDATE不修改索引值的情况。如果想知道为什么testtab_unchanged_idx叶子密度比13低:删除了索引重复数据。

Pg_upgrade后我们可以使用这项功能吗?

索引的存储格式没有变,所以pg_upgrade PG12及之后版本创建的索引后会自动公众。但之前版本创建的索引,需要REINDEX后获益。记住,pg_upgrade仅拷贝索引文件,不会更改内部索引版本。

总结

PG14继续改进B-tree索引。这个特性虽不是革命性的,但有望为许多公众负载提供改进的性能,尤其是那些有大量更新的工作负载。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 存储
    +关注

    关注

    13

    文章

    4693

    浏览量

    89570
  • RAM
    RAM
    +关注

    关注

    8

    文章

    1398

    浏览量

    119823
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    破解热管理难题:负热膨胀材料ULTEA®为何是精密电子设计的“稳定器”?

    正文:在追求更高性能、更小体积的电子行业,热管理一直是核心挑战之一。传统材料受热膨胀特性,常常导致精密元器件产生应力、翘曲甚至失效,成为产品可靠性的隐形杀手。现在,这一难题有了全新的解决方案
    的头像 发表于 11-27 16:22 295次阅读
    破解热管理难题:负热<b class='flag-5'>膨胀</b>材料ULTEA®为何是精密电子设计的“稳定器”?

    锅炉在线膨胀监测系统:技术创新与应用实践

      在现代电站运行中, 锅炉承压部件的热膨胀监测是保障设备安全运行的关键环节。 传统监测技术由于存在实时性不足、机械磨损导致精度下降等问题,已难以满足现代电站对安全性和可靠性的高要求。北京优利威科
    的头像 发表于 11-04 10:09 154次阅读
    锅炉在线<b class='flag-5'>膨胀</b>监测系统:技术创新与应用实践

    锅炉在线膨胀监测系统:电站设备维护与安全管理

    在电站的复杂设备体系中,锅炉作为核心动力设备,其 运行状态 直接关系到电站的安全与效益。在锅炉的运行过程中,由于受热不均等因素,各部件会 产生热膨胀 。若膨胀情况未得到有效监测和控制,可能引发一系列
    的头像 发表于 10-29 10:26 94次阅读
    锅炉在线<b class='flag-5'>膨胀</b>监测系统:电站设备维护与安全管理

    Hudi系列:Hudi核心概念之索引(Indexs)

    上的Instant action操作类型 ▪1.4 时间线上State状态类型 ▪1.5 时间线官网实例 ◦二. 文件布局 ◦三. 索引 3.1 简介 3.2 对比其它(Hive)没有索引的区别 3.2
    的头像 发表于 10-21 09:47 193次阅读
    Hudi系列:Hudi核心概念之<b class='flag-5'>索引</b>(Indexs)

    华纳云香港服务器数据库索引优化策略

    在香港服务器环境中,数据库索引优化是提升整体性能的关键因素。随着企业数据量的不断增长,高效的索引管理能显著提高查询速度并降低服务器负载。本文将深入探讨如何针对香港服务器(特别是其独特的地理和法律要求
    的头像 发表于 10-16 17:06 366次阅读

    透平膨胀机远程监控物联网解决方案

    透平膨胀机是一种用于气体膨胀和制冷的关键设备,广泛应用于低温技术、空气分离、天然气液化等领域。它通过气体在膨胀机内的绝热膨胀,消耗气体的内能,从而实现制冷和能量回收。这一过程不仅降低了
    的头像 发表于 06-08 10:30 1061次阅读
    透平<b class='flag-5'>膨胀</b>机远程监控物联网解决方案

    膨胀系数测试

    膨胀系数测试是材料科学领域内一项至关重要的实验技术。热膨胀系数测试的原理热膨胀系数是衡量材料在温度变化时尺寸(长度或体积)相对变化量的物理指标,具体定义为:当温度升高1K时,材料尺寸相对于其原始
    的头像 发表于 04-08 17:57 1601次阅读
    热<b class='flag-5'>膨胀</b>系数测试

    展望PostgreSQL 18的新特性

    距离 PostgreSQL 17 正式发布已近半年,按照每年发布一个大版本的惯例,PostgreSQL 18 预计将在 2025 年底发布。距离正式发布还有一段时间,社区的开发工作仍在如火如荼地进行中。
    的头像 发表于 03-03 16:51 1392次阅读
    展望<b class='flag-5'>PostgreSQL</b> 18的新<b class='flag-5'>特性</b>

    利用SSIS源、查找及目标组件集成PostgreSQL数据至ETL流程

    使用SSIS源、查找和目标组件在ETL中集成PostgreSQL数据 Devart SSIS Data Flow Components for PostgreSQL 允许您将 PostgreSQL
    的头像 发表于 02-07 09:24 1655次阅读
    利用SSIS源、查找及目标组件集成<b class='flag-5'>PostgreSQL</b>数据至ETL流程

    精密空调膨胀阀由哪几部分构成?

    精密空调膨胀阀是精密空调中一个重要的组成部分,膨胀阀负责控制制冷剂的流量,确保精密空调能够在最佳状态下运行。
    的头像 发表于 02-06 17:25 813次阅读
    精密空调<b class='flag-5'>膨胀</b>阀由哪几部分构成?

    dbForge Studio for PostgreSQL:PostgreSQL数据库多功能集成开发环境

    什么是 dbForge Studio for PostgreSQL?是一个集成工具包中包含 PostgreSQL 所需的一切 上下文感知SQL代码补全、智能格式化和语法验证 消除性能瓶颈的查询优化器
    的头像 发表于 01-16 17:26 878次阅读

    创建唯一索引的SQL命令和技巧

    在创建唯一索引时,以下是一些SQL命令和技巧,可以帮助优化性能: 使用合适的索引类型:对于需要保证唯一性的列,使用UNIQUE索引来避免重复数据的插入。 这可以确保列中的值是唯一的,同时提高查询效率
    的头像 发表于 01-09 15:21 800次阅读

    判断可膨胀石墨好坏的方法

    在现代工业中,可膨胀石墨作为一种高性能材料,广泛应用于石油化工、纺织、冶金、电力、机械、船舶、消防、航天及核能等领域。其优良的可塑性、柔韧延展性和密封性,以及耐高温、耐高压、耐腐蚀、耐辐射等特性
    的头像 发表于 01-09 15:09 1087次阅读

    更高精度、更低噪音 GMCC美芝电子膨胀阀以创新抢占行业“制高点”

    伴随空调等暖通设备的应用日益广泛,消费者对其在节能降耗与舒适度上的要求也不断提升。因此,具备环保节能特性的变频设备也更受消费者欢迎。在变频空调等各种电器中,电子膨胀阀作为先进的节流元件,成为覆盖从
    的头像 发表于 12-23 12:42 602次阅读

    PostgreSQL将不再支持MD5密码

    根据 PostgreSQL 代码仓库的最新动态,近日有维护者提交了“弃用 MD5 密码支持”的 commit。 该维护者指出,MD5 被认为不适合用作加密散列算法已有一段时间。 此外
    的头像 发表于 12-10 16:14 736次阅读