开发者社区> 问答> 正文

canal收集 由一条update语句更新多行 产生的binlog的速度很慢 什么原因呢?

我们有一个场景,一条update语句更新3000行(update tablename set x='xxx' where id>0 and id <3001),然后提交。发现canal收集速度明显慢于正常情况。

从mysql中查看binlog,发现一个事务里,分成了47个update_row event(因此一个update_row event包含64个行变化), 在我们的消费场景中消费时发现一个entry(rowDatas)中有64个BinlogRow。47*64正好对应3000行变化。

做了一些测试,发现当所更新的mysql行的大小比较小的时候,一条语句更新多行时,会有这种情况,收集速度也很慢。 但是mysql行比较大的时候,(更新3000行,binlog原始文件中有3000个update_row event),这个时候收集速度就正常了。

现在想了解:

1.是否是因为更新多行产生的binlog内容(一个entry包含多个行变化信息)导致 后续解析速度慢,从而收集速度变慢

2.具体什么情况下,一个update_row event会包含多个行变化

3.针对一条sql语句更新多行的场景,有没有办法提高处理性能

原提问者GitHub用户lan1994

展开
收起
绿子直子 2023-05-09 15:27:44 170 0
2 条回答
写回答
取消 提交回答
  • 参考文档:https://github.com/alibaba/canal/wiki/Performance

    原回答者GitHub用户agapple

    2023-05-10 10:42:50
    赞同 展开评论 打赏
  • CSDN全栈领域优质创作者,万粉博主;InfoQ签约博主;华为云享专家;华为Iot专家;亚马逊人工智能自动驾驶(大众组)吉尼斯世界纪录获得者

    可能有以下几个原因:

    1. Canal连接到MySQL服务器的延迟较高。如果Canal与MySQL服务器之间的网络延迟很高,那么它将需要更长的时间来接收和处理binlog事件。

    2. Canal配置不正确。如果Canal的配置不正确,例如binlog文件路径不正确、canal.properties文件中设置的参数不正确等,那么它可能会导致收集binlog的速度变慢。

    3. MySQL服务器负载过高。如果MySQL服务器正在处理大量请求或负载过高,那么它可能会影响binlog的写入速度。

    4. Canal实例本身存在性能问题。如果Canal实例本身存在性能问题,例如内存不足、CPU过载等,那么它也可能会影响binlog的写入速度。

    针对以上问题,可以采取以下措施:

    1. 检查Canal连接到MySQL服务器的延迟,优化网络连接。

    2. 检查Canal的配置是否正确,包括binlog文件路径、canal.properties文件中的参数等。

    3. 检查MySQL服务器是否负载过高,优化数据库结构或者增加服务器数量。

    4. 对Canal实例进行性能优化,例如调整内存、CPU等参数。

    2023-05-09 15:38:47
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
PolarDB-X 2.0 全局 Binlog 与备份恢复能 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载