现在很多企业都将数据库逐渐由Mysql转向了更加强大而且开源的PostgreSQL数据库。在数据迁移过程中,PostgreSQL数据库导入大量数据时候非常缓慢,本文我们就来说说PostgreSQL数据库批量导入数据时的优化方法和策略。
概述
考虑PostgreSQL数据库批量导入数据时性能缓慢的原因,无非有几个因素:索引,触发器,外键,GUID主键,还有可能是预写日志(WAL)。我们就从这几个影响因素着手优化。当然有可能,本文说的这些技巧都不能有效问题,遇到这样的问题时候,就需要我们具体问题具体分析,并针对性的解决。
关闭日志记录
对于PostgreSQL 9.5及更高版本,可以先将目标表更改为UNLOGGED,然后在加载数据后将其更改回LOGGED:
ALTER TABLE SET UNLOGGED
ALTER TABLE LOGGED
UNLOGGED模式可以确保PostgreSQL不会在变量导入数据时将表写操作记录到预写日志(WAL),从而极大的优化导入过程。但是,由于未记录操作,因此如果在加载过程中发生崩溃或服务器关机等故障,则无法恢复数据。PostgreSQL重新启动后将自动截断任何未记录的表。
另外,未记录的表不会复制到备用服务器。在这种情况下,必须在加载之前删除现有的复制,并在加载之后重新创建。根据主节点中的数据量和备用数据库的数量,重建复制的时间可能会很长,对于高可用性要求来说这是不可接受的。
建议采用以下方法&