并行逻辑解码

可获得性

本特性自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的值,开启并行解码特性,使用一个读取线程、多个解码线程以及一个发送线程协同进行逻辑解码操作,显著提升解码速度。

特性增强

无。

特性约束

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

依赖关系

依赖备机解码。