
# 后端写线程
介绍后端写（background writer）线程的参数配置。后端写线程的功能就是把共享缓冲区中的脏数据（指共享缓冲区中新增或者修改的内容）写入到磁盘。目的是让数据库进程在进行用户查询时可以很少或者几乎不等待写动作的发生（写动作由后端写线程完成）。
此机制同样也减少了检查点造成的性能下降。后端写线程将持续的把脏页面刷新到磁盘上，所以在检查点到来的时候，只有几个页面需要刷新到磁盘上。但是这样还是增加了I/O的总净负荷，因为以前的检查点间隔里，一个重复弄脏的页面可能只会冲刷一次，而同一个间隔里，后端写线程可能会写好几次。在大多数情况下，连续的低负荷要比周期性的尖峰负荷好，但是在本节讨论的参数可以用于按实际需要调节其行为。
#### bgwriter_delay
**参数说明** ：定期循环逐块扫描缓冲区刷脏的时间间隔。全量checkpoint模式下，根据[bgwriter_lru_maxpages]参数控制每次写的量，然后休眠bgwriter_delay毫秒后才再次启动；增量checkpoint模式下，根据设定[candidate_buf_percent_target]计算目标空闲缓冲页面个数，当候选缓冲页面不足时，每隔bgwriter_delay毫秒扫描一次10GB的缓冲区页面，当遇到脏页时把脏页刷盘后再放进候选链表，当遇到干净的页面直接放进候选链表。在许多系统上，休眠延时的有效分辨率是10毫秒。因此，设置一个不是10倍数的数值与把它设置为一个10的倍数是一样的效果。
**参数类型：**整型
**参数单位：**ms（毫秒）
**取值范围：**10 \~ 10000
**默认值：**2000（即2s）
**设置方式：** 该参数属于SIGHUP类型参数，请参考[表1](https://support.huaweicloud.com/centralized-devg-v8-gaussdb/gaussdb-40-0315.html#ZH-CN_TOPIC_0000002527988878__zh-cn_topic_0000002527058484_zh-cn_topic_0000002372412413_zh-cn_topic_0283137176_zh-cn_topic_0237121562_zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应设置方法进行设置。
**设置建议：**
- 增量checkpoint模式：数据量是[shared_buffers](https://support.huaweicloud.com/centralized-devg-v8-gaussdb/gaussdb-40-0324.html#ZH-CN_TOPIC_0000002558948753__zh-cn_topic_0000002527058222_zh-cn_topic_0000002372332765_zh-cn_topic_0283136786_zh-cn_topic_0237124699_zh-cn_topic_0059777577_s55a43fb6d0464430a59031671b37cd07)多倍时，bgwriter_delay设置值不宜大于2s；数据量比shared_buffers小时，如果为了节省I/O，bgwriter_delay可以适当调大。
- 全量checkpoint模式：保持默认值即可，但是磁盘能力差的，可以适当调大。
**设置不当的风险与影响：**请在充分理解参数含义，并经过测试验证后进行修改。
 #### candidate_buf_percent_target
**参数说明**：当增量检查点打开时，设置干净页面候选链表占整体缓冲区页面数量百分比的期望值。若当干净页面链表中的页面比例小于该值，bgwriter线程会启动，扫描缓冲区页面将干净的页面放入链表，把脏页刷盘后再放入链表。
**参数类型：**浮点型
**参数单位：**无
**取值范围**：0.1 \~ 0.85
**默认值**：0.3
**设置方式：** 该参数属于SIGHUP类型参数，请参考[表1](https://support.huaweicloud.com/centralized-devg-v8-gaussdb/gaussdb-40-0315.html#ZH-CN_TOPIC_0000002527988878__zh-cn_topic_0000002527058484_zh-cn_topic_0000002372412413_zh-cn_topic_0283137176_zh-cn_topic_0237121562_zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应设置方法进行设置。
**设置建议：** 该参数直接影响bgwriter线程刷页个数。当数据量大于[shared_buffers](https://support.huaweicloud.com/centralized-devg-v8-gaussdb/gaussdb-40-0324.html#ZH-CN_TOPIC_0000002558948753__zh-cn_topic_0000002527058222_zh-cn_topic_0000002372332765_zh-cn_topic_0283136786_zh-cn_topic_0237124699_zh-cn_topic_0059777577_s55a43fb6d0464430a59031671b37cd07)时，candidate_buf_percent_target设置过小，会影响性能。若数据量是shared_buffers的2倍及以上，该值不宜小于默认值；其他场景下，若要降低I/O，可适当调小该参数。
**设置不当的风险与影响：**请在充分理解参数含义，并经过测试验证后进行修改。
 #### bgwriter_lru_maxpages
**参数说明：**设置后端写线程每次脏页刷盘的脏页数量上限。
**参数类型：**整型
**参数单位：**无
**取值范围：**0 \~ 1000。0表示禁用后端写功能，禁用后端写功能不会对checkpoints产生影响。
**默认值：**100
**设置方式：** 该参数属于SIGHUP类型参数，请参考[表1](https://support.huaweicloud.com/centralized-devg-v8-gaussdb/gaussdb-40-0315.html#ZH-CN_TOPIC_0000002527988878__zh-cn_topic_0000002527058484_zh-cn_topic_0000002372412413_zh-cn_topic_0283137176_zh-cn_topic_0237121562_zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应设置方法进行设置。
**设置建议**：推荐使用默认值。
**设置不当的风险与影响：**请在充分理解参数含义，并经过测试验证后进行修改。
#### bgwriter_lru_multiplier
**参数说明：** 数据库内核根据当前缓冲区大小设置[shared_buffers](https://support.huaweicloud.com/centralized-devg-v8-gaussdb/gaussdb-40-0324.html#ZH-CN_TOPIC_0000002558948753__zh-cn_topic_0000002527058222_zh-cn_topic_0000002372332765_zh-cn_topic_0283136786_zh-cn_topic_0237124699_zh-cn_topic_0059777577_s55a43fb6d0464430a59031671b37cd07)，在内核实际运行业务时发现当前设置的shared_buffers过小或过大，通过调整bgwriter_lru_multiplier参数给出最优推荐值，推荐值为该参数和shared_buffers的乘积。设置为推荐值之后，在数据库重新启动时生效。
**参数类型：**浮点型
**参数单位：**无
**取值范围：**0 \~ 10
**默认值：**2
**设置方式：** 该参数属于SIGHUP类型参数，请参考[表1](https://support.huaweicloud.com/centralized-devg-v8-gaussdb/gaussdb-40-0315.html#ZH-CN_TOPIC_0000002527988878__zh-cn_topic_0000002527058484_zh-cn_topic_0000002372412413_zh-cn_topic_0283137176_zh-cn_topic_0237121562_zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应设置方法进行设置。
**设置建议**：
- 写"脏"缓存区到磁盘的数目取决于服务器最近几次使用的缓存区数目。最近使用buffers数目的平均值乘以bgwriter_lru_multiplier是为了评估下次服务器进程需要使用的buffers数目。在有足够多的干净的、可用的缓存区之前，后端写线程会一直写"脏"缓存区（每次写的缓存区数目不会超过[bgwriter_lru_maxpages]的值）。
- 设置bgwriter_lru_multiplier为1.0表示一种"实时"策略，其作用是准确预测下次写"脏"缓冲区的数目。设置为较大的值可以应对突然的需求高峰，而较小的值则可以让服务器进程执行更多的写操作。
- 设置较小的bgwriter_lru_maxpages和bgwriter_lru_multiplier，会减小后端写线程导致的额外I/O开销，但是服务器进程会发出写操作，增加了对查询的响应时间。
**设置不当的风险与影响：**请在充分理解参数含义，并经过测试验证后进行修改。
 #### pagewriter_thread_num
**参数说明**：增量检查点打开后，设置后台刷页的线程数，将按照脏页置脏的先后顺序刷盘，产生干净的缓冲区页面，并推进用于打检查点的恢复点。
**参数类型：**整型
**参数单位：**无
**取值范围**：1 \~ 16
**默认值**：4
**设置方式：** 该参数属于POSTMASTER类型参数，请参考[表1](https://support.huaweicloud.com/centralized-devg-v8-gaussdb/gaussdb-40-0315.html#ZH-CN_TOPIC_0000002527988878__zh-cn_topic_0000002527058484_zh-cn_topic_0000002372412413_zh-cn_topic_0283137176_zh-cn_topic_0237121562_zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应设置方法进行设置。
**设置建议**：推荐使用默认值。
**设置不当的风险与影响：**请在充分理解参数含义，并经过测试验证后进行修改。
#### dirty_page_percent_max
**参数说明** ：增量检查点打开后，设置脏页数量占[shared_buffers](https://support.huaweicloud.com/centralized-devg-v8-gaussdb/gaussdb-40-0324.html#ZH-CN_TOPIC_0000002558948753__zh-cn_topic_0000002527058222_zh-cn_topic_0000002372332765_zh-cn_topic_0283136786_zh-cn_topic_0237124699_zh-cn_topic_0059777577_s55a43fb6d0464430a59031671b37cd07)的最大期望百分比。达到这个设定值时，后台刷页线程将以设置的[max_io_capacity]刷脏。
**参数类型：**浮点型
**参数单位：**无
**取值范围**：0.1 \~ 1
**默认值**：0.9
**设置方式：** 该参数属于SIGHUP类型参数，请参考[表1](https://support.huaweicloud.com/centralized-devg-v8-gaussdb/gaussdb-40-0315.html#ZH-CN_TOPIC_0000002527988878__zh-cn_topic_0000002527058484_zh-cn_topic_0000002372412413_zh-cn_topic_0283137176_zh-cn_topic_0237121562_zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应设置方法进行设置。
**设置建议：**推荐使用默认值。
**设置不当的风险与影响：**请在充分理解参数含义，并经过测试验证后进行修改。
#### pagewriter_sleep
**参数说明**：增量检查点模式下，设置pagewriter刷页线程的刷脏周期。
**参数类型：**整型
**参数单位：**ms（毫秒）
**取值范围**：0 \~ 3600000
**默认值**：2000（即2s）
**设置方式：** 该参数属于SIGHUP类型参数，请参考[表1](https://support.huaweicloud.com/centralized-devg-v8-gaussdb/gaussdb-40-0315.html#ZH-CN_TOPIC_0000002527988878__zh-cn_topic_0000002527058484_zh-cn_topic_0000002372412413_zh-cn_topic_0283137176_zh-cn_topic_0237121562_zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应设置方法进行设置。
**设置建议：**不宜设置大于2s。脏页产生很快的情况下，建议设置100ms - 500ms，因为设置过大会导致redo点推进过慢，影响xlog回收。
**设置不当的风险与影响：**设置过大时，会导致刷页速度降低，redo点推进过慢，从而影响xlog回收；同时，由于停止实例时需要等待该参数设置的时间，设置过大时可能导致进程退出超时。
 #### max_io_capacity
**参数说明：**设置后端pagewriter刷页线程批量刷脏每秒的I/O上限。
**参数类型：**整型
**参数单位：**kB
**取值范围：**30720 \~ 10485760
**默认值：**512000（即500MB）
**设置方式：** 该参数属于SIGHUP类型参数，请参考[表1](https://support.huaweicloud.com/centralized-devg-v8-gaussdb/gaussdb-40-0315.html#ZH-CN_TOPIC_0000002527988878__zh-cn_topic_0000002527058484_zh-cn_topic_0000002372412413_zh-cn_topic_0283137176_zh-cn_topic_0237121562_zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应设置方法进行设置。取值不带单位，则默认为kB；取值如果要带单位，必须为kB、MB、GB。例如：max_io_capacity=512000，max_io_capacity=512000kB，max_io_capacity=500MB都表示设置max_io_capacity为500MB。
**设置建议：**根据具体业务场景和磁盘I/O能力进行设置。比如磁盘I/O带宽为500MB，建议设置带宽为500MB以内。要求更小的RTO时间或者在大容量场景，可以调大max_io_capacity，例如设置为2GB。
**设置不当的风险与影响：**设置过小时，刷脏速度慢于业务产生脏页的速度，会导致缓冲区脏页满，从而导致性能劣化。设置过大时，会导致写放大，影响存储设备寿命。
![](https://support.huaweicloud.com/centralized-devg-v8-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
**集中式（单节点1D）场景设置：**
环境内存规格大于或等于1024GB，经过专门测试调优后，最优的出口值配置为2GB。此情况不容易出现日志堆积问题，发生故障恢复较为缓慢的问题的概率显著降低。在redo点推进速度追不上日志产生速度时候，性能会因为max_io抢日志I/O而劣化约5%。
其他环境规格情况下，max_io_capacity的出口值默认为500MB。
#### enable_consider_usecount
**参数说明：**设置缓冲区的页面淘汰算法是否考虑页面冷热程度。
**参数类型：**布尔型
**参数单位：**无
**取值范围：**
- on：表示考虑页面冷热程度。
- off：表示不考虑页面冷热程度。
**默认值：**off
**设置方式：** 该参数属于SIGHUP类型参数，请参考[表1](https://support.huaweicloud.com/centralized-devg-v8-gaussdb/gaussdb-40-0315.html#ZH-CN_TOPIC_0000002527988878__zh-cn_topic_0000002527058484_zh-cn_topic_0000002372412413_zh-cn_topic_0283137176_zh-cn_topic_0237121562_zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应设置方法进行设置。
**设置建议**：建议大容量场景等频繁执行单页面淘汰的场景开启此参数。
**设置不当的风险与影响：**请在充分理解参数含义，并经过测试验证后进行修改。
#### dw_file_num
**参数说明**：设置批量双写文件的数量。
**参数类型：**整型
**参数单位：**无
**取值范围**：1 \~ 16
**默认值**：1
**设置方式：** 该参数属于POSTMASTER类型参数，请参考[表1](https://support.huaweicloud.com/centralized-devg-v8-gaussdb/gaussdb-40-0315.html#ZH-CN_TOPIC_0000002527988878__zh-cn_topic_0000002527058484_zh-cn_topic_0000002372412413_zh-cn_topic_0283137176_zh-cn_topic_0237121562_zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应设置方法进行设置。
**设置建议** ：该参数值与[pagewriter_thread_num]有关，不会大于pagewriter_thread_num。如果dw_file_num设置过大，内部会纠正为pagewriter_thread_num大小。
**设置不当的风险与影响：**请在充分理解参数含义，并经过测试验证后进行修改。
#### dw_file_size
**参数说明**：设置每个批量双写文件的大小。
**参数类型：**整型
**参数单位：**MB
**取值范围**：32 \~ 256
**默认值**：256
**设置方式：** 该参数属于POSTMASTER类型参数，请参考[表1](https://support.huaweicloud.com/centralized-devg-v8-gaussdb/gaussdb-40-0315.html#ZH-CN_TOPIC_0000002527988878__zh-cn_topic_0000002527058484_zh-cn_topic_0000002372412413_zh-cn_topic_0283137176_zh-cn_topic_0237121562_zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应设置方法进行设置。
**设置建议**：推荐使用默认值。
**设置不当的风险与影响：**请在充分理解参数含义，并经过测试验证后进行修改。
#### postmaster_parallel_init_thread_num
**参数说明：**设置数据库启动时可使用的并行线程数量。
**参数类型：**整型
**参数单位：**无
**取值范围：**1 \~ 256
**默认值：**16
**设置方式：** 该参数属于POSTMASTER类型参数，请参考[表1](https://support.huaweicloud.com/centralized-devg-v8-gaussdb/gaussdb-40-0315.html#ZH-CN_TOPIC_0000002527988878__zh-cn_topic_0000002527058484_zh-cn_topic_0000002372412413_zh-cn_topic_0283137176_zh-cn_topic_0237121562_zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应设置方法进行设置。
**设置建议：**该数值表示并行初始化的线程数量，因此建议设置值不超过（环境CPU核数量-1）。
**设置不当的风险与影响：**请在充分理解参数含义，并经过测试验证后进行修改。
