后端写进程
介绍后端写(background writer)进程的参数配置。后端写进程的功能就是把共享缓冲区中的脏数据(指共享缓冲区中新增或者修改的内容)写入到磁盘。目的是让数据库进程在进行用户查询时可以很少或者几乎不等待写动作的发生(写动作由后端写进程完成)。
此机制同样也减少了检查点造成的性能下降。后端写进程将持续的把脏页面刷新到磁盘上,所以在检查点到来的时候,只有几个页面需要刷新到磁盘上。但是这样还是增加了I/O的总净负荷,因为以前的检查点间隔里,一个重复弄脏的页面可能只会冲刷一次,而同一个间隔里,后端写进程可能会写好几次。在大多数情况下,连续的低负荷要比周期性的尖峰负荷好,但是在本节讨论的参数可以用于按实际需要调节其行为。
bgwriter_delay
参数说明:设置后端写进程写"脏"共享缓冲区之间的时间间隔。每一次,后端写进程都会为一些脏的缓冲区发出写操作,全量checkpoint模式用bgwriter_lru_maxpages参数控制每次写的量,然后休眠bgwriter_delay毫秒后才再次启动;增量checkpoint模式下,根据设定candidate_buf_percent_target计算目标空闲缓冲页面个数,不足时每隔bgwriter_delay毫秒刷一批页面下盘,刷页个数根据目标差距百分比计算,会根据max_io_capacity限制最大数量。
在许多系统上,休眠延时的有效分辨率是10毫秒。因此,设置一个不是10的倍数的数值与把它设置为下一个10的倍数是一样的效果。
该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。
取值范围:整型,10~10000,单位为毫秒。
默认值:2s
设置建议:在数据写压力比较大的场景中可以尝试减小该值以降低checkpoint的压力。
candidate_buf_percent_target
参数说明:设置用于增量检查点打开时,候选buffer链中可用buffer数目占据shared_buffer内存缓冲区百分比的期望值,当前候选链中的数目少于目标值时,bgwriter线程会启动将满足条件的脏页刷盘。
该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。
取值范围:双精度浮点类型,0.1~0.85
默认值:0.3
bgwriter_lru_maxpages
参数说明:设置后端写进程每次可写入磁盘的“脏”缓存区的个数。
该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。
取值范围:整型,0~1000
此参数设置为0表示禁用后端写功能,禁用后端写功能不会对checkpoints产生影响。
默认值:100
bgwriter_lru_multiplier
参数说明:通过与已使用缓存区数目的乘积评估下次服务器需要的缓存区数目。
写“脏”缓存区到磁盘的数目取决于服务器最近几次使用的缓存区数目。最近的buffers数目的平均值乘以bgwriter_lru_multiplier是为了评估下次服务器进程需要的buffers数目。在有足够多的干净的、可用的缓存区之前,后端写进程会一直写“脏”缓存区的(每次写的缓存区数目不会超过bgwriter_lru_maxpages的值)。
设置bgwriter_lru_multiplier的值为1.0表示一种“实时”策略,其作用是精准预测下次写“脏”缓冲区的数目。设置为较大的值可以应对突然的需求高峰,而较小的值则可以让服务器进程执行更多的写操作。
设置较小的bgwriter_lru_maxpages和bgwriter_lru_multiplier会减小后端写进程导致的额外I/O开销,但是服务器进程必须自己发出写操作,增加了对查询的响应时间。
该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。
取值范围:浮点型,0~10。
默认值:2
pagewriter_thread_num
参数说明:设置用于增量检查点打开后后台刷页的线程数,主要是按照脏页置脏的顺序刷盘,用于推进recovery点。
该参数属于POSTMASTER类型参数,请参考表1中对应设置方法进行设置。
取值范围:整型,1~16
默认值:4
dirty_page_percent_max
参数说明:设置用于增量检查点打开后脏页数量占shared_buffers的百分比。达到这个设定值时,后台刷页线程将以设置的max_io_capacity计算出的最大值刷脏页。
该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。
取值范围:浮点型,0.1~1
默认值:0.9
pagewriter_sleep
参数说明:设置用于增量检查点打开后,pagewriter线程每隔pagewriter_sleep的时间刷一批脏页下盘。当脏页占据shared_buffers的比例达到dirty_page_percent_max时,每批页面数量以设定的max_io_capacity计算出的值刷页,其余情况每批页面数量按比例相对减少。
该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。
取值范围:整型,0~3600000,单位为毫秒。
默认值:2000ms(2s)
max_io_capacity
参数说明:设置后端写进程批量刷页每秒的I/O上限,需要根据具体业务场景和机器磁盘I/O能力进行设置,要求RTO很短时间或者数据量比共享内存大多倍的情况,业务访问数据量又是随机访问时,该值不宜过小。设置较小的max_io_capacity会减小后端写进程刷页个数,如果业务触发页面淘汰多时,该值设置小会影响业务。
该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。
取值范围:整型,30720~10485760,单位是KB。
默认值:500MB/s
enable_consider_usecount
参数说明:设置backend线程在页面置换时是否考虑页面热度,建议大容量场景下开启此参数。
该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。
取值范围:布尔型
- on/true表示考虑页面热度。
- off/false表示不考虑页面热度。
默认值:off
dw_file_num
参数说明:设置批量双写文件的数量,该值与pagewriter_thread_num有关,不会大于pagewriter_thread_num,如果设置过大,内部会纠正为pagewriter_thread_num。
该参数属于POSTMASTER类型参数,请参考表1中对应设置方法进行设置。
取值范围:整型,1~16
默认值:1