Radim Marek: TOAST:PostgreSQL 如何隐藏大值

Radim Marek: TOAST:PostgreSQL 如何隐藏大值

💡 原文英文,约2800词,阅读约需10分钟。
📝

内容提要

PostgreSQL使用TOAST技术处理超过2KB的列,通过压缩和重新定位变量长度属性,确保每个堆元组保持在8KB页面内。TOAST将超大值存储在独立的TOAST表中,主堆元组仅保留小指针,从而优化存储和读取效率,有效管理大文档。

🎯

关键要点

  • PostgreSQL使用TOAST技术处理超过2KB的列,通过压缩和重新定位变量长度属性,确保每个堆元组保持在8KB页面内。

  • TOAST在2KB阈值时开始缩小元组,目标是保持每页至少四个元组,超出阈值的元组会触发TOAST。

  • 每个可变长度列都有存储策略,决定是否可以压缩和是否可以移出行外,默认策略基于列的类型。

  • TOAST过程包括压缩EXTENDED属性、将EXTENDED或EXTERNAL属性移出行外、压缩MAIN属性,最后作为最后手段将MAIN属性移出行外。

  • TOAST表用于存储超大值,主堆元组仅保留小指针,优化存储和读取效率。

  • PostgreSQL 14引入了lz4压缩算法,通常在压缩和解压缩速度上优于pglz。

  • TOAST的透明性使得在读取大文档时,性能开销可能被忽视,SELECT *操作会导致额外的I/O成本。

  • TOAST的限制是每列每行最大1GB,超出此限制的值需存储在数据库外部,通常在对象存储中。

🔎

延伸解读

TOAST技术的存储策略

PostgreSQL的TOAST技术为每个可变长度列提供了四种存储策略,分别是PLAIN、EXTENDED、EXTERNAL和MAIN。选择合适的策略可以优化存储效率和读取性能。例如,EXTENDED策略适用于大多数可变长度类型,而EXTERNAL策略则适合已经压缩的数据。了解这些策略有助于数据库管理员根据具体需求进行调整。

TOAST的性能影响

虽然TOAST技术在处理大数据时提供了透明性,但在执行SELECT *操作时,性能开销可能被忽视。读取TOAST表中的数据需要额外的I/O操作,因此建议在查询时仅选择必要的列,以减少不必要的性能损耗。

TOAST的限制与应用场景

TOAST技术对每列每行的最大值限制为1GB,超出此限制的数据需要存储在数据库外部。这一限制意味着在设计数据库时,需考虑数据的大小和存储方式,尤其是对于需要频繁更新的大文档,建议避免将其存储在单一列中。

延伸问答

TOAST技术在PostgreSQL中是如何工作的?

TOAST技术通过压缩和重新定位变量长度属性,处理超过2KB的列,确保每个堆元组保持在8KB页面内,并将超大值存储在独立的TOAST表中。

PostgreSQL中TOAST的存储策略有哪些?

TOAST的存储策略包括PLAIN、EXTENDED、EXTERNAL和MAIN,分别对应不同的压缩和存储方式。

TOAST如何影响PostgreSQL的性能?

TOAST的透明性可能导致在读取大文档时性能开销被忽视,SELECT *操作会导致额外的I/O成本。

PostgreSQL 14引入了什么新的压缩算法?

PostgreSQL 14引入了lz4压缩算法,通常在压缩和解压缩速度上优于pglz。

TOAST的限制是什么?

TOAST的限制是每列每行最大1GB,超出此限制的值需存储在数据库外部,通常在对象存储中。

如何查看PostgreSQL中TOAST表的内容?

可以通过查询pg_toast表来查看TOAST表的内容,例如使用SELECT语句查询chunk_id和chunk_data。

🏷️

标签

➡️

继续阅读