4

我一直在阅读 Postgres 手册的WAL 章节,并且对章节的一部分感到困惑:

使用 WAL 会显着减少磁盘写入次数,因为只需要将日志文件刷新到磁盘以保证事务被提交,而不是事务更改的每个数据文件。

与简单地写入表/索引数据本身相比,连续写入 WAL 的性能如何?

正如我所见(暂时忘记 WAL 的弹性优势)postgres 需要完成两个磁盘操作;第一个 pg 需要提交到磁盘上的 WAL,然后您仍然需要更改表数据以与 WAL 保持一致。我确信我误解了这个的一个基本方面,但似乎在客户端事务和表数据的最终状态之间添加一个额外的步骤实际上并不能提高整体性能。提前致谢!

4

1 回答 1

5

您基本上是对的:对事务日志的额外写入本身不会减少 I/O 负载。

但是一个事务通常会涉及多个文件(表、索引等)。如果您将所有这些文件强制存储(“同步”),与仅同步单个文件相比,您将产生更多的 I/O 负载。

当然,所有这些文件最终都必须被写入和同步(在检查点期间),但通常相同的数据在两个检查点之间被修改多次,然后相应的文件只需要同步一次。

于 2019-03-25T16:23:46.630 回答