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技术通过压缩和重新定位变量长度属性,处理超过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。

➡️

继续阅读