加载中...
HOT(Heap-Only Tuple)是 PostgreSQL 的一项更新优化技术。当更新不涉及索引列且新版本能放入同一数据页时,PostgreSQL 只在堆内生成新版本而无需更新索引,从而减少索引写放大与膨胀,显著提升更新性能。

| 所属系统 | PostgreSQL |
| 优化目标 | 减少索引更新与膨胀 |
| 触发条件 | 更新非索引列且同页有空间 |
| 相关参数 | 填充因子(fillfactor) |
| 相关机制 | MVCC |
HOT 更新(Heap-Only Tuple)是 PostgreSQL 用来优化行更新的一项重要技术。由于 PostgreSQL 采用多版本并发控制,每次更新都会产生一个新的行版本,若每次都同步更新所有索引,会带来大量额外写入。HOT 在满足条件时让更新只发生在堆(数据页)内部,避免了对索引的改动。
在 PostgreSQL 中,索引指向的是数据页中具体的行位置。传统更新会插入新版本行,并为每个索引都新增指向新版本的条目。HOT 优化的思路是:如果本次更新没有修改任何被索引的列,并且新版本能够容纳在原来那一页里,那么新旧版本之间可以用页内的指针链接起来,索引仍然指向旧位置即可顺链找到最新版本,无需更新索引。
HOT 对更新频繁、且更新往往只改动非索引列的表尤为有效,例如状态字段、计数器、最后访问时间等经常变化而通常不建索引的列。合理设计索引、并为频繁更新的表预留页内空闲空间(填充因子),能让更多更新走 HOT 路径。
问:如何提高 HOT 更新的命中率?答:避免给频繁更新的列建索引,并适当降低表的填充因子以在页内预留空间,使新版本更容易留在同一页。
问:HOT 能完全消除表膨胀吗?答:不能,但能显著减轻。它减少了索引膨胀和部分堆膨胀,失效版本仍需由后续清理机制回收空间。

| 所属系统 | PostgreSQL |
| 优化目标 | 减少索引更新与膨胀 |
| 触发条件 | 更新非索引列且同页有空间 |
| 相关参数 | 填充因子(fillfactor) |
| 相关机制 | MVCC |
登录 后参与讨论
暂无讨论,来发表第一条评论吧