什么叫dns服务器-什么是dns服务器-详解PostgreSQL提升批量数据导入性能的n种方法

关键字:批量数据导入,数据加载,大量刺进,加速,提高速度,了解什么是dns服务器,什么叫dns服务器

多元化挑选年代,人生里许多事物都是如此,凡事都没有一成不变的方式和办法。不管白猫黑猫,能抓老鼠的便是好猫,适合自己的便是最好的。

提高批量数据导入的办法亦是如此,没有何种办法是最优的,运用任何办法前根据自己的实际情况权衡利弊,做出挑选。

批量导入数据之前,无论采取何种方式,必须做好相应的备份。

导入完成后亦需对相应对象进行ANALYZE操作,这样查询优化器才会依照最新的统计信息生成正确的履行计划。

下面正式介绍提高批量数据导入性能的n种办法。

办法1:禁用自动提交。

psql
\set AUTOCOMMIT off

其他
BEGIN;
履行批量数据导入
COMMIT;

办法2:设置表为UNLOGGED。

导入数据之前先把表改成UNLOGGED模式,导入完成后改回LOGGED模式。

ALTER TABLE tablename SET UNLOGGED;
履行批量数据导入
ALTER TABLE tablename LOGGED;

长处:

导入信息不记载WAL日志,极大削减io,提高导入速度。

缺点:

1.在replication环境下,表无法设置为UNLOGGED模式。

2.导入过程一旦呈现停电死机等会导致数据库不能洁净关库的情况,数据库中所有UNLOGGED表的数据将丢失。

办法3:重建索引。

导入数据之前先删去相关表上的索引,导入完成后从头创立之。

DROP INDEX indexname;
履行批量数据导入
CREATE INDEX …;

查询表上索引界说的办法

1select * from pg_indexes where tablename =’tablename’ and schemaname = ‘schemaname’;

办法4:重建外键。

导入数据之前先删去相关表上的外键,导入完成后从头创立之。

ALTER TABLE …
DROP CONSTRAINT … ;
履行批量数据导入
ALTER TABLE …
ADD CONSTRAINT …
FOREIGN KEY …
REFERENCES …;

相关信息可查询pg_constraint。

办法5:停用触发器

导入数据之前先DISABLE掉相关表上的触发器,导入完成后从头ENABLE之。

ALTER TABLE tablename DISABLE TRIGGER ALL;
履行批量数据导入
ALTER TABLE tablename ENABLE TRIGGER ALL;

相关信息可查询pg_trigger。

办法6:insert改copy

COPY针对批量数据加载进行了优化。

1COPY … FROM ‘xxx’;

办法7:单值insert改多值insert

削减sql解析的时刻。

办法8:insert改PREPARE

经过运用PREPARE准备句子,下降解析消耗。

PREPARE fooplan (int, text, bool, numeric) AS
INSERT INTO foo VALUES($1, $2, $3, $4);
EXECUTE fooplan(1, ‘Hunter Valley’, ‘t’, 200.00);

办法9:修正参数

增大maintenance_work_mem,增大max_wal_size。

办法10:关闭归档模式,下降wal日志等级。

修正archive_mode参数操控归档开启和关闭。下降wal_level值为minimal来削减日志信息记载。

此法需求重启数据库,需求规划停机时刻。此外如有replication备库,还需考虑对其影响。