如何解决如何避免在Postgresql的每个插入中出现IO?
我正在尝试加快Postgresq插入速度。 我看到很多关于fsync,synchronous_commit等的文章。 我设置参数以获得最快的写入速度,但我仍然从硬盘中听到每个插入信息,并且DB服务器肯定会进行IO,就像缓冲区总是满了一样。我想念什么?
create unlogged table ...;
-- just one insert takes about 400 ms
postgresq配置
wal_level = minimal
fsync = off
synchronous_commit = off
full_page_writes = off
wal_compression = off
wal_buffers = 128MB
wal_writer_delay = 1000ms
wal_writer_flush_after = 4MB
解决方法
并非每个INSERT
都会导致I / O,每个提交都会导致I / O。除此之外,检查点将执行大多数I / O(如果shared_buffers
足够大)。
这些是加快加载速度的提示:
-
增加
max_wal_size
以减少不必要的检查点 -
看到
shared_buffers
不太小 -
在一次交易中使用许多
INSERT
-
使用准备好的语句更快
-
使用
COPY
最快 -
COPY (FREEZE)
放入在同一事务中创建或删减的表(或分区-提示)中,速度更快
让手指远离fsync
,它必须保持on
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。