返回顶部
首页 > 资讯 > 数据库 >MySQL的Seconds_Behind_Master是什么
  • 599
分享到

MySQL的Seconds_Behind_Master是什么

2023-06-15 03:06:59 599人浏览 泡泡鱼
摘要

这篇文章给大家分享的是有关MySQL的Seconds_Behind_Master是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Seconds_Behind_Master对于Mysql主备实例,seconds

这篇文章给大家分享的是有关MySQL的Seconds_Behind_Master是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

Seconds_Behind_Master

对于Mysql主备实例,seconds_behind_master是衡量master与slave之间延时的一个重要参数。通过在slave上执行"show slave status;"可以获取seconds_behind_master的值。

原始实现

Definition:The number of seconds that the slave sql thread is behind processing the master binary log.

Type:time_t(long)

计算方式如下:

rpl_slave.cc::show_slave_status_send_data()if ((mi->get_master_log_pos() == mi->rli->get_group_master_log_pos()) &&       (!strcmp(mi->get_master_log_name(),                mi->rli->get_group_master_log_name()))) {     if (mi->slave_running == mysql_SLAVE_RUN_CONNECT)       protocol->store(0LL);     else       protocol->store_null();   } else {     long time_diff = ((long)(time(0) - mi->rli->last_master_timestamp) -                       mi->clock_diff_with_master);     protocol->store(         (longlong)(mi->rli->last_master_timestamp ? max(0L, time_diff) : 0));   }

主要分为以下两种情况:

  • SQL线程等待IO线程获取主机binlog,此时seconds_behind_master为0,表示备机与主机之间无延时;

  • SQL线程处理relay log,此时seconds_behind_master通过(long)(time(0) – mi->rli->last_master_timestamp) – mi->clock_diff_with_master计算得到;

last_master_timestamp

定义:

主库binlog中事件的时间。

type: time_t (long)

计算方式:

last_master_timestamp根据备机是否并行复制有不同的计算方式。

非并行复制:

rpl_slave.cc:exec_relay_log_event()if ((!rli->is_parallel_exec() || rli->last_master_timestamp == 0) &&    !(ev->is_artificial_event() || ev->is_relay_log_event() ||     (ev->common_header->when.tv_sec == 0) ||     ev->get_type_code() == binary_log::FORMAT_DESCRIPTION_EVENT ||     ev->server_id == 0)){ rli->last_master_timestamp= ev->common_header->when.tv_sec +                             (time_t) ev->exec_time; DBUG_ASSERT(rli->last_master_timestamp >= 0);}

在该模式下,last_master_timestamp表示为每一个event的结束时间,其中when.tv_sec表示event的开始时间,exec_time表示事务的执行时间。该值的计算在apply_event之前,所以event还未执行时,last_master_timestamp已经被更新。由于exec_time仅在Query_log_event中存在,所以last_master_timestamp在应用一个事务的不同event阶段变化。以一个包含两条insert语句的事务为例,在该代码段的调用时,打印出event的类型、时间戳和执行时间

create table t1(a int PRIMARY KEY AUTO_INCREMENT ,b longblob) engine=innodb;begin;insert into t1(b) select repeat('a',104857600);insert into t1(b) select repeat('a',104857600);commit;

10T06:41:32.628554Z 11 [Note] [MY-000000] [Repl] event_type: 33 GTID_LOG_EVENT

2020-02-10T06:41:32.628601Z 11 [Note] [MY-000000] [Repl] event_time: 1581316890

2020-02-10T06:41:32.628614Z 11 [Note] [MY-000000] [Repl] event_exec_time: 0

2020-02-10T06:41:32.628692Z 11 [Note] [MY-000000] [Repl] event_type: 2   QUERY_EVENT

2020-02-10T06:41:32.628704Z 11 [Note] [MY-000000] [Repl] event_time: 1581316823

2020-02-10T06:41:32.628713Z 11 [Note] [MY-000000] [Repl] event_exec_time: 35

2020-02-10T06:41:32.629037Z 11 [Note] [MY-000000] [Repl] event_type: 19   TABLE_MAP_EVENT

2020-02-10T06:41:32.629057Z 11 [Note] [MY-000000] [Repl] event_time: 1581316823

2020-02-10T06:41:32.629063Z 11 [Note] [MY-000000] [Repl] event_exec_time: 0

2020-02-10T06:41:33.644111Z 11 [Note] [MY-000000] [Repl] event_type: 30    WRITE_ROWS_EVENT

