复制延迟(Seconds_Behind_Master)测试

测试环境: MySQL 5.7.19

测试主从时间差:

检查主从系统时间差,同时在主库和从库执行SELECT NOW()语句:
主库:-- ::
从库:-- ::
从库比主库提前14秒,主从时间差14秒。

在主库上执行(使用基于语句格式复制):

select now();
update tb003 set c1=SLEEP() where id=;
select now();

主库上上执行效果:

mysql> select now();
+---------------------+
| now() |
+---------------------+
| -- :: |
+---------------------+
row in set (0.00 sec) mysql> update tb003 set c1=SLEEP() where id=;
Query OK, row affected, warning (20.06 sec)
Rows matched: Changed: Warnings: mysql> select now();
+---------------------+
| now() |
+---------------------+
| -- :: |
+---------------------+
row in set (0.00 sec)

主库上生成的binlog解析结果:

# :: server id   end_log_pos  CRC32 0xcf2313f1     GTID    last_committed=    sequence_number=    rbr_only=no
SET @@SESSION.GTID_NEXT= '025fd638-89ea-11e9-a749-40f2e9cf3aaa:9'/*!*/;
# at
# :: server id end_log_pos CRC32 0xa14a2bcb Query thread_id= exec_time= error_code=
SET TIMESTAMP=/*!*/;
BEGIN
/*!*/;
# at
# :: server id end_log_pos CRC32 0xc283c9af Query thread_id= exec_time= error_code=
use `db001`/*!*/;
SET TIMESTAMP=/*!*/;
update tb003 set c1=SLEEP() where id=
/*!*/;
# at
# :: server id end_log_pos CRC32 0x0f3bdc57 Xid =
COMMIT/*!*/;

从库上relay log解析结果:

BINLOG '
+zwQXQ+4ohgAdwAAAAAAAAAgAAQANS43LjE5LWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAEzgNAAgAEgAEBAQEEgAAXwAEGggAAAAICAgCAAAACgoKKioAEjQA
Af0UlBk=
'/*!*/;
# at
# :: server id end_log_pos CRC32 0xcf2313f1 GTID last_committed= sequence_number= rbr_only=no
SET @@SESSION.GTID_NEXT= '025fd638-89ea-11e9-a749-40f2e9cf3aaa:9'/*!*/;
# at
# :: server id end_log_pos CRC32 0xa14a2bcb Query thread_id= exec_time= error_code=
SET TIMESTAMP=/*!*/;
BEGIN
/*!*/;
# at
# :: server id end_log_pos CRC32 0xc283c9af Query thread_id= exec_time= error_code=
use `db001`/*!*/;
SET TIMESTAMP=/*!*/;
update tb003 set c1=SLEEP() where id=
/*!*/;
# at
# :: server id end_log_pos CRC32 0x0f3bdc57 Xid =
COMMIT/*!*/;

从库上生成binlog解析结果(从库上默认binlog_format=row):

