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