我已经设置了一个PostgreSQL测试环境,该环境必须包含与生产数据库相同的数据量(行数),并且配置得与生产环境大致相同,以模拟正常事务的相同性能。
但是,它是一个测试环境,有时必须应用一些独特的,实验的,临时的或临时的更改。例如,在性能测试之前添加或删除一些索引,重新计算列的值以复制测试条件,转储和重新导入整个表等。
是否有一种方法可以暂时挂起数据完整性保证,以便尽快执行这种类型的海量更新?
例如,在MySQL中,您可以设置超大写缓冲区,禁用事务日志记录并在事务提交时挂起磁盘刷新。 pgsql中有类似的东西吗?
部署环境是AWS EC2。
答案 0 :(得分:6)
The manual有一章专门介绍数据库的初始加载。
您可以更改一些安全选项以加快处理速度:
minimal
off
off
然后有一些相当不安全的选项可以使事情更快。不安全的含义:如果服务器崩溃,您可能会丢失所有数据-因此,使用后果自负!
off
off
再次:通过更改上述两个设置,您可能会丢失所有数据。
要禁用WAL,您还可以将所有表都设置为unlogged
答案 1 :(得分:2)
您可以使用ALTER TABLE ... SET UNLOGGED
禁用WAL日志记录,但是请注意,反向操作会将整个表转储到WAL。
如果这不可行,可以通过设置max_wal_size
休来提高性能,以减少检查点。
通过设置fsync = off
禁用WAL刷新。
请注意,如果发生崩溃,第一种和第三种措施会破坏您的数据库。