postgresql - Postgres : Set fillfactor to 50?

标签 postgresql fillfactor

我有一个按顺序填充一次的记录表,但随后每个 记录都会更新(它们的更新顺序和更新时间都是随机的)。这些更新不是热更新。考虑到这些事实,将此表的填充因子设置为 50 甚至小于 50 是否有任何优势?

最佳答案

好的,正如您在对问题的评论中提到的,您正在使用在每个事务中更新 1-10k 记录的事务对表进行更改。这是给 autovacuum 留下一些机会使其工作的正确方法。但是表的 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

在使用 UPDATE 进行大量事务后,检查膨胀级别。

最后,是的,我会调整 fillfactor,但可能会调整到更高(更常见)的值,例如 80 或 90 – 在这里您需要做出一些预测,页面中 10% 或更多元组的概率是多少被单笔交易更新?如果机会非常高,请降低填充因子。但是您已经提到 UPDATE 中的行顺序是随机的,所以我会使用 80-90%。请记住,这里有一个明显的权衡:如果将 fillfactor 设置为 50,您的表将需要 2 倍以上的磁盘空间,并且所有操作自然会变慢。如果您想深入了解这个问题,我建议使用相同的数据创建 21 个填充因子为 50..100 的表,并使用 pgbench 测试 UPDATE TPS。

关于postgresql - Postgres : Set fillfactor to 50?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45087790/

相关文章:

postgresql - 使用 postgresql 的 AsyncQuery 和使用 npqsql 的 dapper

sql - 将存储过程和 SQL 查询合并为一个 SQL 语句

sql-server - 如何查看SQL Server表的读/写统计信息?

postgresql - 检查表和索引的填充因子设置

postgresql - 更改现有表的填充因子

dolphindb - 如何使用特定规则转发非 NULL 值?

django - 我可以让 Django-1.2 透明地使用我的 LATIN1 编码的 PostgreSQL 数据库吗?

postgresql - 为什么 Docker 中的 pg_restore 段错误?

sql-server - 调整填充因子以减少碎片

spring - 不支持 DML 操作。无法使用 spring 数据更新 postgresql 数据库中的数据