# :: server id   end_log_pos  CRC32 0x6e1a971f     GTID    last_committed=    sequence_number=    rbr_only=yes
/*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/;
SET @@SESSION.GTID_NEXT= '025fd638-89ea-11e9-a749-40f2e9cf3aaa:9'/*!*/;
# at
# :: server id end_log_pos CRC32 0x063cd6ca Query thread_id= exec_time= error_code=
SET TIMESTAMP=/*!*/;
BEGIN
/*!*/;
# at
# :: server id end_log_pos CRC32 0x405b61c7 Rows_query
# update tb003 set c1=SLEEP() where id=
# at
# :: server id end_log_pos CRC32 0x015803f1 Table_map: `db001`.`tb003` mapped to number
# at
# :: server id end_log_pos CRC32 0xb59069f9 Update_rows: table id flags: STMT_END_F BINLOG '
Ij0QXR24ohgAQAAAAIwBAACAACh1cGRhdGUgdGIwMDMgc2V0IGMxPVNMRUVQKDIwKSB3aGVyZSBp
ZD0xx2FbQA==
Ij0QXRO4ohgANAAAAMABAAAAAOgAAAAAAAEABWRiMDAxAAV0YjAwMwADCAMRAQAC8QNYAQ==
Ij0QXR+4ohgARgAAAAYCAAAAAOgAAAAAAAEAAgAD///4AQAAAAAAAAABAAAAXRA89fgBAAAAAAAA
AAAAAABdED0i+WmQtQ==
'/*!*/;
### UPDATE `db001`.`tb003`
### WHERE
### @= /* LONGINT meta=0 nullable=0 is_null=0 */
### @= /* INT meta=0 nullable=1 is_null=0 */
### @= /* TIMESTAMP(0) meta=0 nullable=0 is_null=0 */
### SET
### @= /* LONGINT meta=0 nullable=0 is_null=0 */
### @= /* INT meta=0 nullable=1 is_null=0 */
### @= /* TIMESTAMP(0) meta=0 nullable=0 is_null=0 */
# at
# :: server id end_log_pos CRC32 0xae037515 Xid =
COMMIT/*!*/;

无论时主库binlog事件中还是从库relaylog事件以及从库binlog事件中记录的时间都是事务语句执行开始时间:

SET TIMESTAMP=/*!*/;

SELECT FROM_UNIXTIME();
+---------------------------+
| FROM_UNIXTIME() |
+---------------------------+
| -- :: |
+---------------------------+

exec_time计算:The time from when the query started to when it was logged in the binlog, in seconds.

1、由于SQL语句中使用函数SLEEP(20),因此SQL语句执行时间=SLEEP(20)的执行时间+UPDATE操作的执行时间,而UPDATE操作的执行时间在10ms以内,因此整个SQL语句在主库的执行时间=20S,因此主库binlog的中记录exec_time=20

2、从库的relaylog用来存放主库传递过来的binlog,因此从库relaylog与主库binlog相同,从库relaylog中记录也是exec_time=20

3、由于主库使用binlog_format=statement的复制格式,因此SQL语句被传递到从库并原样执行,同样执行需要20S,但该语句在主库的开始执行时间(the query started)为2019-06-24 11:01:54,而在从库执行结束时间(log in binlog)为2019-06-24 11:02:48,因此从库binlog中记录时间exec_time=54,忽略主从事务日志落盘和网络传输时间,exec_time=54S=主库语句执行时间(20)+从库语句执行时间(20S)+主从时间差(14S)。

在主库上执行(使用基于行格式复制):

mysql> select now();
+---------------------+
| now() |
+---------------------+
| -- :: |
+---------------------+
row in set (0.00 sec) mysql> update tb003 set c1=SLEEP() where id in (,);
Query OK, rows affected (40.04 sec)
Rows matched: Changed: Warnings: mysql> select now();
+---------------------+
| now() |
+---------------------+
| -- :: |
+---------------------+
row in set (0.00 sec)

产生的binlog解析结果为:

