并行逻辑解码
可获得性
本特性自openGauss 3.0.0版本开始引入。
特性简介
支持多线程并行解码。
客户价值
大幅提升逻辑解码性能,解码速度由3~5MBps可提升到标准场景(16核CPU、内存128G、网络带宽 > 200MBps、表的列数为10~100、单行数据量0.1KB~1KB、DML操作以insert为主、不涉及落盘事务即单个事务中语句数量小于4096)下的100MBps。
特性描述
在使用JDBC或pg_recvlogical解码时,设置配置选项parallel-decode-num为大于1且小于等于20的值,开启并行解码特性,使用一个读取线程、多个解码线程以及一个发送线程协同进行逻辑解码操作,显著提升解码速度。
特性增强
无。
特性约束
- 当前的硬件和网络环境正常;由于逻辑日志一般为xlog的两倍,为保证xlog速度达到100MBps,I/O带宽至少保证200MBps;因为reader、decoder、sender线程均需预留资源,CPU需预留并发数+2的核数,如4并发场景需要预留6核。在实际场景中,使用备机解码即可保证需求,无需进行特殊的资源预留规划。为保证解码性能达标以及尽量降低对业务的影响,一台备机上应尽量仅建立一个并行解码连接,保证CPU、内存、带宽资源充足。
- 日志级别的guc参数wal_level = logical。
- guc参数max_replication_slots >= 每个DN所需的(物理流复制槽数+备份槽数+逻辑复制槽数)。
- 解码配置选项parallel-decode-num > 1且<= 20,指定并行的解码线程数。
- 不支持DDL语句解码。
- 不支持列存、数据页复制的解码。
- 不支持解码分布式事务,当前机制为从DN解码,无法保证分布式事务一致性解码。
- 单条元组大小不超过1GB,考虑解码结果可能大于插入数据,因此建议单条元组大小不超过500MB。
- 不支持压缩表的DML语句解码。
- GaussDB Kernel支持解码的数据类型为:INTEGER、BIGINT、SMALLILNT、TINYINT、SERIAL、SMALLSERIAL、BIGSERIAL、FLOAT、DOUBLE PRECISION、DATE、TIME[WITHOUT TIME ZONE]、TIMESTAMP[WITHOUT TIME ZONE]、CHAR(n)、VARCHAR(n)、TEXT。
- 在需要ssl连接的场景,需要前置条件保证guc参数ssl = on。
- 不支持interval partition表复制。
- 在事务中执行DDL语句后,该DDL语句与之后的语句不会被解码。
- 如需进行备机解码,需在对应主机上设置guc参数enable_slot_log = on。
- 当前不支持超大CLOB解码。
- 不允许主备,多个备机同时使用同一个复制槽解码,否则会产生数据不一致。
- 禁止在使用逻辑复制槽时在其他节点对该复制槽进行操作,删除复制槽的操作需在该复制槽停止解码后执行。
依赖关系
依赖备机解码。