我很难找到解决以下问题的最佳方案(postgres 9.5):
我从另一个系统中一次得到大约100.000行的更新批次。这种情况通常每10-15分钟发生一次,但我有可能同时得到多个批次。批次由“类别”分隔,一批只包含一个批次中的数据。每隔10-15分钟,每个“类别”都会得到一个更新集。插入新行,删除旧行,仍然存在的行应更新为新值。
这就造成了这样的问题:表包含大量的垃圾数据,真空进程运行得非常慢,而一般的表性能非常差。
现在,我认为我可以通过为数据中的每个“类别”创建子表来解决这个问题,从而“分割”数据。
在这种情况下,这样做有意义吗?还是有更好的选择让我去说服?
发布于 2016-11-17 21:37:49
抽真空是因为IO吞吐量不足,还是因为过多地节流而导致的真空速度慢?
自动真空的默认节流不适用于编写非常密集的服务器。您可能应该降低autovacuum_vacuum_cost_delay或增加vacuum_cost_limit。我经常把vacuum_cost_page_hit和vacuum_cost_page_miss设为零。页面丢失本质上是自我限制的,因为在页面交付之前,真空过程是无法进行的;因此,没有什么理由在此基础上添加有意节流。
https://dba.stackexchange.com/questions/155568
复制相似问题