后端写线程
介绍后端写(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的倍数是一样的效果。
参数类型:整型
参数单位:毫秒
取值范围:10~10000
默认值:2s(即2000ms)
设置方式:该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。
设置建议:
增量checkpoint模式:数据量是shared_buffers多倍时,bgwriter_delay设置值不宜大于2s;数据量比shared_buffers小时,bgwriter_delay如果为了节省IO,可以适当调大。
全量checkpoint模式:默认值即可,但是磁盘能力差的,可以适当调大。
candidate_buf_percent_target
参数说明:用于增量检查点打开时,设置候选buffer链中可用buffer数目占据shared_buffer百分比的期望值,若当前候选链中的数目占据的百分比小于该值,bgwriter线程会启动,将满足条件的脏页刷盘。
参数类型:双精度浮点型
参数单位:无
取值范围:0.1 ~ 0.85
默认值:0.3
设置方式:该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。
设置建议:该参数直接影响bgwriter线程刷页个数。当数据量大于shared_buffers时,设置过小,会影响性能。若数据量是shared_buffers的2倍及以上,该值不宜小于默认值;其他场景下,若想减少IO,可适当调小该参数。
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计算出的最大值刷脏页。
参数类型:浮点型
参数单位:无
取值范围:0.1~1
默认值:0.9
设置方式:该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。
pagewriter_sleep
参数说明:设置用于增量检查点打开后,pagewriter线程每隔pagewriter_sleep的时间刷一批脏页下盘。当脏页占据shared_buffers的比例达到dirty_page_percent_max时,每批页面数量以设定的max_io_capacity计算出的值刷页,其余情况每批页面数量按比例相对减少。
参数类型:整型
参数单位:毫秒
取值范围:0~3600000
默认值:2000ms(2s)
设置方式:该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。
设置建议:CN设置为默认值。DN不宜设置大于2s,脏页产生很快的情况下,建议设置100ms - 500ms,因为设置过大会导致redo点推进过慢,影响xlog回收。
max_io_capacity
参数说明:设置后端写线程批量刷页每秒的IO上限。
参数类型:整型
参数单位:kB
取值范围:30720~10485760
默认值:512000kB(500MB)
设置方式:该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。取值不带单位,则默认为kB;取值如果要带单位,必须为kB、MB、GB。
设置建议:根据具体业务场景和机器磁盘IO能力进行设置,要求RTO很短时间或者数据量比共享内存大多倍的情况,业务访问数据量又是随机访问时,该值不宜过小。设置较小的max_io_capacity会减小后端写线程刷页个数,如果业务触发页面淘汰多时,该值设置小会影响业务。
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