Using PostgreSQL async commit reduce write IO

今天上了一个新的应用,使用的PostgreSQL数据库。
数据库写非常频繁,并且是单步提交。对数据库的WAL所在的磁盘是一个巨大的挑战。因为默认情况下,所有的提交都是同步写到WAL中的。
当时观察到的WAL所在的磁盘,%UTIL接近50%,要知道WAL属于连续性写,对磁盘IO的冲击这么大已经比较严重了。
解决这个问题有两种方法。
1. 取消单步提交,使用多步提交。
2. 在应用允许的情况下数据库使用异步提交(全局或者SESSION模式)。
使用第一种方法的话需要应用修改,显然立马解决还需要一定时间。
使用第二种方法非常快,数据库修改一个参数,不需要重启就可以解决。只不过要承担约3×wal_write_delay 的数据丢失风险。
最后与开发人员商议,觉得采用数据库端修改参数的方法。
修改后只能用立竿见影来形容:WAL所在磁盘的%UTIL降到4%以下.

作者: digoal   发布时间: 2011-02-22

这个文档看得不是很明白。

作者: renxiao2003   发布时间: 2011-02-28