Riedsio Asked: 2011-01-05 11:00:27 +0800 CST2011-01-05 11:00:27 +0800 CST 2011-01-05 11:00:27 +0800 CST 有没有办法以小于 1 秒的分辨率测量 MySQL 中的复制滞后? 772 有没有一种方法可以测量 MySQL 中的复制延迟,分辨率小于 1 秒? 也就是说,复制延迟是否可以在微秒或毫秒级别进行测量? mysql replication 4 个回答 Voted Best Answer Gabriel Sosa 2011-01-05T15:35:01+08:002011-01-05T15:35:01+08:00 你试过maatkit heartbeat吗?这是我目前正在使用的。您将需要运行另一个 perl 进程,但从我的角度来看,这比当前的 MySQL 机制更有帮助。 我也在使用mk-slave-delay来产生延迟。我在其中一个从属服务器中保持 1 小时的延迟,以便在 SQL 注入或用户错误的情况下获得额外的保护。 这两个脚本可以解决问题。 萨卢多斯 RolandoMySQLDBA 2011-05-31T17:55:36+08:002011-05-31T17:55:36+08:00 作为一个快速而肮脏的答案,您可能希望使用源代码并创建一个 UDF 以使复制以微秒为单位监控延迟。 但是,我想到了一种有趣的方法来找出更精细的复制方法。 创建一个数据库 (replagdb),其唯一目的是记录这个细粒度的时间戳。在 replagdb 数据库中,创建一个仅包含表示时间戳的浮点数的表。 CREATE DATABASE IF NOT EXISTS replagdb; use replagdb DROP TABLE IF EXISTS replagtb; CREATE TABLE replagtb (tmstmp DOUBLE) ENGINE=MEMORY; INSERT INTO replagtb VALUES (0); 创建一个 perl 脚本,在主服务器上打开一个数据库连接,然后在一个无限循环中在主服务器上执行此操作: 从 master 上的 OS 获取 date +"%s.%N" 的输出 更新 replagdb.replagtb SET tmstmp = numberFromStep1; 让这个从主服务器复制到从服务器,然后您可以在从服务器上执行此操作: 从从机上的操作系统获取 date +"%s.%N" 的输出,将其存储在变量 t1 中 从 replagdb.replagtb 中选择 tmstmp 并将其存储在变量 t2 中。 设置变量 df = t1 - t2 df 将复制滞后表示为双精度浮点数。 为了防止slave上大量的relay log增长,你必须在slave上设置max_relay_log_size为8G。您还必须仔细监控 master 二进制日志的增长率。 user4939 2011-08-12T09:02:40+08:002011-08-12T09:02:40+08:00 Maatkit 的 mk-heartbeat 工具在最近的版本中支持微秒精度的时间戳。这将满足您的需求。 Rick James 2011-06-01T14:01:39+08:002011-06-01T14:01:39+08:00 发明精确的复制延迟度量存在几个问题。 如果你的奴隶在世界的另一边,你可能会因为连接距离而有 200 毫秒的延迟。 同样,如果您从这里进行监控,但您的从站在那里,您的信息将再过时 200 毫秒。 如果你注入一个精确的心跳,它告诉你的只是那个心跳的延迟;它没有告诉您紧随其后的长语句。也不是在该语句后面排队的语句。 如果您过于频繁地注入亚秒级心跳,您将减慢复制速度。 您希望如何“使用”精确的心跳?
你试过maatkit heartbeat吗?这是我目前正在使用的。您将需要运行另一个 perl 进程,但从我的角度来看,这比当前的 MySQL 机制更有帮助。
我也在使用mk-slave-delay来产生延迟。我在其中一个从属服务器中保持 1 小时的延迟,以便在 SQL 注入或用户错误的情况下获得额外的保护。
这两个脚本可以解决问题。
萨卢多斯
作为一个快速而肮脏的答案,您可能希望使用源代码并创建一个 UDF 以使复制以微秒为单位监控延迟。
但是,我想到了一种有趣的方法来找出更精细的复制方法。
创建一个数据库 (replagdb),其唯一目的是记录这个细粒度的时间戳。在 replagdb 数据库中,创建一个仅包含表示时间戳的浮点数的表。
创建一个 perl 脚本,在主服务器上打开一个数据库连接,然后在一个无限循环中在主服务器上执行此操作:
让这个从主服务器复制到从服务器,然后您可以在从服务器上执行此操作:
df 将复制滞后表示为双精度浮点数。
为了防止slave上大量的relay log增长,你必须在slave上设置max_relay_log_size为8G。您还必须仔细监控 master 二进制日志的增长率。
Maatkit 的 mk-heartbeat 工具在最近的版本中支持微秒精度的时间戳。这将满足您的需求。
发明精确的复制延迟度量存在几个问题。
如果你的奴隶在世界的另一边,你可能会因为连接距离而有 200 毫秒的延迟。
同样,如果您从这里进行监控,但您的从站在那里,您的信息将再过时 200 毫秒。
如果你注入一个精确的心跳,它告诉你的只是那个心跳的延迟;它没有告诉您紧随其后的长语句。也不是在该语句后面排队的语句。
如果您过于频繁地注入亚秒级心跳,您将减慢复制速度。
您希望如何“使用”精确的心跳?