在MySQL中,如何快速找到 binlog 中是否有大事务

0    138    1

Tags:

👉 本文共约1384个字,系统预计阅读时间或需6分钟。

问题

我们并不喜欢 MySQL 中出现大事务(更新很多数据的事务),大事务往往带来很多维护的问题。

我们在维护 MySQL 时,需要关注于是否出现了较大事务,在 binlog 里找到其出现的证据。

实验

我们先创建个数据库:

在MySQL中,如何快速找到 binlog 中是否有大事务

这里我们启用了 GTID,对于非 GTID 的 binlog,大家也可以用类似的方法处理。

下面需要创建一些大小不同的事务,我们使用在 第11问 里使用过的手法,

在MySQL中,如何快速找到 binlog 中是否有大事务

反复执行,

在MySQL中,如何快速找到 binlog 中是否有大事务

下面我们开始研究 binlog,先解开一段看一下,

在MySQL中,如何快速找到 binlog 中是否有大事务

我们知道在 GTID 模式下,事务开头必然会有一个 GTID_event,如图中红框标注。

我们就过滤这一段信息,

在MySQL中,如何快速找到 binlog 中是否有大事务

这里用到了 grep 两个技巧:

\1. 过滤 tab 字符,用到了 "$(printf '\t')" 来插入 tab 字符,无法直接使用 "\t" 字符。

本人提供Oracle(OCP、OCM)、MySQL(OCP)、PostgreSQL(PGCA、PGCE、PGCM)等数据库的培训和考证业务,私聊QQ646634621或微信db_bao,谢谢!

\2. 使用 -B 参数向前找到了匹配的前一行,输出 "at xxx",这一行是 GTID_event 在 binlog 中的位置(单位是字节)。

然后我们将其中的位置信息过滤出来,

在MySQL中,如何快速找到 binlog 中是否有大事务

再将每两行的位置减一下,就获得了每一个事务在 binlog 中的大小,

在MySQL中,如何快速找到 binlog 中是否有大事务

将这些事务的大小排序一下,取最大值,

在MySQL中,如何快速找到 binlog 中是否有大事务

这是这个 binlog 中最大的 10 个事务的大小,可以看到最大的事务在 binlog 中占用了 658k 大小,不算太大。

本期没有关于 MySQL 太多的知识点,只是活用 Linux 的命令,可以简单高效获取 binlog 的信息。

下面附上本期命令的文字版:


参考

https://mp.weixin.qq.com/mp/homepage?__biz=MzU2NzgwMTg0MA==&hid=9&sn=616ddd6a2417f34f6d836a2c2d567f12&scene=1&devicetype=android-29&version=28001c57&lang=zh_CN&nettype=cmnet&ascene=7&session_us=gh_0dc4cf247b24&wx_header=3

标签:

头像

小麦苗

学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

您可能还喜欢...

发表回复

嘿,我是小麦,需要帮助随时找我哦
  • 18509239930
  • 个人微信

  • 麦老师QQ聊天
  • 个人邮箱
  • 点击加入QQ群
  • 个人微店

  • 回到顶部
返回顶部