提问者:小点点

如果在Postgresql中使用异步提交,其他事务看到提交之前是否有延迟?


我正在研究优化吞吐量的Java应用程序,经常(100个事务/秒)更新Postgreql数据库中的数据。由于我不介意在数据库崩溃时丢失一些事务,我认为使用异步提交可能是一个很好的选择。

我唯一担心的是,我不想在提交后延迟,直到其他事务/查询看到我的提交。我使用默认隔离级别“读取已提交”。

所以我的问题是:在Postgresql中以任何方式使用异步提交是否意味着在其他事务看到我提交的数据之前会有延迟,或者如果他们一直在等待我的事务完成,他们在继续之前会有延迟?(如前所述,我不在乎在我的数据被持久化到磁盘之前是否有延迟。)


共1个答案

匿名用户

看起来这就是你要找的行为。

http://www.postgresql.org/docs/current/static/wal-async-commit.html

选择异步提交模式意味着一旦事务在逻辑上完成,在它生成的WAL记录实际进入磁盘之前,服务器就会返回成功。这可以为小型事务提供显著的吞吐量提升。

WAL用于提供磁盘数据完整性,与正在运行的服务器的表完整性无关;只有在服务器崩溃时才重要。由于它们特别提到“一旦事务逻辑完成”,文档表明这不会影响表行为。