# at
# :: server id end_log_pos CRC32 0x037e9b24 GTID last_committed= sequence_number= rbr_only=yes
/*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/;
SET @@SESSION.GTID_NEXT= '025fd638-89ea-11e9-a749-40f2e9cf3aaa:65'/*!*/;
# at
# :: server id end_log_pos CRC32 0xe186daee Query thread_id= exec_time= error_code=
SET TIMESTAMP=/*!*/;
BEGIN
/*!*/;
# at
# :: server id end_log_pos CRC32 0x9f76a54a Rows_query
# update tb003 set c1=SLEEP() where id in (,)
# at
# :: server id end_log_pos CRC32 0x139892d9 Table_map: `db001`.`tb003` mapped to number
# at
# :: server id end_log_pos CRC32 0xf7980c93 Update_rows: table id flags: STMT_END_F BINLOG '
ZW0RXR24ohgARwAAAPYCAACAAC91cGRhdGUgdGIwMDMgc2V0IGMxPVNMRUVQKDIwKSB3aGVyZSBp
ZCBpbiAoMyw0KUqldp8=
ZW0RXRO4ohgANAAAACoDAAAAAGwAAAAAAAEABWRiMDAxAAV0YjAwMwADCAMRAQAC2ZKYEw==
ZW0RXR+4ohgAaAAAAJIDAAAAAGwAAAAAAAEAAgAD///4AwAAAAAAAAABAAAAXRFrW/gDAAAAAAAA
AAAAAABdEW1l+AQAAAAAAAAAAQAAAF0Ra1v4BAAAAAAAAAAAAAAAXRFtZZMMmPc=
'/*!*/;
### UPDATE `db001`.`tb003`
### WHERE
### @= /* LONGINT meta=0 nullable=0 is_null=0 */
### @= /* INT meta=0 nullable=1 is_null=0 */
### @= /* TIMESTAMP(0) meta=0 nullable=0 is_null=0 */
### SET
### @= /* LONGINT meta=0 nullable=0 is_null=0 */
### @= /* INT meta=0 nullable=1 is_null=0 */
### @= /* TIMESTAMP(0) meta=0 nullable=0 is_null=0 */
### UPDATE `db001`.`tb003`
### WHERE
### @= /* LONGINT meta=0 nullable=0 is_null=0 */
### @= /* INT meta=0 nullable=1 is_null=0 */
### @= /* TIMESTAMP(0) meta=0 nullable=0 is_null=0 */
### SET
### @= /* LONGINT meta=0 nullable=0 is_null=0 */
### @= /* INT meta=0 nullable=1 is_null=0 */
### @= /* TIMESTAMP(0) meta=0 nullable=0 is_null=0 */
# at
# :: server id end_log_pos CRC32 0x1f65c801 Xid =
COMMIT/*!*/;

在主库上执行(使用基于行格式复制+两条语句组合事务操作):

mysql> select now();
+---------------------+
| now() |
+---------------------+
| -- :: |
+---------------------+
row in set (0.00 sec) mysql> begin;
Query OK, rows affected (0.00 sec) mysql> update tb003 set c1=SLEEP() where id =;
Query OK, row affected (20.00 sec)
Rows matched: Changed: Warnings: mysql> update tb003 set c1=SLEEP() where id =;
Query OK, row affected (20.00 sec)
Rows matched: Changed: Warnings: mysql> commit;
Query OK, rows affected (0.05 sec) mysql> select now();
+---------------------+
| now() |
+---------------------+
| -- :: |
+---------------------+
row in set (0.00 sec)

产生的binlog解析结果为:

