搜公众号
推荐 原创 视频 Java开发 开发工具 Python开发 Kotlin开发 Ruby开发 .NET开发 服务器运维 开放平台 架构师 大数据 云计算 人工智能 开发语言 其它开发 iOS开发 前端开发 JavaScript开发 Android开发 PHP开发 数据库
Lambda在线 > 数据库技术杂谈 > Mariadb:delete造成的主从延迟

Mariadb:delete造成的主从延迟

数据库技术杂谈 2018-12-15
举报

现象:mysql主从延迟上万秒

分析:

1. 多次执行:show slave status\G;

 

发现一直卡在delete操作。

现在需要知道哪张表的delete操作这么慢。

2. 从库执行:show open tables where in_use>0;

 

Mariadb:delete造成的主从延迟

多次执行,发现这张表一直存在,随怀疑是该表的delete操作引起从库延迟。

现在需要找出这张表在做啥操作。

3. 从库执行:show slave status\G;

 

通过执行的主库日志位置,查找当前从库在执行的sql

4. 主库执行:show binlog events in 'mysql-bin.007232' from 305625037 limit 10;

 

找到导致主从延迟的sql语句后,需要找开发沟通,sql是做什么的,为什么这么大的删除量。

5. 和开发人员沟通结果:

A. 该表是质检表,每20分钟会从其他表中导入近3天的数据进行分析,并更新该表上的时间字段为当前时间;

B. 为避免数据主键冲突,导入前会把之前导入的数据全部delete

整个过程是这样的:删除表中近3天的数据,导入近3天的数据到该表中,并更新时间字段,每20分钟重复一次;

C. 每天最后一次只导入数据进行分析,不对数据进行删除,保留作为历史数据存在;

沟通完YLMB,还有这种操作,每三天的数据有几十万条,还这么任性的循环着玩。数据库压力大的时候延迟根本没法避免。丫丫的,问题总归是问题,还得想办法解决。

6. 解决分析:

A. 每天只会分析近3天的数据,这样可以单独建立一张表专门作为数据分析用,导入数据,分析完,删除数据,这么每20分钟循环一次。这时候的删除就不能用delete了,效率低。可以改为truncate整张表,这样速度会非常快;

B. 建立另一张表存放历史数据,每天最后一次分析完后,把数据导入历史数据表;

C. 完美

D. 解决方案有了后,就是改程序,抽个时间窗口导数据建表了。

 

7. 额外说明:

有些人可能会想到,使用分区表,按天做分区,每次truncate分区。这样做理论上可以,但是,我们出现过问题,在truncate分区的时候,整张表锁了很长时间没法操作。后怕,只能退而求其次。不过这方案也挺perfect的。


版权声明:本站内容全部来自于腾讯微信公众号,属第三方自助推荐收录。《Mariadb:delete造成的主从延迟》的版权归原作者「数据库技术杂谈」所有,文章言论观点不代表Lambda在线的观点, Lambda在线不承担任何法律责任。如需删除可联系QQ:516101458

文章来源: 阅读原文

相关阅读

举报