2020-02-10T06:41:33.644149Z 11 [Note] [MY-000000] [Repl] event_time: 1581316823

2020-02-10T06:41:33.644156Z 11 [Note] [MY-000000] [Repl] event_exec_time: 0

2020-02-10T06:41:43.520272Z 0 [Note] [MY-011953] [InnoDB] Page cleaner took 9185ms to flush 3 and evict 0 pages

2020-02-10T06:42:05.982458Z 11 [Note] [MY-000000] [Repl] event_type: 19   TABLE_MAP_EVENT

2020-02-10T06:42:05.982488Z 11 [Note] [MY-000000] [Repl] event_time: 1581316858

2020-02-10T06:42:05.982495Z 11 [Note] [MY-000000] [Repl] event_exec_time: 0

2020-02-10T06:42:06.569345Z 11 [Note] [MY-000000] [Repl] event_type: 30    WRITE_ROWS_EVENT

2020-02-10T06:42:06.569376Z 11 [Note] [MY-000000] [Repl] event_time: 1581316858

2020-02-10T06:42:06.569384Z 11 [Note] [MY-000000] [Repl] event_exec_time: 0

2020-02-10T06:42:16.506176Z 0 [Note] [MY-011953] [InnoDB] Page cleaner took 9352ms to flush 8 and evict 0 pages

2020-02-10T06:42:37.202507Z 11 [Note] [MY-000000] [Repl] event_type: 16    XID_EVENT

2020-02-10T06:42:37.202539Z 11 [Note] [MY-000000] [Repl] event_time: 1581316890

2020-02-10T06:42:37.202546Z 11 [Note] [MY-000000] [Repl] event_exec_time: 0

并行复制:

rpl_slave.cc   mts_checkpoint_routinets = rli->gaq->empty()          ? 0          : reinterpret_cast<Slave_job_group *>(rli->gaq->head_queue())->ts; rli->reset_notified_checkpoint(cnt, ts, true); 

在该模式下备机上存在一个分发队列gaq,如果gaq为空,则设置last_commit_timestamp为0;如果gaq不为空,则此时维护一个checkpoint点lwm,lwm之前的事务全部在备机上执行完成,此时last_commit_timestamp被更新为lwm所在事务执行完成后的时间。该时间类型为time_t类型。

ptr_group->ts = common_header->when.tv_sec +                   (time_t)exec_time;  // Seconds_behind_master relatedrli->rli_checkpoint_seqno++;
if (update_timestamp) { mysql_mutex_lock(&data_lock); last_master_timestamp = new_ts; mysql_mutex_unlock(&data_lock);}

在并行复制下,event执行完成之后才会更新last_master_timestamp,所以非并行复制和并行复制下的seconds_behind_master会存在差异。

clock_diff_with_master

定义:

  • The difference in seconds between the clock of the master and the clock of the slave (second - first). It must be signed as it may be <0 or >0. clock_diff_with_master is computed when the I/O thread starts; for this the I/O thread does a SELECT UNIX_TIMESTAMP() on the master.

  • type: long

rpl_slave.cc::get_master_version_and_clock()if (!mysql_real_query(mysql, STRING_WITH_LEN("SELECT UNIX_TIMESTAMP()")) &&     (master_res= mysql_store_result(mysql)) &&     (master_row= mysql_fetch_row(master_res))) {   mysql_mutex_lock(&mi->data_lock);   mi->clock_diff_with_master=     (long) (time((time_t*) 0) - strtoul(master_row[0], 0, 10));   DBUG_EXECUTE_IF("dbug.mts.force_clock_diff_eq_0",     mi->clock_diff_with_master= 0;);   mysql_mutex_unlock(&mi->data_lock); }

该差值仅被计算一次,在master与slave建立联系时处理。

其他

exec_time

定义:

  • the difference from the statement's original start timestamp and the time at which it completed executing.

  • type: unsigned long

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->query_start_in_secs();

时间函数

(1)time_t time(time_t timer) time_t为long类型,返回的数值仅精确到秒;

(2)int gettimeofday (struct timeval *tv, struct timezone *tz) 可以获得微秒级的当前时间;

(3)timeval结构

#include <time.h>stuct timeval {   time_t tv_sec;    suseconds_t tv_usec; }

感谢各位的阅读!关于“MySQL的Seconds_Behind_Master是什么”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

您可能感兴趣的文档:

--结束END--

本文标题: MySQL的Seconds_Behind_Master是什么

