分析数据库Seconds_Behind_Master延迟的原因

发布时间:2021-11-08 10:44:08 作者:iii
来源:亿速云 阅读:228

本篇内容主要讲解“分析数据库Seconds_Behind_Master延迟的原因”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“分析数据库Seconds_Behind_Master延迟的原因”吧!

一、总结

(1)第一类:

这一类延迟情况可能造成服务器有较高的负载,可能是CPU/IO的负载。因为从库在实际执行Event,如果我们服务器的负载比较高应该考虑这几种情况。

(2)第二类:

这一类延迟情况往往不会造成服务器有较高的负载。它们要么没有实际的执行Event,要么就是做了特殊的操作造成的。

二、相关测试

因为上面的延迟情形很多我们都已经测试和讲述过了。下面我们测试锁造成的延迟情形。

(1)Innodb层的行锁造成的延迟

这个很容测试,我只要先在从库做一个事务和SQL线程修改的数据相同即可以出现,大概测试如下:

从库:
mysql> begin;
Query OK, 0 rows affected (0.00 sec)
mysql> delete from tmpk;
Query OK, 4 rows affected (0.00 sec)
不要提交
主库执行同样的语句
mysql> delete from tmpk;
Query OK, 4 rows affected (0.30 sec)

这个时候你会观察到延迟如下:

分析数据库Seconds_Behind_Master延迟的原因

如果查看sys.innodb_lock_waits能看到如下的结果:

分析数据库Seconds_Behind_Master延迟的原因

当然如果查看INNODB_TRX也可以观察到事务的存在,这里就不截图了,大家可以自己试试。

(2)MySQL层的MDL LOCK造成的延迟

这种情况也非常容易测试,我们只需要开启一个事务做一个select,然后主库对同样的表做DDL就可以出现如下:

从库:
mysql> begin;
Query OK, 0 rows affected (0.00 sec)
mysql> 
mysql> 
mysql> select * from tkkk limit 1;
+------+------+------+
| a    | b    | c    |
+------+------+------+
|    3 |    3 |  100 |
+------+------+------+
1 row in set (0.00 sec)
不要提交,表上MDL LOCK就不会释放
主库执行语句:
mysql> alter table tmpk add testc int ;
Query OK, 0 rows affected (1.14 sec)
Records: 0  Duplicates: 0  Warnings: 0

这个时候你将会看到如下的信息:

分析数据库Seconds_Behind_Master延迟的原因

我们可以通过state看到这是等待MDL lock获取而导致的延迟

三、总结

通过整个系列,我们应该清楚了Seconds_Behind_Master计算的方法,同时如果出现了延迟,我们首先查看从库是否有负载,根据是否有负载进行区别对待,注意这里的负载一定要使用top -H查看io/sql/woker线程的负载。我曾不止一次的遇到朋友问我延迟问题,当我问他负载如何的时候他告诉我负载不高啊整体负载也就不到2,这里我们应该注意的是对于一个线程只能使用到一个CPU核,虽然整体负载不到2但是可能io/sql/worker线程已经跑满了,实际上负载已经很高了,我们来看下面的这个截图就是sql线程负载高的截图如下:

分析数据库Seconds_Behind_Master延迟的原因

这个截图我们发现虽然整体负载不高在1多一点,但是Lwp号20092的线程已经跑满了,这个线程就是我们的sql线程,这个时候出现延迟是很可能的,这个截图正是来自一个没有合理使用主键或者唯一键造成的延迟的案例。

我们查看CPU负载应该使用top -H去查看,查看io负载可以使用iotop,iostat等工具。我需要强调一下看MySQL负载的时候我们必须用线程的眼光去看。

到此,相信大家对“分析数据库Seconds_Behind_Master延迟的原因”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

推荐阅读:
  1. 主从复制延迟原因剖析!
  2. MySQL的数据库乱码原因分析

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

数据库

上一篇:win10迈克菲怎么卸载

下一篇:Linux服务器如何实现安全初始化Shell脚本

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》