日志回放
recovery_time_target
参数说明:备机完成日志写入和回放的流控阈值。当备机的回放完成预期时间大于此参数,主机会触发日志流控,将降低主机向备机发送日志的速率。
参数类型:整型
参数单位:s(秒)
取值范围:0 ~ 3600
- 0:表示不开启日志流控。
- 1 ~ 3600:表示备机能够在recovery_time_target时间内完成日志的写入和回放,可以保证主机与备机切换时能够在recovery_time_target完成日志写入和回放,保证备机能够快速升主机。
默认值:60
设置方式:该参数属于SIGHUP类型参数,请参见表1中对应设置方法进行设置。
设置建议:一般设置为默认值,不作调整。
设置不当的风险与影响:设置过小会影响主机的性能,例如设置为10,说明备机回放相对备机接收日志有延迟,允许延迟最大为10s,如果超过了10s,则会限制主机往备机段发送日志,对主机的性能会有限制,在主备场景下,主机的事务需要有备机日志落盘才能提交,限制了日志的发送会限制主机的事务执行影响到性能。设置过大会失去流控效果。关闭流控后,可能会出现RTO/RPO升高的情况。
recovery_max_workers
参数说明:设置并行回放线程的最大数量。当设置值大于1时,为并行回放模式。
- recovery_parse_workers和recovery_redo_workers同时为1,即不开启极致RTO,此参数才能生效。
- recovery_parse_workers或者recovery_redo_workers大于1,即开启极致RTO,此参数不生效。
参数类型:整型
参数单位:无
取值范围:0 ~ 20
默认值:
- 混合部署形态的8核CPU/64G内存规格,默认值为1;
- 独立部署形态的所有规格、混合部署形态的其他规格,默认值为4。
设置方式:该参数属于POSTMASTER类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:设置过大,会导致CPU、内存资源不足,造成回放速度降低。
recovery_parallelism
参数说明:查询并行回放线程的实际数量。
参数类型:整型
参数单位:无
取值范围:1 ~ 2147483647
默认值:4
设置方式:该参数属于POSTMASTER类型参数,但是不能直接修改。recovery_max_workers、recovery_parse_workers、recovery_redo_workers这3个参数的任意一个被修改时,recover_parallelism都将被重新计算。
设置建议:该参数为只读参数,无法修改。
设置不当的风险与影响:无
queue_item_size
参数说明:设定每个redo replay线程的任务队列最大长度。
参数类型:整型
参数单位:无
取值范围:1 ~ 65535
默认值:560
设置方式:该参数属于POSTMASTER类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:设置过大,会占用较多的内存资源。
- 开启极致RTO新框架时,请确保参数replication_type取值为1。
- 开启极致RTO新框架说明请参见表1。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示开启极致RTO新框架。
- off:表示关闭极致RTO新框架。
默认值:off
设置方式:该参数属于POSTMASTER类型参数请参见表1中对应设置方法进行设置。
设置建议:小于256U不建议开启。
设置不当的风险与影响:小于256U开启极致RTO新框架可能导致集群无法启动。
recovery_readers
- recovery_readers需要配合enable_parallel_reader、recovery_redo_workers、recovery_parse_workers、recovery_undo_workers使用。如不期望开启极致RTO新框架,请保持recovery_readers为1。
- enable_parallel_reader为on时且开启极致RTO时,recovery_readers需要大于1。若enable_parallel_reader为on、recovery_readers为1,且recovery_parse_workers或recovery_redo_workers大于1,系统会在内存中将enable_parallel_reader修改为false。
参数类型:整型
参数单位:无
取值范围:1 ~ 50
默认值:1
设置方式:该参数属于POSTMASTER类型参数,请参见表1中对应设置方法进行设置。
设置建议:不同CPU、内存和部署模式下,recovery_readers、recovery_undo_workers、recovery_parse_workers和recovery_redo_workers的设置值请参见表3。
设置不当的风险与影响:readpage线程自带解析Xlog的item,每增加一个readpage线程会增加对应的内存消耗。随着业务增加,item不足时会持续初始化item,导致内存增长。item数量存在上限,当达到上限后内存不再大幅度增长,但是item本身大小受到业务影响,超大事务等操作可能导致item本身内存膨胀,因此达到item上限后依然可能存在内存增长的情况。设置过大,会导致CPU、内存资源不足,造成回放速度降低或回放停滞。
极致RTO新框架对内存有要求,启动时会依据配置的max_process_memory和shared_buffer进行检测,计算该参数可以支撑的最大reader个数,若设置的recovery_readers大于该值,系统会在内存中将recovery_readers修改为计算后的值。
parallel_max_item_count
参数说明:设置极致RTO新框架特性中单个readpage线程可以使用的redo_item上限。该参数仅在极致RTO新框架下,即enable_parallel_reader为on时生效。
参数类型:整型
参数单位:无
取值范围:40000 ~ 400000
默认值:60000
设置方式:该参数属于POSTMASTER类型参数,请参见表1中对应设置方法进行设置。
设置建议:建议参照表3。
设置不当的风险与影响:readpage线程自带解析Xlog的item,每增加一个readpage线程会增加对应的内存消耗。随着业务增加item不足时会持续初始化item导致内存增长。item数量存在上限,当达到上限后内存不再大幅度增长,但是item本身大小受到业务影响,超大事务等操作可能导致item本身内存膨胀,故达到item上限后依然可能存在内存增长的情况。设置过大,会导致CPU、内存资源不足,造成回放性能下降。设置过小,会影响回放性能,不建议设置为100000以下的值,如因参数配置较小导致回放性能问题,需要根据机器实际配置调大此参数。
极致RTO新框架存在内存要求,启动时会依据配置的max_process_memory和shared_buffer进行检测,计算该参数可以支撑的最大reader个数,若设置的recovery_readers大于该reader,则会在内存中修改recovery_readers为计算后的reader。
recovery_undo_workers
参数说明:设置极致RTO新框架特性中undo回放线程的数量。
recovery_undo_workers需要配合enable_parallel_reader、recovery_redo_workers、recovery_parse_workers、recovery_readers使用。如果不期望开启极致RTO新框架,请保持recovery_undo_workers为1。
参数类型:整型
参数单位:无
取值范围:1 ~ 50
默认值:1
设置方式:该参数属于POSTMASTER类型参数,请参见表1中对应设置方法进行设置。
设置建议:不同CPU、内存和部署模式下,recovery_readers、recovery_undo_workers、recovery_parse_workers和recovery_redo_workers的设置值请参见表3。
设置不当的风险与影响:设置过大,会导致CPU、内存资源不足,造成回放速度降低。
recovery_parse_workers
参数说明:设置极致RTO特性中ParseRedoRecord线程的数量。
- 需要配合recovery_redo_workers使用。若recovery_parse_workers或recovery_redo_workers取值大于1,则开启极致RTO。若不希望开启极致RTO,请保持recovery_parse_workers取值为1。
- 在开启极致RTO时确保参数replication_type取值为1。
- 若同时开启极致RTO和并行回放,则极致RTO特性生效,并行回放特性失效。
参数类型:整型
参数单位:无
取值范围:1 ~ 16
默认值:
- 独立部署:
2(128核CPU/1024G内存,60核CPU/480G内存,32核CPU/256G内存,16核CPU/128G内存);1(8核CPU/64G内存,4核CPU/32G内存,4核CPU/16G内存)
设置方式:该参数属于POSTMASTER类型参数,请参见表1中对应设置方法进行设置。
设置建议:不同CPU、内存和部署模式下,recovery_parse_workers和recovery_redo_workers的设置值可参考表2。
设置不当的风险与影响:设置过大,会导致CPU、内存资源不足,造成回放速度降低。
- 打开极致RTO后,备机会额外启动的回放线程总数=recovery_parse_workers * (recovery_redo_workers + 2) + 5。回放线程越多,占用CPU、内存和I/O资源越多。请根据实际硬件配置合理设置参数,避免因为参数设置过大,导致CPU和内存占用过高,进而导致系统启动异常。混合部署场景可能对主机性能有影响。
- 在极致RTO新框架模式下,recovery_parse_workers取值范围为2~16,在该模式下若设置recovery_parse_workers为1,系统会自动在内存中将其设置为2。
recovery_redo_workers
参数说明:设置极致RTO特性中每个ParseRedoRecord线程对应的PageRedoWorker数量。recovery_redo_workers需要配合recovery_parse_workers使用,recovery_parse_workers或者recovery_redo_workers大于1,则开启极致RTO。如不期望开启极致RTO,请保持recovery_redo_workers为默认值1。
参数类型:整型
参数单位:无
取值范围:
- 极致RTO:1~8
- 极致RTO新框架:1~50
在极致RTO模式下,若设置的参数值大于8,系统会在内存中自动修正为上限值8。
默认值:
- 独立部署:
8(128核CPU/1024G内存,60核CPU/480G内存,32核CPU/256G内存);3(16核CPU/128G内存,8核CPU/64G内存);1(4核CPU/32G内存,4核CPU/16G内存)
设置方式:该参数属于POSTMASTER类型参数,请参见表1中对应设置方法进行设置。
设置建议:不同CPU、内存和部署模式下,recovery_parse_workers和recovery_redo_workers的设置值可参考表2、表3。
| 编号 | CPU个数 | 内存(GB) | 是否混合部署 | recovery_parse_workers | recovery_redo_workers | 回放线程总数 | 备注 |
|---|---|---|---|---|---|---|---|
| 1 | 4 | - | - | 1 | 1 | recovery_max_workers参数值 | 不推荐开极致RTO。 |
| 2 | 8 | - | 是 | 1 | 1 | recovery_max_workers参数值 | 不推荐开极致RTO。 |
| 3 | 8 | 64 | 否 | 1 | 3 | 10 | - |
| 4 | 16 | 128 | 是 | 1 | 2 | 9 | - |
| 5 | 16 | 128 | 否 | 2 | 3 | 15 | - |
| 6 | 32 | 256 | 是 | 2 | 2 | 13 | - |
| 7 | 32 | 256 | 否 | 2 | 8 | 25 | - |
| 8 | 64 | 512 | 是 | 2 | 4 | 17 | - |
| 9 | 64 | 512 | 否 | 2 | 8 | 25 | 大于此硬件规格的系统均参考此参数设置值。 |
| 10 | 96 | 768 | - | 2 | 8 | 25 | 大于此硬件规格的系统均参考此参数设置值。 |
| 编号 | CPU个数 | 内存(GB) | 是否混合部署 | recovery_readers | recovery_undo_workers | recovery_parse_workers | recovery_redo_workers | parallel_max_item_count | 回放线程总数 | 备注 |
|---|---|---|---|---|---|---|---|---|---|---|
| 1 | <256 | - | - | - | - | - | - | - | - | 不推荐开极致RTO新框架。 |
| 2 | 256 | 2048 | 否 | 40 | 30 | 3 | 50 | 400000 | 174 | - |
- 开启极致RTO新框架时,推荐同时设置如下参数:
- redo_bind_cpu_attr='cpuorderbind:0-255'
- standby_recycle_interval=1
- base_page_saved_interval=2000
- pagewriter_sleep=1000
- pagewriter_thread_num=6
- max_io_capacity=3GB
- 在极致RTO新框架下,若回放速度降低,可执行如下命令查看buffer情况。
select * from dbe_perf.global_candidate_status;
如果candidate_slot列的值非常小,说明buffer中干净页面很少;get_buf_clock_sweep列的值很大,说明工作线程在自行淘汰页面,此时可以通过调大shared_buffer以增加buffer数量,或者提升磁盘性能规格从而提高回放速度。
设置不当的风险与影响:设置过大,会导致CPU、内存资源不足,造成回放速度降低。
enable_page_lsn_check
参数说明:数据页lsn检查开关。回放时,检查数据页当前的lsn是否是期望的lsn。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示开启数据页lsn检查开关。
- off:表示关闭数据页lsn检查开关。
默认值:on
设置方式:该参数属于POSTMASTER类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:该参数关闭后,可能无法快速发现数据页错误,导致预期外的报错。
promote_lsn_check
参数说明:控制回放结束升主时是否校验本地日志回放完整性。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示开启本地日志回放校验机制。
- off:表示关闭本地日志回放校验机制。
默认值:on
设置方式:该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:该参数关闭后,可能无法拦截因日志故障导致的提前升主操作,进而造成数据丢失风险。
recovery_min_apply_delay
参数说明:设置备节点回放的延迟时间。
参数类型:整型
参数单位:ms(毫秒)
取值范围:0 ~ 2147483647
默认值:0(不增加延迟)
设置方式:该参数属于SIGHUP类型参数,请参见表1中对应设置方法进行设置。
设置建议:见下方须知。
设置不当的风险与影响:见下方须知。
- 此参数主节点设置无效,必须设置在需要延迟的备节点上,推荐设置在异步备节点上,设置了延时的异步备节点如果升主RTO时间会比较长。
- 延迟时间是根据主服务器上事务提交的时间戳与备机上的当前时间来计算,因此需要保证主备系统时钟一致。
- 延迟时间设置过长时,可能会导致该备机Xlog文件所在的磁盘满,需要平衡考虑磁盘大小来设置延迟时间。
- 没有事务的操作不会被延迟。
- 主备切换之后,原主机若需延迟,需要再手动配置此参数。
- 当synchronous_commit被设置为remote_apply时,同步复制会受到这个延时的影响,每一个COMMIT都需要等待备机回放结束后才会返回。
- 使用这个特性也会让hot_standby_feedback被延迟,这可能导致主服务器的膨胀,因此这两个参数同时使用时要权衡风险。
- 主机执行了持有AccessExclusive锁的DDL操作,比如DROP和TRUNCATE操作,在备机延迟回放该条记录期间,如果在备机上对该对象执行查询操作,等待锁释放之后才会返回。
dcf_truncate_dump_info_level
参数说明:用于控制dcf做日志截断(truncate)时是否打印被截断lsn及之后的lsn。
参数类型:整型
参数单位:无
取值范围:0 ~ 2
- 0:不开启。
- 1:打印被dcf截断的所有lsn内容(大于等于截断lsn的Xlog日志)。
- 2:打印被dcf截断的所有lsn内容,且当落盘lsn大于截断lsn时打印warning级别日志。
默认值:1
设置方式:该参数属于SIGHUP类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。
redo_bind_cpu_attr
参数说明:用于控制回放线程的绑核操作,仅sysadmin用户可以访问。
参数类型:字符串
参数单位:无
- "autobind":日志回放线程自动绑定到一个NUMA组, 默认绑定到最后一个NUMA组。只针对ARM服务器生效,对于x86服务器及小规格的服务器不绑核。
- "nobind":线程不做绑核。
- "nodebind: 1, 2":利用NUMA组1,2中的CPU core进行绑核。
- "cpubind: 0-30":利用0-30号CPU core进行绑核。
- "cpuorderbind: 16-32": 从16号核开始一个线程绑定一个CPU,区间内核不足就不参与绑定。建议区间大小设置为大于等于recovery_parallelism + 1。
默认值:"autobind"
设置方式:该参数属于POSTMASTER类型参数,请参见表1中对应设置方法进行设置。
设置建议:见下方说明。
设置不当的风险与影响:错误的设置会造成数据库节点无法启动。
- 本参数主要用于arm环境下的绑核操作。推荐将所有的回放线程绑定到一个NUMA组内,性能会更好,针对混合部署的场景,推荐将同一个机器上的不同节点的回放线程绑定到不同的NUMA组。非arm环境下使用NUMA绑核相关参数将导致集群启动失败。
- 通过本参数设置的绑核区间应与通过GUC参数thread_pool_attr设置的线程池绑核区间错开。
enable_wal_page_header_crc
参数说明:控制是否对wal日志页面头进行crc计算赋值和校验。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示开启wal日志页面头的crc计算赋值和校验。
- off:表示关闭wal日志页面头的crc计算赋值和校验。
默认值:on
设置方式:该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:该参数关闭后,可能无法校验wal日志页面头是否正确,进而造成备机接收到有误的wal日志,备机回放失败无法同步。