fsync 和 synchronous_commit 的区别 - postgresql

Maj*_*imi 6 postgresql

fsync和 和有synchronous_commit什么区别?我阅读了文档,我唯一理解的是他们都试图将更新物理写入磁盘。

Dan*_*ité 12

fsync为 OFF 时,PostgreSQL 服务器将永远不会发出任何fsync系统调用,完全由操作系统决定哪些块从写缓存传输到磁盘,以及何时传输。数据库引擎永远不知道什么已同步或未同步。在服务器崩溃的情况下,必须假设数据库处于不一致状态。

synchronous_commit为 OFF 时,服务器发出fsync调用,但不一定在每个事务的提交时间立即发出。它可能会在提交后延迟它们,最多wal_writer_delay乘以 3。默认配置为 600 毫秒。这允许减少 fsync 调用的数量,特别是对于具有大量小事务的工作负载。在服务器崩溃的情况下,在崩溃前的最后 600 毫秒内尚未同步的事务可能会回滚,但数据库的状态始终保持一致。