-
Notifications
You must be signed in to change notification settings - Fork 7.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
canal收集 由一条update语句更新多行 产生的binlog的速度很慢 什么原因呢? #267
Comments
这个之前没有刻意关注过,你关注到慢有一些具体的数据么?比如评估tps大概是多少? |
相同配置的情况下,一条sql语句只影响一行的情况下,大概每秒能收集7MB原始binlog文件,这种一条sql语句影响多行的会特别慢,我当时测一条sql语句更新3000行,大概每秒只能收集0.5MBbinlog文件。。 |
@lan1994 你那个问题解决了吗?我们也遇到类似的问题 |
@pan289091315 没解决 |
mysql配置如下参数:innodb_flush_log_at_trx_commit |
@wufengbin 你提的这个参数是解决mysql批量写入慢的问题,但是这里提到的是canal解析慢的问题。在预写入mysql完毕后,才测试解析性能的。 |
@lan1994 请问解决了吗? |
倒是可以先执行一个大事务,然后canal回溯到事务执行之前进行验证,从我这边的测试来看,基本都是可以满足基本性能 |
@lan1994 问题原因找到了没?兄弟 |
我这边也遇到了这个问题,一条update语句更新了9万条数据,canal-client迟迟收不到要消费的数据,我用的docker版的server @agapple |
我也遇到了这个情况,一条update更新了1万8条数据,但是同步2-3秒同步32条数据。一万多条数据同步了两三个小时。请问是什么原因 |
解决了。instance.properties 中canal.mq.partitionsNum参数,设置得太大,要跟kafka topic实际的分区数一致 |
我们有一个场景,一条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语句更新多行的场景,有没有办法提高处理性能
The text was updated successfully, but these errors were encountered: