我已经搜索过以前的问题,但无法找到与我的问题完全匹配的内容:
在查询事务期间的什么时候设置二进制日志时间戳然后写入二进制日志?
背景信息:我一直在使用正在使用主/从复制的数据库。通常,奴隶将落后于主服务器,我确信这只是因为二进制日志中有很多共享相同时间戳的事务。当我说了很多时,我在谈论超过150个时间戳,属于超过9000个条目的1小时日志(加上其余的9000个条目下返回)。这是使用:
找到的mysqlbinlog bin-log.0001 | grep 'TIMESTAMP' | uniq -c | awk '{if ($1>9000){print $0}} ' | sed -e 's/\/\*\!\*\/;//g' | gawk -F '=' '{cmd="date -d @"$2; cmd | getline d; print $1"="$2"\t("d")"; close(d)}'
因此,如果共享时间戳的事务数量反映主服务器上的工作负载,以及这些数字是否异常,我基本上都在尝试锻炼。
当绘制Second_behind_master图形时,它显示线性增长,然后突然下降,这似乎表明同样的事情。
MySQL版本是5.6.33。
答案 0 :(得分:0)
“奴隶滞后”有很多可能的原因,这里很难详细解答。二进制日志时间戳记在事务开始时写入。
有一篇有用的文章介绍如何识别症状的原因:https://www.percona.com/blog/2014/05/02/how-to-identify-and-cure-mysql-replication-slave-lag/例如,它解释了Seconds_Behind_Master参数如何误导,因为它只测量时间戳的差异。最近执行的中继日志,与IO_THREAD最近下载的中继日志条目相比。
您可以在网站上找到许多可能对您有所帮助的其他资源。这包括博客文章中提到的Percona Toolkit,它像ALL Percona软件一样完全免费,并且是开源的。
披露:我为Percona工作。