car*_*ion 4 postgresql fillfactor
我有一个记录表,该记录按顺序填充一次,但是每条记录都会更新(更新的顺序和更新的时间都是随机的)。这些更新不是HOT更新。考虑到这些事实,将我的表格的填充系数设置为50甚至小于50有什么好处?
好的,正如您对问题的评论中提到的那样,您正在使用更新每个事务中1-10k条记录的事务在表中进行更改。这是正确的方法,留下了一些自动抽真空的机会。但是表fillfactor不是我要检查/更改的第一件事。Fillfactor可以帮助您加快过程,但是如果autovacuum不够积极,则您将获得非常肿的表并很快失去性能。
因此,首先,我建议您控制桌子的膨胀程度。有许多查询可以帮助您:
接下来,我将autovacuum调整为比默认状态更具侵略性的状态,像这样(即使您不需要在短时间内处理整个表,这通常也是个好主意),如下所示:
log_autovacuum_min_duration = 0
autovacuum_vacuum_scale_factor = 0.01
autovacuum_analyze_scale_factor = 0.05
autovacuum_naptime = 60
autovacuum_vacuum_cost_delay = 20
Run Code Online (Sandbox Code Playgroud)
在使用UPDATE处理大量事务之后,检查膨胀水平。
最后,是的,我会调整fillfactor,但可能会调整到更高(或更常见)的值,例如80或90-在这里您需要做出一些预测,页面内10%或更多的元组将被更新的概率是多少?单笔交易?如果机会很高,请降低填充系数。但是您已经提到UPDATE中的行顺序是随机的,因此我将使用80-90%。请记住,这里有一个明显的权衡:如果将fillfactor设置为50,则表将需要2倍的磁盘空间,并且所有操作自然会变慢。如果您想深入探讨这个问题,建议您使用相同的数据创建21个填充因子为50..100的表,并使用pgbench测试UPDATE TPS。
| 归档时间: |
|
| 查看次数: |
1156 次 |
| 最近记录: |