可以配置PostgreSQL以使偶尔的批量更新可以超快地运行吗?

时间:2018-12-05 06:41:14

标签: postgresql database-performance bulkupdate

我已经设置了一个PostgreSQL测试环境,该环境必须包含与生产数据库相同的数据量(行数),并且配置得与生产环境大致相同,以模拟正常事务的相同性能。

但是,它是一个测试环境,有时必须应用一些独特的,实验的,临时的或临时的更改。例如,在性能测试之前添加或删除一些索引,重新计算列的值以复制测试条件,转储和重新导入整个表等。

是否有一种方法可以暂时挂起数据完整性保证,以便尽快执行这种类型的海量更新?

例如,在MySQL中,您可以设置超大写缓冲区,禁用事务日志记录并在事务提交时挂起磁盘刷新。 pgsql中有类似的东西吗?

部署环境是AWS EC2。

2 个答案:

答案 0 :(得分:6)

The manual有一章专门介绍数据库的初始加载。

您可以更改一些安全选项以加快处理速度:

然后有一些相当不安全的选项可以使事情更快。不安全的含义:如果服务器崩溃,您可能会丢失所有数据-因此,使用后果自负!

再次:通过更改上述两个设置,您可能会丢失所有数据

要禁用WAL,您还可以将所有表都设置为unlogged

答案 1 :(得分:2)

您可以使用ALTER TABLE ... SET UNLOGGED禁用WAL日志记录,但是请注意,反向操作会将整个表转储到WAL。

如果这不可行,可以通过设置max_wal_size休来提高性能,以减少检查点。

通过设置fsync = off禁用WAL刷新。

请注意,如果发生崩溃,第一种和第三种措施会破坏您的数据库。