如何加快PostgreSQL中的插入性能
我测试Postgres插入性能。我有一个表,其中一列的数字作为其数据类型。还有一个索引。我使用这个查询填充数据库:
insert into aNumber (id) values (564),(43536),(34560) ... 我使用上面的查询一次插入了4百万行非常快10,000。数据库达到600万行后,性能急剧下降到每15分钟1百万行。是否有任何技巧来提高插入性能?我需要在这个项目的最佳插入性能。 在具有5 GB RAM的计算机上使用Windows 7 Pro。
请参阅PostgreSQL手册中的
populate a database,
depesz’s excellent-as-usual article上的主题和
this SO question。
(注意,这个答案是关于将数据批量加载到现有的数据库或创建一个新的数据库。如果你感兴趣的数据库恢复性能与pg_restore或psql执行的pg_dump输出,大部分这不适用,因为pg_dump和pg_restore已经在完成模式数据恢复后创建触发器和索引)。 有很多事情要做。理想的解决方案是导入到没有索引的UNLOGGED表,然后将其更改为记录并添加索引。不幸的是在PostgreSQL 9.4中,不支持将表从UNLOGGED更改为记录。 9.5添加ALTER TABLE … SET LOGGED以允许您这样做。 如果您可以使您的数据库脱机以进行批量导入,请使用 除此以外: >禁用表上的任何触发器 您还应该考虑调整您的系统: >尽可能使用优质SSD进行存储。良好的SSD具有可靠的电源保护回写缓存使提交速度令人难以置信的更快。当你遵循上面的建议,减少磁盘刷新/ fsync()的数量,它们不太有用 – 但仍然可以是一个大的帮助。不要使用没有正确的电源故障保护的便宜的SSD,除非你不在乎保留你的数据。 您可能也对Optimise PostgreSQL for fast testing感兴趣。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |