懒惰胚
2025 年5 月 9 日 11:28
#1
【 使用环境 】 测试环境
【 OB or 其他组件 】OMS
【 使用版本 】4.2.7_CE
【问题描述】 使用 OMS 配置 PGtoOB 的增量同步任务时, 当单次事务变更数据量超过一定数量,比如 100W 时, 数据未成功同步,且之后的任何变更都无法被同步。但是任务中的Store和Incr-Sync组件运行正常,只是当前拉取点位的时间不再变动,延迟时间持续增加。
日志中也只提示 :there is no data changed in the specified table of source postgresql-server.
OMS是否有参数或者配置来限制单次处理的行数或数据占用量?
PG 数据库为 15.3
【备注】基于 LLM 和开源文档 RAG 的论坛小助手已开放测试,在发帖时输入 [@论坛小助手 ] 即可召唤小助手,欢迎试用!
论坛小助手
2025 年5 月 9 日 11:29
#3
根据文档库中的信息,OMS 社区版确实存在对单次处理数据量的限制,尤其是在增量同步场景下。以下是针对您问题的具体分析和解答:
1. OMS 是否会限制增量同步中单次处理的数据量?
是的,OMS 社区版在增量同步过程中会对单次处理的数据量进行限制。这种限制主要体现在以下几个方面:
Kafka 消息大小限制
根据文档片段 7 的描述,如果单次事务变更的数据量过大(例如超过 Kafka Server 的默认限制 message.max.bytes
),可能会导致 RecordTooLargeException
错误。默认情况下,Kafka Client 的最大消息大小为 1GB (max.request.size
),而 Kafka Server 的默认限制为 1MB (message.max.bytes
)。如果您的单次事务变更数据量超过这些限制,可能会导致数据无法成功同步。
内存与并发限制
文档片段 10 提到,OMS 的性能调优参数中涉及源端和目标端的并发配置 (source.workerNum
和 sink.workerNum
) 以及 JVM 内存配置 (coordinator.connectorJvmParam
)。如果单次事务变更的数据量过大,可能会超出 OMS 的内存或线程处理能力,从而导致任务停滞。
事务大小限制
虽然 OceanBase 数据库本身对大事务没有明确的大小限制(见文档片段 6),但在实际使用中,过大的事务可能会导致内存使用激增,进而影响 OMS 的正常运行。
2. 为什么会出现“there is no data changed in the specified table of source postgresql-server”的提示?
根据您的描述,任务中的 Store 和 Incr-Sync 组件运行正常,但拉取点位的时间不再变动,延迟时间持续增加。这可能是因为以下原因:
3. 如何解决此问题?
以下是针对您问题的解决方案:
(1) 调整 Kafka 参数
(2) 优化事务大小
在 PostgreSQL 源端,尽量避免单次事务包含过多的数据变更。可以通过分批提交事务来减少单次变更的数据量。
在 OMS 配置中,启用 skipErrorCode
参数跳过特定错误码(如 RecordTooLargeException
)。例如:skipErrorCode: [1]
(3) 调整 OMS 性能参数
(4) 监控任务状态
在 OMS 的 增量同步页面 ,实时查看任务的延迟时间、同步流量和 RPS 等指标(见文档片段 4)。
如果任务因数据量过大而进入异常状态,可以尝试暂停并恢复任务(见文档片段 5 和 9)。
4. 总结
OMS 社区版确实会对增量同步中单次处理的数据量进行限制,主要体现在 Kafka 消息大小、内存使用和事务大小等方面。针对您的问题,建议从以下几个方面入手:
调整 Kafka 参数以支持更大的消息大小;
优化 PostgreSQL 源端的事务大小;
调整 OMS 的性能参数以提升处理能力;
实时监控任务状态并及时排查异常。
如果上述方法仍无法解决问题,建议联系 OceanBase 的技术支持团队以获取进一步帮助。
检索到的文档如下:
创建 OceanBase 社区版至 RocketMQ 的数据同步任务
查看和修改同步对象
批量操作数据同步任务
查看数据同步任务的详情
启动和暂停数据同步任务
事务相关规范
OMS 社区版错误码
迁移 HBase 数据库的数据至 OBKV
OMS 社区版问题排查手册
1 个赞
论坛小助手
2025 年5 月 9 日 13:39
#5
根据文档库中的信息,如果您希望设置 OceanBase 组件进程限制数量为默认的平稳选项,可以参考以下内容:
1. 进程限制的相关配置
OceanBase 数据库的进程涉及多个资源限制参数,包括线程最大栈空间大小(Stack)、最大文件句柄数(Open Files)和 core 文件大小(Core File Size)。这些限制可以通过以下两种方式配置(见文档片段 1):
会话级别修改
在启动时通过命令行临时修改。例如:
ulimit -n 65535 # 设置最大文件句柄数
ulimit -s 65536 # 设置线程最大栈空间大小
ulimit -c unlimited # 设置 core 文件大小为不限制
全局级别修改
通过配置文件 /etc/security/limits.conf
永久生效。例如:
oceanbase soft nofile 65535
oceanbase hard nofile 65535
oceanbase soft stack 65536
oceanbase hard stack 65536
oceanbase soft core unlimited
oceanbase hard core unlimited
2. 默认的平稳选项
为了确保 OceanBase 数据库运行平稳,默认的资源限制建议如下:
最大文件句柄数
默认值为 65535
,适用于大多数生产环境。如果您的系统资源充足,可以适当增加该值。
线程最大栈空间大小
默认值为 65536 KB
(即 64 MB),适用于大多数场景。如果您的系统中线程数较多,可以适当降低该值以节省内存。
core 文件大小
默认值为 unlimited
,允许生成完整的 core 文件以便于调试。如果不需要调试功能,可以将其设置为 0
。
3. 总结
为了设置组件进程限制数量为默认的平稳选项,建议按照以下配置进行调整:
# 会话级别修改
ulimit -n 65535 # 最大文件句柄数
ulimit -s 65536 # 线程最大栈空间大小
ulimit -c unlimited # core 文件大小
# 全局级别修改(写入 /etc/security/limits.conf)
oceanbase soft nofile 65535
oceanbase hard nofile 65535
oceanbase soft stack 65536
oceanbase hard stack 65536
oceanbase soft core unlimited
oceanbase hard core unlimited
如果您的系统环境特殊(例如资源受限或高并发场景),可以根据实际需求调整上述参数值。
如果您需要进一步优化或有其他疑问,请提供更多背景信息,我将尽力为您解答!
详情请参考:
(可选)配置 limits.conf
writing_throttling_trigger_percentage
设置并行执行参数
writing_throttling_maximum_duration
minor_merge_concurrency
CREATE MATERIALIZED VIEW LOG
merge_thread_count
OceanBase 数据库多租户线程
location_refresh_thread_count
(小助手的答复已结束,如未能解决您的问题,请继续提问并等待其他同学的回复,谢谢!)
懒惰胚
2025 年5 月 9 日 18:21
#8
当变更数据量达到一定值的时候,比如 100W 行。
增量拉取和增量同步组件的拉取点位都不会发生改变。
但是PG数据已经修改了,且事务已经提交,PG 中查询数据已变更和插入完成。
而且之后的所有变更,不管数据量,都不会同步到 OB 中。组件的位点时间一直不变。