💡
原文英文,约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。
🏷️
标签
➡️