我在寻找解决以下问题的最佳选择时遇到了问题(postgres 9.5):
我一次从另一个系统获得大约 100.000 行的更新批次。这种情况通常每 10-15 分钟发生一次,但我可能会同时收到多个批次。批次由“类别”分隔,一个批次只包含来自一个批次的数据。每个“类别”每 10-15 分钟更新一次。新行被插入,旧行被删除,仍然存在的行应该更新为新值。
这带来了表产生大量垃圾数据、VACUUM 进程运行非常缓慢以及一般表性能非常差的问题。
现在我想我可以通过为数据中的每个“类别”创建子表并因此“分片”数据来解决这个问题。
在这种情况下,这是否有意义,还是有更好的选择让我坚持?
清理速度慢是因为 IO 吞吐量不足,还是仅仅因为它受到太多限制?
autovacuum 的默认限制不适合写入非常密集的服务器。您可能应该减少autovacuum_vacuum_cost_delay
或增加vacuum_cost_limit
。我通常将vacuum_cost_page_hit 和vacuum_cost_page_miss 设置为零。页面丢失本质上是自我限制的,因为在页面交付之前清理过程无法继续;因此没有理由在此基础上添加有意的限制。
归档时间: |
|
查看次数: |
921 次 |
最近记录: |