本文链接: https://lsjlt.com/news/277137.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • MySQL的Seconds_Behind_Master是什么
    这篇文章给大家分享的是有关MySQL的Seconds_Behind_Master是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Seconds_Behind_Master对于mysql主备实例,seconds...
    99+
    2023-06-15
  • 详解MySQL的Seconds_Behind_Master
    目录Seconds_Behind_Master原始实现last_master_timestampclock_diff_with_master其他exec_time时间函数总结Seconds_Behind_Master...
    99+
    2022-05-26
    mysql seconds_behind_master
  • MySQL的从库Seconds_Behind_Master延迟总结
    目录MySQL从库Seconds_Behind_Master延迟总结 一、延迟分类1、第一类(成服务器有较高的负载)2、第二类(不会造成服务器有较高的负载)二、相关测试1、Innod...
    99+
    2024-04-02
  • MySQL中备库Seconds_Behind_Master计算的示例分析
    这篇文章主要为大家展示了“MySQL中备库Seconds_Behind_Master计算的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“MySQL中备库...
    99+
    2024-04-02
  • mysql之 误用SECONDS_BEHIND_MASTER衡量MYSQL主备的延迟时间
    链接:http://www.woqutech.com/p=1116 MySQL 本身通过 show slave status 提供了 Seconds_Behind_Mas...
    99+
    2023-06-06
  • MySQL 发生同步延迟时Seconds_Behind_Master还为0的原因
    目录问题描述原理简析问题分析拓展一下总结一下问题描述 用户在主库上执行了一个 alter 操作,持续约一小时。操作完成之后,从库发现存在同步延迟,但是监控图表中的 Seconds_Behind_Master 指标显...
    99+
    2022-05-16
    MySQL 同步延迟 MySQL Seconds_Behind_Master
  • MySQL的MyRocks是什么
    本篇内容主要讲解“MySQL的MyRocks是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL的MyRocks是什么”吧! ...
    99+
    2024-04-02
  • mysql的collation是什么
    本篇内容介绍了“mysql的collation是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! my...
    99+
    2024-04-02
  • mysql指的是什么
    这篇文章主要介绍了mysql指的是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。PHP MySQL 简介:通过 PHP,您可以连接和操作数据库。 MySQL 是跟 PHP...
    99+
    2023-06-15
  • mysql是干什么的
    mysql 是一种开源关系型数据库管理系统,用于存储和管理数据。其主要功能包括:数据存储和管理数据检索数据安全性能优化可扩展性mysql 具备开源、易用、可靠、可移植等优点,使其成为各种...
    99+
    2024-04-05
    mysql
  • 什么是MySQL?
    MySQL是一个关系型数据库管理系统,由Oracle公司开发、发布和支持。 1、MySQL是一个数据库管理系统        数据库是结构化数据的集合...
    99+
    2024-04-02
  • 什么是MySQL
    本篇内容主要讲解“什么是MySQL”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“什么是MySQL”吧!MySQL 是最流行的关系型数据库管理系统,在 WEB 应...
    99+
    2024-04-02
  • mysql中的innodb是什么
    mysql中的innodb是什么?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。innodb简介InnoDB,是MySQL的数据库引擎之一,...
    99+
    2024-04-02
  • mysql中的myisam是什么
    mysql中的myisam是什么?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。myisam介绍MyISAM是默认存储引擎(Mysql5.1...
    99+
    2024-04-02
  • mysql中的engine是什么
    今天就跟大家聊聊有关mysql中的engine,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。mysql engine表示存储引擎,存储引擎是MySQ...
    99+
    2024-04-02
  • mysql中的varchar是什么
    mysql中的varchar是什么?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。mysql中varchar是可变长度的类型,在...
    99+
    2024-04-02
  • MySQL中的锁是什么?
    锁,在现实生活中是为我们想要隐藏于外界所使用的一种工具。在计算机中,是协调多个进程或县城并发访问某一资源的一种机制。在数据库当中,除了传统的计算资源(CPU、RAM、I/O等等)的争用之外,数据也是一种供许...
    99+
    2024-04-02
  • mysql中的char是什么
    这篇文章将为大家详细讲解有关mysql中的char,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。char简介在MYSQL中,字段类型char是指:使用指定长度的固定长度表...
    99+
    2024-04-02
  • mysql的标识是什么
    这篇文章运用简单易懂的例子给大家介绍mysql的标识是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。mysql的标识列是什么MySQL中标识列又称为自增长列,在mysql的表格字段...
    99+
    2024-04-02
  • MySQL的特性是什么
    这篇文章主要介绍MySQL的特性是什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作