我一直在阅读Postgres手册的WAL chapter,但对本章的一部分感到困惑:
使用WAL可以显着减少磁盘写入次数,因为仅需要将日志文件刷新到磁盘以确保事务已提交,而不是事务已更改每个数据文件。
与简单地写入表/索引数据本身相比,连续写入WAL的性能如何?
正如我所见(现在忘记了WAL的弹性优势),postgres需要完成两个磁盘操作。首先pg需要在磁盘上提交WAL,然后您仍然需要更改表数据以与WAL保持一致。我敢肯定我误解了其中的一个基本方面,但似乎在客户事务和表数据的最终状态之间增加了一个额外的步骤实际上并不能提高整体性能。预先感谢!
答案 0 :(得分:1)
您从根本上说是正确的:对事务日志的额外写入本身不会减少I / O负载。
但是事务通常会涉及多个文件(表,索引等)。如果您将所有这些文件都强制存储(“同步”),则将产生比仅同步单个文件更多的I / O负载。
当然,所有这些文件最终都必须被写入并同步(在 checkpoint 期间),但是通常相同的数据在两个checkpoint之间被修改了几次,然后相应的文件将被只需同步一次。