2
在PostgreSQL中优化批量更新性能
在Ubuntu 12.04上使用PG 9.1。 目前,我们最多需要24小时才能在数据库上运行大量的UPDATE语句,其形式为: UPDATE table SET field1 = constant1, field2 = constant2, ... WHERE id = constid (我们只是覆盖由ID标识的对象的字段。)这些值来自外部数据源(尚未存在于表的DB中)。 该表每个都有少量索引,没有外键约束。直到结束都不会进行COMMIT。 导入pg_dump整个数据库需要2小时。这似乎是我们应该合理定位的基准。 缺少生成自定义程序以某种方式为PostgreSQL重新构造数据集以重新导入的方法,我们是否可以做些什么使批量UPDATE性能更接近于导入?(这是我们认为日志结构的合并树可以很好处理的一个区域,但是我们想知道PostgreSQL中是否可以做任何事情。) 一些想法: 删除所有非ID索引并随后进行重建? 增加checkpoint_segments,但这实际上有助于持续的长期吞吐量吗? 使用这里提到的技术?(将新数据作为表加载,然后“合并”在新数据中找不到ID的旧数据) 基本上,有很多事情可以尝试,我们不确定最有效的是什么,或者我们是否忽略了其他事情。我们将在接下来的几天中进行实验,但我们也想在这里提出问题。 我确实在表上有并发负载,但是它是只读的。