GaussDB-极致RTO
GaussDB-极致RTO
可获得性
本特性自V500R001C10版本开始引入,从503.1版本开始支持备机读。
特性简介
- 支撑数据库主机重启后快速恢复的场景。
- 支撑主机与同步备机通过日志同步,加速备机回放的场景。
客户价值
当业务压力过大时,备机的回放速度跟不上主机的速度。在系统长时间的运行后,备机上会出现日志累积。当主机故障后,数据恢复需要很长时间,数据库不可用,严重影响系统可用性。
在硬件资源充足的情况下,开启极致RTO(Recovery Time Object,恢复时间目标)特性,可以减少备机的RTO,减少了主机故障后数据的恢复时间,提高了系统的可用性。
特性描述
极致RTO开关开启后,xLog日志回放建立多级流水线,提高并发度,提升日志回放速度。
采用page多版本的方式支持备机读,回放线程维护每一个page的日志链,读线程根据指定的LSN(wal日志的位置)读取对应版本的page。当查询和回放冲突时,查询超时会被取消,报错信息是"canceling statement due to conflict with recovery",错误码是40001,详细信息参见《错误码参考》的内核错误码>GAUSS-19501-- GAUSS-20000章节。当出现这种类型的报错时,业务端可根据错误码进行重试。
- 删除文件
触发条件:删除文件、reindex、truncate表等操作。
处理方案:等待max_standby_streaming_delay时间后,发送cancel消息取消冲突的查询。
- drop database
触发条件:执行删除数据库操作。
处理方案:等待max_standby_streaming_delay时间后,发送cancel消息取消冲突的查询。
- drop tablespace
触发条件:删除tablespace。
处理方案:等待max_standby_streaming_delay时间后,发送cancel消息取消冲突的查询。
- vacuum清理(仅在参数exrto_standby_read_opt开启下,会产生冲突)
触发条件:vacuum操作。
处理方案:等待max_standby_streaming_delay时间后,发送cancel消息取消冲突的查询。
- reindex database
触发条件:重建数据库索引。
处理方案:在容灾GTM_LITE模式下,等待max_standby_streaming_delay时间后,发送cancel消息取消冲突的查询。
打开备机读之后,因为需要维护历史page版本,所以会占用更多I/O。
特性增强
为了充分发挥极致RTO基于多核CPU架构对回放性能的优化效果,建议将GUC参数redo_bind_cpu_attr(该参数用于控制回放线程的绑核操作)设置为cpuorderbind 类型,例如'cpuorderbind:16-32'。绑核区间应与通过GUC参数thread_pool_attr设置的线程池绑核区间以及通过GUC参数wal_rec_writer_bind_cpu、walwriteraux_bind_cpu、wal_receiver_bind_cpu设置绑定的cpu核号错开,区间大小根据线程数要调整,建议设置为大于等于recovery_parallelism(实际回放线程个数) + 1。推荐将所有的回放线程绑定到一个numa组内,性能会更好。
特性约束
- 极致RTO采用了多个page redo线程并行加速回放进度。当备机回放追平主机,空载的情况下,单个page redo线程的CPU消耗大约在15%左右(实际值与具体硬件和参数配置相关),备机回放的总CPU消耗值 = 单个page redo线程的CPU消耗值 x page redo线程数。因为启动的更多的线程,CPU和内存的消耗都会比并行回放、串行回放要多。
- 极致RTO只关注同步备机的RTO是否满足需求。极致RTO去掉了自带的流控,统一使用recovery_time_target参数来做流控控制。
- 本特性支持备机读,由于增加了对数据页面历史版本的读取,备机上的查询性能会低于主机上的查询性能,低于并行回放备机读的查询性能,但是查询阻塞回放的情况有所缓解。
- DDL日志的回放速度远远慢于页面修改日志的回放,频繁DDL可能导致主备时延增大。
- 当节点的I/O和CPU使用过高时(建议不超过70%),回放和备机读性能会有明显下降。
- meta erp场景:
硬件规格: Intel(R) Xeon(R) Gold 5220R CPU @ 2.20GHz,754G memory,nvme *2,10GE网卡*2
业务模型: 使用erp 场景实例表cst_std_item_cost_t定义(表的个数1-20,以性能最优为准),行宽0.7k左右(以性能最优值为准)。使用jmeter等压测工具执行insert语句,单事务行数<4096(以性能最优值为准),并发85左右(以性能最优值为准),ustore表,无DDL。
日志量:<=300MB/s
主备时延: <=1s
- 极致RTO备机读在以下几种情况下会取消查询:
- 当查询时间超出了参数standby_max_query_time。
- 触发了备机读文件的强制回收。
- 当查询和回放有锁相关等冲突时,和并行回放备机读相同,取消查询由参数max_standby_streaming_delay控制。
- 在开启参数exrto_standby_read_opt的情况下,回放vacuum相关的清理日志时会发生冲突,和并行回放备机读相同,取消查询由参数max_standby_streaming_delay控制。
- 在容灾GTM_LITE模式下或单集群GTM_FREE模式、开启stream执行计划,查询和relmap类型的日志回放有冲突。
- 备机回放段页式(包括hashbucket表)物理空间收缩操作相关日志时会取消查询。
依赖关系
无。