[openGauss]并行逻辑解码

并行逻辑解码

可获得性

本特性自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. 禁止在使用逻辑复制槽时在其他节点对该复制槽进行操作,删除复制槽的操作需在该复制槽停止解码后执行。

依赖关系

依赖备机解码。

详情查看:https://opengauss.org
详情查看:https://docs-opengauss.osinfra.cn

OpenGauss的增量数据迁移及并行回放方案主要依赖Debezium MySQL Connector与Kafka等技术实现,通过源端监控MySQL的binlog日志,并将这些日志信息以AVRO格式写入到Kafka中[^2]。Sink端则负责从Kafka读取这些AVRO格式的数据,并将其组装成事务,在openGauss端按照事务粒度进行并行回放。 具体来说,该方案利用了以下关键技术点: - **Debezium MySQL Connector**:作为Source端,它能够实时捕获MySQL数据库中的DDL和DML操作,并将这些操作转换为事件流。 - **Kafka**:作为中间件存储来自Source端的事件流,确保数据传输过程中的顺序性和可靠性。为了保持事务的顺序性,DDL和DML操作被路由至同一个topic下,且此topic的分区数设定为1[^2]。 - **事务粒度并行回放**:Sink端在接收到Kafka中的数据后,会根据事务来组织这些数据,并在openGauss端执行并行回放操作,以此来提高迁移效率[^2]。 此外,该方案还具备一些特性优势,如支持断点续传、迁移进度与失败SQL语句的实时上报、JDBC超时重连机制以及流量控制能力等,这些都是为了确保迁移过程的稳定性和高效性。 对于实施的具体要求,需要注意MySQL版本需为5.7及以上,并且需要正确设置MySQL的相关参数,例如`log_bin=ON`, `binlog_format=ROW`, `binlog_row_image=FULL`, `gtid_mode = ON`等[^3]。同时,在执行增量迁移之前,通常需要先完成全量迁移,可以使用chameleon工具来进行全量迁移[^3]。 ### 实现细节 在高性能运行方面,可以在Kunpeng-920 2p openEuler机器上执行特定命令启动迁移程序,例如: ```shell cd online-migration-mysql2openGauss-3.1.0 numactl -C 0-31 -m 0 java -Xms15G -Xmx25G -jar ./online-migration-mysql-3.1.0.jar ``` 此命令设置了Java虚拟机的内存大小,并指定了NUMA节点绑定策略,旨在优化迁移过程中的性能表现[^3]。 ### 注意事项 - 当前方案支持MySQL的IUD操作(insert、update、delete)产生的增量数据迁移至openGauss。 - 支持迁移openGauss数据库兼容的MySQL DDL语句,对于不兼容的DDL,迁移时会报错处理。 - 不支持skip_event, limit_table, skip_table等设置,以保证事务的顺序和一致性。 - 增量迁移支持的数据类型涵盖了数值类型、字符类型、时间类型以及二进制类型等多种常用数据类型[^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值