Majid Azimi Asked: 2012-05-30 05:12:42 +0800 CST2012-05-30 05:12:42 +0800 CST 2012-05-30 05:12:42 +0800 CST 使用 COPY 命令和 wal_buffers 772 因为COPY命令在单个事务中运行,如果它的 WAL 数据不适合wal_buffers?例如,如果我们从 CSV 文件批量导入。 postgresql bulkcopy 1 个回答 Voted Best Answer dezso 2012-05-30T06:17:55+08:002012-05-30T06:17:55+08:00 正如文档所述: 有两个常用的内部 WAL 函数:LogInsert 和 LogFlush。LogInsert 用于将新记录放入共享内存中的 WAL 缓冲区。如果新记录没有空间,LogInsert 将不得不写入(移动到内核缓存)一些填充的 WAL 缓冲区。这是不可取的,因为在受影响的数据页上持有独占锁时,LogInsert 用于每次数据库低级别修改(例如,行插入),因此操作需要尽可能快。更糟糕的是,写入 WAL 缓冲区还可能会强制创建一个新的日志段,这会花费更多时间。通常,WAL 缓冲区应该由 LogFlush 请求写入和刷新,该请求在大多数情况下是在事务提交时发出的,以确保事务记录被刷新到永久存储。在具有高日志输出的系统上,LogFlush 请求的发生频率可能不足以阻止 LogInsert 执行写入操作。在这样的系统上,应该通过修改配置参数 wal_buffers 来增加 WAL 缓冲区的数量。 这对我来说意味着在这种情况下系统将需要更多时间来完成COPY写入。
正如文档所述:
这对我来说意味着在这种情况下系统将需要更多时间来完成
COPY
写入。