我正在研究优化Java应用程序中的吞吐量,该应用程序经常(100多个事务/秒)更新Postgresql数据库中的数据。由于我不介意在数据库崩溃时丢失一些事务,我认为使用异步提交可能是一个不错的选择。
我唯一担心的是,在提交之后我不希望延迟,直到其他事务/查询看到我的提交。我使用默认隔离级别“Read committed”。
所以我的问题是:在Postgresql中以任何方式使用异步提交意味着在其他事务看到我提交的数据之前或者在他们等待我的事务处理之前它们继续之前会有延迟完成? (如前所述,我不关心在我的数据持久存储到磁盘之前是否存在延迟。)
答案 0 :(得分:1)
这似乎是你正在寻找的行为。
http://www.postgresql.org/docs/current/static/wal-async-commit.html
选择异步提交模式意味着一旦事务在逻辑上完成,服务器就会在之前返回成功 它生成的WAL记录实际上已经进入磁盘。这个 可以显着提高小额交易的吞吐量。
WAL用于提供磁盘数据完整性,与正在运行的服务器的表完整性无关;只有服务器崩溃才有用。由于他们特别提到“一旦事务在逻辑上完成”,该文档表明这不会影响表行为。