将fillfactor设置为低于默认值100%可以在表上进行HOT(Heap Only Tuple)更新。但是,如果更新列是索引的一部分,则可能无法进行HOT更新。如果表上的更新总是影响索引列,那么HOT更新永远不会发生,并且通过查看pg_stat_all_tables中表的n_tup_hot_upd列来确认,那么在这种情况下将fillfactor设置为小于100%是否有任何好处?
答案 0 :(得分:1)
manual根本没有提及HOT更新作为fillfactor的原因。
fillfactor
(整数)表的fillfactor是介于10和100之间的百分比.100(完全打包)是默认值。当一个较小的fillfactor是 指定,INSERT操作只将表页包装到指示的位置 百分比;每页上的剩余空间保留用于更新 该页面上的行。这使UPDATE有机会进行更新 与原始页面在同一页面上的一行副本,更多 比将它放在不同的页面上更有效率。对于一张桌子 条目永远不会更新,完整的包装是最好的选择,但在 大量更新的表格较小的填充因子是合适的。这个 无法为TOAST表设置参数。
无论使用哪种方法(HOT或其他方式)来更新postgres所需的行:
所以无论是否使用HOT;作为UPDATE
的结果,postgres必须始终写入/更改两行。如果在一个页面而不是两个页面上完成,这将始终更有效。