首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >大批量插入/更新和删除性能问题

大批量插入/更新和删除性能问题
EN

Database Administration用户
提问于 2016-11-17 10:09:04
回答 2查看 1.2K关注 0票数 6

我很难找到解决以下问题的最佳方案(postgres 9.5):

我从另一个系统中一次得到大约100.000行的更新批次。这种情况通常每10-15分钟发生一次,但我有可能同时得到多个批次。批次由“类别”分隔,一批只包含一个批次中的数据。每隔10-15分钟,每个“类别”都会得到一个更新集。插入新行,删除旧行,仍然存在的行应更新为新值。

这就造成了这样的问题:表包含大量的垃圾数据,真空进程运行得非常慢,而一般的表性能非常差。

现在,我认为我可以通过为数据中的每个“类别”创建子表来解决这个问题,从而“分割”数据。

在这种情况下,这样做有意义吗?还是有更好的选择让我去说服?

EN

回答 2

Database Administration用户

发布于 2016-11-17 21:37:49

抽真空是因为IO吞吐量不足,还是因为过多地节流而导致的真空速度慢?

自动真空的默认节流不适用于编写非常密集的服务器。您可能应该降低autovacuum_vacuum_cost_delay或增加vacuum_cost_limit。我经常把vacuum_cost_page_hit和vacuum_cost_page_miss设为零。页面丢失本质上是自我限制的,因为在页面交付之前,真空过程是无法进行的;因此,没有什么理由在此基础上添加有意节流。

票数 1
EN

Database Administration用户

发布于 2016-11-18 00:01:36

我从另一个系统中一次得到大约100.000行的更新批次。...每个“类别”每10-15分钟获得一个更新集。插入新行,删除旧行,仍然存在的行应更新为新值。

你在使用UPSERT:INSERT INTO ON CONFLICT DO UPDATE SET吗?如果没有,您是否尝试过将其集成到工作流程中并对其进行基准测试?这是PG9.5的新功能。

另外,硬件方面的情况如何:一千万行并不多。你在运行SSD吗?

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/155568

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档