方法2:设置表为UNLOGGED。
导入数据之前先把表改成UNLOGGED模式,导入完成后改回LOGGED模式。
优点: 导入信息不记录WAL日志,极大减少io,提升导入速度。 缺点: 1.在replication环境下,表无法设置为UNLOGGED模式。 2.导入过程一旦出现停电死机等会导致数据库不能干净关库的情况,数据库中所有UNLOGGED表的数据将丢失。
方法3:重建索引。
导入数据之前先删除相关表上的索引,导入完成后重新创建之。
查询表上索引定义的方法
方法4:重建外键。
导入数据之前先删除相关表上的外键,导入完成后重新创建之。
相关信息可查询pg_constraint。
方法5:停用触发器
导入数据之前先DISABLE掉相关表上的触发器,导入完成后重新ENABLE之。
相关信息可查询pg_trigger。
方法6:insert改copy
COPY针对批量数据加载进行了优化。
方法7:单值insert改多值insert
减少sql解析的时间。
方法8:insert改PREPARE
通过使用PREPARE预备语句,降低解析消耗。
方法9:修改参数
增大maintenance_work_mem,增大max_wal_size。
方法10:关闭归档模式,降低wal日志级别。
修改archive_mode参数控制归档开启和关闭。降低wal_level值为minimal来减少日志信息记录。 此法需要重启数据库,需要规划停机时间。此外如有replication备库,还需考虑对其影响。
到此这篇关于PostgreSQL提升批量数据导入性能的n种方法的文章就介绍到这了,更多相关PostgreSQL批量数据导入内容请搜索七叶笔记以前的文章或继续浏览下面的相关文章希望大家以后多多支持七叶笔记!