连续模式下表无主键造成mysql从库延迟怎么处理

  

下文主要给大家带来行模式下表无主键造成mysql从库延迟怎么处理,希望这些内容能够带给大家实际用处,这也是我编辑行模式下表无主键造成mysql从库延迟怎么处理这篇文章的主要目的。好了,废话不多说,大家直接看下文吧。

场景:
MySQL-5.6.30,主从架构,,只读从库的SQL线程卡在某一个事务两个多小时没有动过,显示processlist发现从库当时没有连接和慢查询语句;
显示开放的表,In_use祝辞0;发现一个表被锁定如下:

 mysql>显示打开表,In_use祝辞0;
  + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - +
  | |数据库表,,,,| In_use | Name_locked |
  + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - +
  | cxx,,,| t_post_xxxxxx |,,1 |大敌;,,,,0 |
  + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - + 

结论
从库没有线程,说明锁定的表是从主库同步过来的语句锁定的,应该是主库对此表的大事务操作造成。
分析
1。通过显示奴隶状态确定的位置去分析主库的binlog,发现生成了大量的删除t_post_xxxxxx的语句;
2。查看慢查询日志,发现删除,t_post_xxxxxx;
3。在主库查看t_post_xxxxxx表结构,发现竟然没有主键也没有索引;
4。select count (*), t_post_xxxxxx;发现此表20多万条数据;
5。真相大白了,没有主键直接删除删除全表会生成20多万条删除语句在binlog中,没有主键同步到从库需要执行20多万次全表扫描,20 w * 20 w=400多亿,吓的人!;
6。MySQL同步的时候,会去利用主键来搜索需要修改的行(或者是一些二级索引)。
解决方案
1。增加主键;
2。跟研发沟通删除从t_post_xxxxxx改表t_post_xxxxxx为截断。
综上
由于没有统一数据库上线平台和代码审核机制,造成一些不规范的代码以及数据库设计在生产运行。建议上线使用规范化的数据库上线平台,由平台自动发现数据库设计,数据库上线脚本问题,靠人肉上线难免会有疏漏,自动化运维势在必行,研发团队要使用代码规范检查工具避免不规范的代码上线。

对于以上关于行模式下表无主键造成mysql从库延迟怎么处理,大家是不是觉得非常有帮助。如果需要了解更多内容,请继续关注我们的行业资讯,相信你会喜欢上这些内容的。

  

连续模式下表无主键造成mysql从库延迟怎么处理