除了HOT更新之外,较低的表fillfactor的好处是什么?

时间:2016-08-25 13:40:35

标签: postgresql

将fillfactor设置为低于默认值100%可以在表上进行HOT(Heap Only Tuple)更新。但是,如果更新列是索引的一部分,则可能无法进行HOT更新。如果表上的更新总是影响索引列,那么HOT更新永远不会发生,并且通过查看pg_stat_all_tables中表的n_tup_hot_upd列来确认,那么在这种情况下将fillfactor设置为小于100%是否有任何好处?

1 个答案:

答案 0 :(得分:1)

manual根本没有提及HOT更新作为fillfactor的原因。

  

fillfactor(整数)

     

表的fillfactor是介于10和100之间的百分比.100(完全打包)是默认值。当一个较小的fillfactor是   指定,INSERT操作只将表页包装到指示的位置   百分比;每页上的剩余空间保留用于更新   该页面上的行。这使UPDATE有机会进行更新   与原始页面在同一页面上的一行副本,更多   比将它放在不同的页面上更有效率。对于一张桌子   条目永远不会更新,完整的包装是最好的选择,但在   大量更新的表格较小的填充因子是合适的。这个   无法为TOAST表设置参数。

无论使用哪种方法(HOT或其他方式)来更新postgres所需的行:

  • 撰写新行
  • 保留旧行,以便其他事务仍然可以读取它,但请确保将旧行标记为旧行。

所以无论是否使用HOT;作为UPDATE的结果,postgres必须始终写入/更改两行。如果在一个页面而不是两个页面上完成,这将始终更有效。