9.3 9.4 9.5 9.6 10 11 12 13 14 15 Current(16) 17
问题报告 纠错本页面
73.7. 仅存储在堆中的元组(HOT)
上一页 上一级 第 73 章 数据库物理存储起始页 下一页

73.7. 仅存储在堆中的元组(HOT) #

为了实现高并发,PostgreSQL使用多版本并发控制(MVCC)来存储行。然而,MVCC对于更新查询有一些不足之处。具体来说,更新需要向表中添加新版本的行。这也可能需要为每个更新的行添加新的索引条目,并且删除旧版本的行及其索引条目可能会很昂贵。

为了帮助减少更新的开销, PostgreSQL 有一个称为堆仅元组 (HOT) 的优化。此优化在以下情况下是可能的:

  • 更新不会修改表索引引用的任何列,不包括汇总索引。 核心 PostgreSQL 分发中的唯一汇总索引方法是 BRIN

  • 旧行所在页面有足够的空闲空间容纳更新后的行。

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

  • 不需要新的索引条目来表示更新的行,但汇总索引可能仍需要更新。

  • 更新行的旧版本可以在正常操作期间完全移除,包括 SELECT,而不需要定期的真空操作。 (这是可能的,因为索引不引用它们的 页面项标识符。)

您可以通过减少表的 fillfactor来增加HOT更新有足够页面空间的 可能性。如果不这样做,HOT更新仍然会发生,因为新行会自然迁移到新 页面以及现有页面中有足够空闲空间的新行版本。系统视图pg_stat_all_tables 允许监控HOT和非HOT更新的发生情况。


上一页 上一级 下一页
73.6. 数据库页面布局 起始页 第 74 章 事务处理

AltStyle によって変換されたページ (->オリジナル) /