WAL 缓冲区在事务提交之前填满

WAL buffers fills before the transaction commits

我一直在研究 Postgresql 中的崩溃恢复机制,这让我大吃一惊。在 WAL 日志记录中,在事务开始时,基于查询,WAL 缓冲区被 XLOG 记录填充。在事务提交时,WAL 缓冲区被刷新。现在,假设我开始使用一系列插入进行交易。当现有的 WAL 段被填满时,它会创建新的。但是,当我批量插入或复制大量数据或其他内容(比如 4-5GB)时,WAL 缓冲区(1-2GB)在事务提交之前被填充时会发生什么?在这种情况下,WAL 会发生什么?

当 WAL 缓冲区已满时,它们将被刷新到磁盘。没有什么说 WAL 缓冲区只能在事务提交时刷新。重要的是,在事务被报告为已提交(假设同步提交)之前,与事务有关的所有 WAL 记录都被刷新。但反之则不然:WAL 记录可以在事务提交之前被刷新。