开发者社区> 问答> 正文

postgresql参数中fsync和synchronous_commit

已解决

今天搭建流复制,想起了一个一直以来没搞清楚的问题,fsync这个参数的含义。

首先说一下我自己个人的理解:fsync这个参数用来控制将操作系统缓存写入磁盘。(而不是数据库缓存)

举一个例子,在同步流复制中,如果参数 synchronous_commit=on,fsync=off ,在主库insert一条数据的时候,数据必须要落盘之后才能返回ok,这个时候就算fsync=off,操作系统依然会将缓存数据刷入磁盘。

第二个例子,在异步流复制中,如果参数synchronous_commit=off , fsync=on , 在主库insert一条数据后,数据写入到wal缓存就返回ok了,然后当数据库将wal缓存写入操作系统缓存时,操作系统缓存会直接将wal日志写入磁盘,而不会做对应的缓存。

不知道我上面的2个例子的理解是否正确?

展开
收起
pis-j 2016-03-16 16:36:46 7328 0
1 条回答
写回答
取消 提交回答
  • 公益是一辈子的事, I am digoal, just do it. 阿里云数据库团队, 擅长PolarDB, PostgreSQL, DuckDB, ADB等, 长期致力于推动开源数据库技术、生态在中国的发展与开源产业人才培养. 曾荣获阿里巴巴麒麟布道师称号、2018届OSCAR开源尖峰人物.
    采纳回答

    你看看代码会更清楚,其实fsync是控制持久化调用的选择开关。
    例如checkpoint, wal fsync都会涉及到持久化。
    当 fsync=off时,处理逻辑会不一样(基本上是跳过持久化的系统调用),即不确保已持久化。
    你可以去搜一下这个值:
    enableFsync
    看看就知道了。

    2019-07-17 18:34:18
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
金融级 PostgreSQL监控及优化 立即下载
PostgreSQL在哈啰的实践-周飞 立即下载
PostgreSQL高并发数据库应用数据 立即下载

相关镜像