因为COPY命令在单个事务中运行,如果它的WAL数据不适合wal_buffers?例如,如果我们是从CSV文件批量导入。
发布于 2012-05-29 14:17:55
作为文档州:
有两个常用的内部WAL函数: LogInsert和LogFlush。LogInsert用于将新记录放入共享内存中的WAL缓冲区中。如果没有新记录的空间,LogInsert将不得不编写(移动到内核缓存)几个填充的WAL缓冲区。这是不可取的,因为每次数据库低级别修改(例如,行插入)都会在受影响的数据页上持有独占锁时使用LogInsert,因此操作需要尽可能快。更糟糕的是,编写WAL缓冲区也可能迫使创建一个新的日志段,这需要更多的时间。通常,WAL缓冲区应该由LogFlush请求编写和刷新,该请求大部分是在事务提交时发出的,以确保事务记录被刷新到永久存储。在日志输出较高的系统上,LogFlush请求的发生可能不足以防止LogInsert不得不进行写入。在这种系统上,应该通过修改配置参数wal_buffers来增加WAL缓冲区的数量。
这意味着,在这种情况下,系统将需要更多的时间来完成COPY,因为写。
https://dba.stackexchange.com/questions/18513
复制相似问题