PostgreSQL 的内部架构处理数据更新的方式使其区别于许多其他数据库系统。优化这些更新的一个核心机制是 Heap Only Tuple (HOT) 路径。该过程旨在通过最小化与更新记录相关的开销来提高性能,特别是当这些更新不改变已建立索引列的值时。通过了解 PostgreSQL 如何管理这些内部移动,开发人员可以更好地预测数据库在重度写入负载下的表现。
HOT 更新机制在特定条件下运行:仅当更新的列不属于任何索引,且数据的新版本(元组)能够放入与旧版本相同的物理页面时,该机制才会触发。如果满足这些条件,PostgreSQL 就可以更新记录而无需更新每个相关的索引,从而显著减少 I/O。然而,这种优化对 'fillfactor' 设置非常敏感。如果表的页面过于拥挤,就没有空间容纳新元组,HOT 更新就会失败,从而强制执行需要完整索引维护的标准更新。Hacker News 上的评论者指出,在更新频繁的表上降低 fillfactor(例如降至 80-90)可以确保每个页面保留足够的空闲空间以进行 HOT 更新。
除了 HOT 路径之外,数据库的行为还由其 zHeap 实现以及对 TOAST(超大属性存储技术)的处理进一步定义。这些组件提供了关于 PostgreSQL 在数据存储和检索方面“做什么”和“不做什么”的思维模型。此外,数据库的 Snapshot Isolation (SSI) 实现——旨在确保并发事务期间的一致性——一直是技术审查的焦点。例如,一份 2020 年的 Jepsen 报告识别出了 SSI 实现中一个长期存在的 Bug,突显了在分布式或并发操作中维持严格一致性所涉及的复杂性。虽然这些内部机制在日常使用中往往被抽象掉,但它们代表了 PostgreSQL 在存储效率和更新性能之间的基本权衡。