# at
# :: server id end_log_pos CRC32 0x5a8cb5f0 GTID last_committed= sequence_number= rbr_only=yes
/*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/;
SET @@SESSION.GTID_NEXT= '025fd638-89ea-11e9-a749-40f2e9cf3aaa:66'/*!*/;
# at
# :: server id end_log_pos CRC32 0x5217a928 Query thread_id= exec_time= error_code=
SET TIMESTAMP=/*!*/;
BEGIN
/*!*/;
# at
# :: server id end_log_pos CRC32 0x1a70cac7 Rows_query
# update tb003 set c1=SLEEP() where id =
# at
# :: server id end_log_pos CRC32 0x4cf6d8c7 Table_map: `db001`.`tb003` mapped to number
# at
# :: server id end_log_pos CRC32 0x033f26f8 Update_rows: table id flags: STMT_END_F BINLOG '
HHERXR24ohgAQQAAAHwEAACAACl1cGRhdGUgdGIwMDMgc2V0IGMxPVNMRUVQKDIwKSB3aGVyZSBp
ZCA9NcfKcBo=
HHERXRO4ohgANAAAALAEAAAAAGwAAAAAAAEABWRiMDAxAAV0YjAwMwADCAMRAQACx9j2TA==
HHERXR+4ohgARgAAAPYEAAAAAGwAAAAAAAEAAgAD///4BQAAAAAAAAABAAAAXRDBV/gFAAAAAAAA
AAAAAABdEXEc+CY/Aw==
'/*!*/;
### UPDATE `db001`.`tb003`
### WHERE
### @= /* LONGINT meta=0 nullable=0 is_null=0 */
### @= /* INT meta=0 nullable=1 is_null=0 */
### @= /* TIMESTAMP(0) meta=0 nullable=0 is_null=0 */
### SET
### @= /* LONGINT meta=0 nullable=0 is_null=0 */
### @= /* INT meta=0 nullable=1 is_null=0 */
### @= /* TIMESTAMP(0) meta=0 nullable=0 is_null=0 */
# at
# :: server id end_log_pos CRC32 0x3b3202fa Rows_query
# update tb003 set c1=SLEEP() where id =
# at
# :: server id end_log_pos CRC32 0x8b013c05 Table_map: `db001`.`tb003` mapped to number
# at
# :: server id end_log_pos CRC32 0xf7d67996 Update_rows: table id flags: STMT_END_F BINLOG '
MHERXR24ohgAQQAAADcFAACAACl1cGRhdGUgdGIwMDMgc2V0IGMxPVNMRUVQKDIwKSB3aGVyZSBp
ZCA9NvoCMjs=
MHERXRO4ohgANAAAAGsFAAAAAGwAAAAAAAEABWRiMDAxAAV0YjAwMwADCAMRAQACBTwBiw==
MHERXR+4ohgARgAAALEFAAAAAGwAAAAAAAEAAgAD///4BgAAAAAAAAABAAAAXRB9NvgGAAAAAAAA
AAAAAABdEXEwlnnW9w==
'/*!*/;
### UPDATE `db001`.`tb003`
### WHERE
### @= /* LONGINT meta=0 nullable=0 is_null=0 */
### @= /* INT meta=0 nullable=1 is_null=0 */
### @= /* TIMESTAMP(0) meta=0 nullable=0 is_null=0 */
### SET
### @= /* LONGINT meta=0 nullable=0 is_null=0 */
### @= /* INT meta=0 nullable=1 is_null=0 */
### @= /* TIMESTAMP(0) meta=0 nullable=0 is_null=0 */
# at
# :: server id end_log_pos CRC32 0x8b074201 Xid =
COMMIT/*!*/;

可以发现上面两个操作都执行了40秒,但在事务开始前(BEGIN)的exec_time都仅为20,且事务内部单个操作没有exec_time。

ev->exec_time的计算在sql/log_event.cc中的代码如下:

  /*
exec_time calculation has changed to use the same method that is used
to fill out "thd_arg->start_time"
*/ struct timeval end_time;
ulonglong micro_end_time= my_micro_time();
my_micro_time_to_timeval(micro_end_time, &end_time); exec_time= end_time.tv_sec - thd_arg->start_time.tv_sec;

exec_time在文件sql/log_event.h中的注解如下:

  <tr>
<td>exec_time</td>
<td>4 byte unsigned integer</td>
<td>The time from when the query started to when it was logged in the binlog, in seconds.</td>
</tr>

