设置一个低于默认的100%的填充因子允许在表上进行热(仅堆元组)更新。但是,如果更新的列是索引的一部分,则不可能进行热更新。如果表上的更新总是影响索引列,因此永远不会发生热更新,并且通过查看pg_stat_all_tables中的表的pg_stat_all_tables列来确认这一点,那么在此场景中设置一个小于100%的填充因子有什么好处吗?
发布于 2016-08-25 14:29:36
手册根本没有提到热更新作为填充因素的原因。
fillfactor(整数) 表的填充因子是介于10到100之间的百分比。100 (完整包装)是默认的。如果指定了较小的填充因子,则只将操作包表页插入到指定的百分比;每个页上的剩余空间用于更新该页上的行。这使UPDATE有机会将已更新的行副本放置在与原始页相同的页面上,这比将其放置在不同的页面上更有效。对于一个从未更新过条目的表,完全打包是最好的选择,但是在更新频繁的表中,较小的填充因子是合适的。不能为吐司表设置此参数。
无论使用哪种方法(热方法或其他方法)来更新行postgres,都需要:
因此,不管是否使用UPDATE,postgres必须始终写入/更改两行,这是的结果。如果在一页而不是两页上这样做,这将永远是更有效率的。
https://stackoverflow.com/questions/39146956
复制相似问题