前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >第15问:快速找到 binlog 中是否有大事务

第15问:快速找到 binlog 中是否有大事务

作者头像
爱可生开源社区
发布2020-07-16 22:27:48
2.1K1
发布2020-07-16 22:27:48
举报

本文关键字:大事务、binlog、Linux

问题

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

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

实验

我们先创建个数据库:

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

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

反复执行,

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

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

我们就过滤这一段信息,

这里用到了 grep 两个技巧: 1. 过滤 tab 字符,用到了 "$(printf '\t')" 来插入 tab 字符,无法直接使用 "\t" 字符。 2. 使用 -B 参数向前找到了匹配的前一行,输出 "at xxx",这一行是 GTID_event 在 binlog 中的位置(单位是字节)。

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

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

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

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

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

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

~/opt/mysql/5.7.20/bin/mysqlbinlog data/mysql-bin.000001 | grep "GTID$(printf '\t')last_committed" -B 1 \
                                    | grep -E '^# at' | awk '{print $3}' \
                                    | awk 'NR==1 {tmp=$1} NR>1 {print ($1-tmp);tmp=$1}' \
                                    | sort -n -r | head -n 10
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-07-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 爱可生开源社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 实验
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档