MySQL Replication--复制延迟02--exec_time测试的更多相关文章

  1. 浅谈MySQL Replication(复制)基本原理

    1.MySQL Replication复制进程MySQL的复制(replication)是一个异步的复制,从一个MySQL instace(称之为Master)复制到另一个MySQL instance ...

  2. mysql replication 复制的一些问题

    1   过大的复制延迟 mysql 的复制延迟是一个常见问题,现在已经有一些解决方案,如淘宝开发的一些工具 2 没有磁盘空间 复制导致磁盘空间塞满,二进制日志.中继日志或临时文件把磁盘塞满,slave ...

  3. 在Docker平台实现MySQL Replication(复制)

    MySQL Replication提供了数据库之间复制数据的功能,通过这个功能可以让一个数据库的数据更改自动同步到另外一个数据库.通常用这个功能来实现数据备份.数据容灾.数据冗余,进一步实现数据的读写 ...

  4. mysql cp复制和mysqldump备份测试

    本文来自我的github pages博客http://galengao.github.io/ 即www.gaohuirong.cn 备份策略 针对不同的场景下, 我们应该制定不同的备份策略对数据库进行 ...

  5. Windows 下MySql Replication(复制)配置

    环境准备 到官网下载mysql-installer-web-community-5.7.21.0.msi并安装,选择MySql Workbench,记录安装时root输入的密码. 需要安装在两台机器上 ...

  6. 你遇到过哪些原因造成MySQL异步复制延迟?

    master上多为并发事务,salve上则多为单线程回放(MySQL 5.7起,支持真正的并行回放,有所缓解) 异步复制,本来就是有一定延迟的(否则也不叫做异步了,介意的话可以改成半同步复制) sla ...

  7. MySQL异步复制延迟解决

    http://www.ttlsa.com/mysql/mysql-5-7-enhanced-multi-thread-salve/

  8. 浅析 MySQL Replication(本文转自网络,非本人所写)

    作者:卢飞 来源:DoDBA(mysqlcode) 0.导读 本文几乎涵盖了MySQL Replication(主从复制)的大部分知识点,包括Replication原理.binlog format.复 ...

  9. 浅析 MySQL Replication(转)

    目前很多公司中的生产环境中都使用了MySQL Replication ,也叫 MySQL 复制,搭建配置方便等很多特性让 MySQL Replication 的应用很广泛,我们曾经使用过一主拖20多个 ...

  10. 浅析 MySQL Replication(本文转自网络)

    作者:卢飞 来源:DoDBA(mysqlcode) 0.导读 本文几乎涵盖了MySQL Replication(主从复制)的大部分知识点,包括Replication原理.binlog format.复 ...

随机推荐

  1. Java的面向对象的原则

    1.单一职责原则: /* * (有且只有一个引起功能变化的原因) * 如果在一个类中,承载的功能越多. * 交融的耦合性越高,被复用的可能性越低. * 耦合性高的话,当一个类的职责发生变化的时候,会引 ...

  2. IPv4分类

    IPv4地址按逻辑层次分为五类 A类 保留给政府机构 A类地址第1字节为网络地址,其它3个字节为主机地址.它的第1个字节的第一位固定为0. A类地址网络号范围:1.0.0.0 - 126.0.0.0 ...

  3. Qt开发经验小技巧61-70

    很多人问Qt嵌入式平台用哪个好,这里统一回答(当前时间节点2018年):imx6+335x比较稳定,性能高就用RK3288 RK3399,便宜的话就用全志H3,玩一玩可以用树莓派香橙派. 对于大段的注 ...

  4. SpringCloud基础

    SpringCloud极大的简化了分布式系统的开发,实现了微服务的快速部署和灵活应用 SpringCloud主要框架 * 服务发现--Netfix Eureka * 服务调用--Netfix Feig ...

  5. .NET 小程序微信用户支付

    微信支付有两种模式:微信用户主动发起的支付.签约委托支付协议后自动支付. 自动支付又分为两种:首次支付时签约.纯签约. 首次支付时签约和纯签约在后续周期若需要发起自动扣款时,需要在应用服务中发起申请扣 ...

  6. React 简介

  7. UE4 移动物体的几种方法

    转自:https://dawnarc.com/2016/06/ue4%E7%A7%BB%E5%8A%A8%E7%89%A9%E4%BD%93%E7%9A%84%E5%87%A0%E7%A7%8D%E6 ...

  8. vs2015下C4819该文件包含不能在当前代码页(936)中表示的字符问题解决

    今天编译IfcOpenshell出现很多warning如下: C4819 该文件包含不能在当前代码页(936)中表示的字符.请将该文件保存为 Unicode 格式以防止数据丢失 解决方案: 文件——& ...

  9. kafka的分区

    分区会均匀的分配到不同的broke上,即不同的机器上.

  10. IDEA中MavenWeb项目没有新建servlet文件

    解决方案: https://blog.csdn.net/Delicious_Life/article/details/89515363