如果打开这个参数,PostgreSQL服务器将尝试确保更新被物理地写入到磁盘,做法是发出fsync()系统调用或者使用多种等价的方法(见wal_sync_method)。这保证了数据库集簇在一次操作系统或者硬件崩溃后能恢复到一个一致的状态。
如何理解官网上这解释:
checkpoint简单点说就是一个数据库事件,用来保证数据一致性和完整性。
当我们在数据库中执行checkpoint时,就会将其之前的脏数据刷到磁盘,从而实现数据缩短数据库崩溃恢复时间的目的。
当执行checkpoint时,数据库主要完成以下几个工作:
识别shared buffers中所有的脏页
将脏页写入相应的数据文件
确保修改后的文件通过fsync()写入到磁盘
注意:fsync()函数用于强制从缓冲区高速缓存中物理写入数据,并确保在系统崩溃或其他故障之后,直到fsync()调用时的所有数据都记录在磁盘上。
对于fsync=on时,这个时候执行检查点,数据库直接调用OS的fsync函数,立刻直接写入硬盘,注意这个立刻,而当fsync=off时,数据库会把脏页写入os,然后os再根据系统的调度算法,把脏页写入磁盘,注意这里不是立刻,总之就是系统可能在干别的活,你先排队把,我先干完别的,再把脏页写入磁盘,这就导致了如果我系统崩溃,系统内的数据还未写入磁盘。数据未写入磁盘等数据库恢复的时候,会