Redrock Postgres 搜索 英文
版本: 15 / 16 / 17 / 18

66.7. 堆内元组(HOT#

为了支持高并发,PostgreSQL 使用 多版本并发控制MVCC)来存储行。 不过,MVCC 对更新查询也有一些缺点。具体来说,更新需要向表中加入 新的行版本。这还可能要求为每个被更新的行新增索引条目,而移除旧的行版本及其索引条目 可能代价很高。

为了帮助降低更新的开销,PostgreSQL 提供了一种名为 堆内元组(HOT)的优化。该优化在以下情况下可行:

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

要提高页面拥有足够空间进行 HOT 更新的可能性,你可以降低表的 fillfactor。即使不这样做, HOT 更新也仍然会发生,因为新行会自然迁移到新页面,而那些具有足够 空闲空间容纳新行版本的现有页面也会被利用。系统视图 pg_stat_all_tables 可以用来监控 HOT 更新和非 HOT 更新的发生情况。