Postgresql 中文操作指南

73.7. Heap-Only Tuples (HOT) #

为了允许高并发性,PostgreSQL 使用 multiversion concurrency control (MVCC) 来存储行。然而,对于更新查询来说,MVCC 有一些缺点。具体来说,更新要求将新版本的行添加到表中。这可能还需要为每个更新的行创建新的索引条目,而删除旧版本的行及其索引条目可能会非常耗费资源。

为了帮助减少更新的开销,PostgreSQL 有一种称为仅堆元组 (HOT) 的优化。当满足以下条件时,可以进行此优化:

在这种情况下,仅堆元组提供了两项优化:

通过减少表的 fillfactor ,您可以增大 HOT 更新具有足够页面空间的可能性。如果您不减少表的 fillfactor ,仍会进行 HOT 更新,因为新行将自然迁移到新页面中,现有页面也有足够的空间供新行版本使用。系统视图 pg_stat_all_tables 允许监控 HOT 更新和非 HOT 更新的发生。