• 售前

  • 售后

热门帖子
入门百科

postgresql synchronous_commit参数的用法先容

[复制链接]
chris是小胖纸 显示全部楼层 发表于 2021-10-26 13:34:07 |阅读模式 打印 上一主题 下一主题
synchronous_commit

指定在命令返回”success”指示给客户端之前,一个事件是否必要等待 WAL 记载被写入磁盘。
正当的值是{local,remote_write,remote_apply,on,off}
默认的而且安全的设置是on。
不同于fsync,将这个参数设置为off不会产生数据库不同等性的风险:一个操纵体系或数据库瓦解大概会造成一些迩来据说已提交的事件丢失,但数据库状态是同等的,就像这些事件已经被干净地中止。因此,当性能比完全确保事件的恒久性更告急时,关闭synchronous_commit可以作为一个有用的取代手段。
这个参数可以随时被修改;任何一个事件的举动由其提交时见效的设置决定。因此,可以同步提交一些事件,同时异步提交其他事件。比方,当默认是相反时,实现一个单一多语句事件的异步提交,在事件中发出SET LOCAL synchronous_commit TO OFF。
单实例情况
  1. on:
复制代码
当数据库提交事件时,wal先写入 wal buffer 再写入 wal 日记文件,设置成on表示提交事件时需等待本地wal写入wal日记后才向客户端返回成功。
on 为默认设置,数据库非常安全,但性能有所消耗。
  1. off:
复制代码
当数据库提交事件时不必要等待本地 wal buffer 写入 wal 日记,随即向客户端返回成功,设置成off会给数据库带来一点风险:数据库宕机时最新提交的少量事件大概丢失,数据库重启后会认为这些事件非常停止,会rollback。
实用对数据库精确性要求不高同时寻求数据库性能的的场景。
  1. local:
复制代码
local含义和on雷同,表示提交事件时必要等待本地wal写入后才向客户端返回成功。
流复制情况
  1. on:
复制代码
表示流复制主库提交事件时,需等待备库吸收主库发送的wal日记流并写入wal文件,之后才向客户端返回成功,简单的说on表示本地wal已落盘,备库的wal也已落盘,有两份恒久化的wal,但备库此时还没有完成重做。
这个选项带来的事件相应时间较高。
  1. remote_write:
复制代码
表示流复制主库提交事件时,需等待备库吸收主库发送的wal日记流并写入备节点操纵体系缓存中,之后向客户端返回成功,这种情况下备库出现非常关闭时不会有已传送的wal日记丢失风险,但备库操纵体系非常宕机就有已传送的wal丢失风险了,此时wal大概还没有完全写入备节点wal文件中,简单的说 remote_write 表示本地wal已落盘,备库的wal还在备库操纵体系缓存中,也就是说只有一份恒久化的wal。
这个选项带来的事件相应时间较低。
  1. remote_apply:
复制代码
表示流复制主库提交事件时,需等待备库吸收主库发送的wal流并写入wal文件,同时备库已经完成重做,之后才向客户端返回成功,简单的说remote_apply 表示本地wal已落盘,备库wal已落盘而且已经完成重做,这个设置包管了拥有两份恒久化的wal,同时备库也已经完成了重做。
这个选项带来的事件相应时间最高。
补充:postgresql wal日记部分参数
  1. fsync
复制代码
fsync :控制wal日记革新是否开启革新到磁盘,此参数控制wal_sync_method参数的革新方法,如果fsync为off,则wal_sync_method的方法是没有意义的,
如果没开启这个参数,则大概由于wal日记块没有革新到磁盘永久存储而导致故障发生后实例出现块折断(oracle称其为block curruption)
  1. wal_sync_method
复制代码
wal_sync_method :wal日记革新方法,可选值为open_datasync/fdatasync/fsync/fsync_writethrough/open_sync
linux体系默认为fdatasync,以open开头的在某些体系上不支持
  1. wal_buffers
复制代码
wal_buffers :wal缓冲区,默认为-1,大小为1/32的shared_buffer,最小不少于64k,最大不大于一个wal_segment(默认16M大小),一般保持默认即可,由于过了wal_writer_delay(默认200ms)总会革新清空此缓存,设置太大了也用不上.
  1. wal_writer_delay
复制代码
wal_writer_delay:前面已经说过,这有点雷同oracle和mysql的1s定时写日记计谋,每隔这么长时间就会刷wal日记缓冲区的数据,然后sleep,到点后再刷,云云循环往复.
  1. commit_delay
复制代码
commit_delay :提交的延迟时间,如果设置了此参数,则会commit后延迟一段时间再举行提交,此机制可以合并其他事件进而一起举行组提交,不过合并的事件数是有限制的,要至少有commit_siblings参数个事件等待提交的时间才会延迟,所有当有大量事件的时间会延迟,而如果事件很稀疏就不会再被延迟了.
  1. commit_siblings
复制代码
commit_siblings :组提交个数的最少个数,此参数上面已经举行阐明
以上为个人经验,渴望能给各人一个参考,也渴望各人多多支持脚本之家。如有错误或未思量完全的地方,望不吝见教。

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作