Postgres如何存储行? - Ketan


在这篇文章中,我将尝试深入了解实现级别的细节并绘制出 PostgreSQL 行存储的真正工作原理。
需要说明的是,PostgreSQL 在磁盘上存储了大量文件,例如事务提交数据、子事务状态数据、预写日志 (WAL) 等。我只会探索堆文件。现在什么是堆文件?堆文件只是一个记录文件。请注意,堆文件与堆内存无关。尽管它们的用例非常相似,都是存储动态数据。
PostgreSQL 将实际数据存储到段文件(通常称为堆文件)中。通常它固定为 1GB 大小,但您可以在编译时使用--with-segsize. 当一个表或索引超过 1 GB 时,它被划分为千兆字节大小的段。这种安排避免了在有文件大小限制的平台上出现的问题,但对于任何现代平台来说,1GB 都是非常保守的选择。
这些段文件包含固定大小页面中的数据,通常为 8Kb,尽管在使用选项编译服务器时可以选择不同的页面大小,--with-blocksize但在考虑性能和可靠性权衡时,此大小通常属于理想大小。如果页面大小太小,行将不适合页面,如果太大,则存在写入失败的风险,因为硬件通常只能保证固定大小的块的原子性,这些块可以在磁盘之间变化(通常范围从 512字节到 4096 字节)。
更多点击标题