工具分享丨分析GreatSQL Binglog神器
在GreatSQL中,Binlog可以说是 GreatSQL 中比较重要的日志了,在日常开发及运维过程中经常会遇到。Binlog即Binary Log,二进制日志文件,也叫作变更日志(Update Log)。
Binglog主要应用于数据恢复和数据复制,但是在Binlog中也含有非常多有价值的信息,比如说:
- 数据修改事件
- 表结构修改事件
- 状态修改事件
- 事务控制事件
- 管理语句事件
- ......
事务控制事件涵盖了事务的起始时间、起始位置、结束时间和结束位置。通过这些详细信息,我们能够计算事务的大小,进而评估其是否属于大型事务,以及是否可能引起主从同步的延迟问题,及时发现大事务,可避免复制故障。
简介
本文分享的神器的名字就叫做binlog_summary
,出自陈臣老师的手笔,也是开源的Python脚本文件,开源地址
下载
运行此工具需要有Python环境,若没有python环境请自行下载
下载binlog_summary.py
脚本,并授权
$ wget https://raw.githubusercontent.com/slowtech/dba-toolkit/master/mysql/binlog_summary.py $ chmod 755 binlog_summary.py
先用./binlog_summary.py -h
查看下帮助
$ ./binlog_summary.py -h usage: binlog_summary.py [-h] [-f BINLOG_TEXT_FILE] [--new] [-c {tps,opr,transaction}] [--start START_DATETIME] [--stop STOP_DATETIME] [--sort SORT_CONDITION] [-e] [--limit LIMIT] options: -h, --help show this help message and exit -f BINLOG_TEXT_FILE, --file BINLOG_TEXT_FILE Binlog text file, not the Raw binary file --new Make a fresh start -c {tps,opr,transaction}, --command {tps,opr,transaction} Command type: [tps, opr, transaction],tps: transaction per second, opr: dml per table, transaction: show transaction info --start START_DATETIME Start datetime, for example: 2004-12-25 11:25:56 --stop STOP_DATETIME Stop datetime, for example: 2004-12-25 11:25:56 --sort SORT_CONDITION Sort condition: time or size, you can use it when command type is transaction -e, --extend Show transaction info in detail,you can use it when command type is transaction --limit LIMIT Limit the number of rows to display
其中参数介绍:
-
-f
:Binlog 通过 mysqlbinlog 解析后的文本文件。注意,是文本文件,不是Binlog原始文件。 -
--new
:工具输出默认存储在sqlite3数据库中。使用--new可删除旧数据库。分析新binlog时需指定。 -
-c
:指定命令的类型。支持的命令类型有:- tps:分析实例的TPS信息
- opr:分析表的操作情况
- transaction:分析事务信息
-
--start/--stop
:指定时间范围 -
--sort
:事务排序方式,仅针对-c选择为transaction模式- size,按事务大小排序
- time,按事务的持续时间排序
-
-e
:输出事务详细操作信息,仅针对-c选择为transaction模式 -
limit
:限制输出的行数。
最佳实践
前置工作
由于工具只支持解析经mysqlbinlog
处理后的文本文件,首先需要进行解析转换。
先从GreatSQL数据目录中复制一份需要分析的binlog文件。
$ cp /data/GreatSQL/binlog.000021 ./ $ du -h binlog.000021 2.0G binlog.000021
先使用 mysqlbinlog 解析 Binlog
- 推荐使用参数
-v
(伪SQL)和--base64-output=decode-rows
(不显示Base64编码结果),这样生成的文本文件最小,相应地,binlog_summary工具的解析速度也会更快。
$ mysqlbinlog --base64-output=decode-rows -v binlog.000021 > ./greatsql-bin.000001.txt
解析后的文件大小大概在1.7G左右
$ du -h greatsql-bin.000001.txt 1.7G greatsql-bin.000001.txt
分析实例的TPS信息
使用-f指定解析后的文件,-c选择分析TPS信息,--limit选择只显示5行
$ ./binlog_summary.py -f ./greatsql-bin.000001.txt -c tps --limit 5 COMMIT_TIME TPS 2024-02-04 14:28:45 1 2024-02-04 14:28:56 1 2024-02-04 14:28:57 2 2024-02-04 14:28:58 1 2024-02-04 14:28:59 1
这里TPS是根据事务的提交时间进行统计的。获取如此精细TPS信息通常需要通过Binlog来实现,一般的监控手段难以达到如此精细的水平
当然,也可以对TPS进行排序,只需要加上管道和sort。
- k:对第三列排序
- n:是按照数值(默认是字符)的大小进行排序
- r:进行逆序排序
$ ./binlog_summary.py -f ./greatsql-bin.000001.txt -c tps --limit 5 | sort -k 3 -n COMMIT_TIME TPS 2024-02-04 14:28:45 1 2024-02-04 14:28:56 1 2024-02-04 14:28:58 1 2024-02-04 14:28:59 1 2024-02-04 14:28:57 2
分析表的操作情况
如果要分析表操作情况,需要-c选择opr功能模式,NUMS是执行次数,DML_TYPE是执行SQL的类型
$ ./binlog_summary.py -f ./greatsql-bin.000001.txt -c opr --limit 5 TABLE_NAME DML_TYPE NUMS test_db.idx_test INSERT 10000001 aptest.sys_user INSERT 1002000 test_db.t1 INSERT 524288 aptest.sys_dept INSERT 101000 aptest.sys_user DELETE 1000
分析Binlog中的大事务
$ ./binlog_summary.py -f ./greatsql-bin.000001.txt -c transaction --sort size --limit 5 TRANS_NAME BEGIN_TIME COMMIT_TIME BEGIN_LOG_POS COMMIT_LOG_POS DURATION_TIME SIZE t21 2024-02-05 16:14:32 2024-02-05 16:23:53 14319911 869025248 561 854705337 t33 2024-02-20 16:02:41 2024-02-20 16:08:21 913362031 1425529317 340 512167286 t32 2024-02-20 16:01:37 2024-02-20 16:02:06 881773547 913361946 29 31588399 t31 2024-02-20 16:00:14 2024-02-20 16:00:15 871100835 881773462 1 10672627 t20 2024-02-04 14:29:43 2024-02-04 14:29:43 7163617 14319264 0 7155647
其中,各个参数解析如下
TRANS_NAME
:事务编号BEGIN_TIME
:事务开始时间COMMIT_TIME
:事务提交时间BEGIN_LOG_POS
:事务的开始位置点COMMIT_LOG_POS
:事务的结束位置点DURATION_TIME
:事务的持续时间,单位秒。其中,DURATION_TIME = COMMIT_TIME - BEGIN_TIME
SIZE
:事务的大小,单位字节,其中,SIZE = COMMIT_LOG_POS - BEGIN_LOG_POS
拿到事务的大小,可以粗略地判断这个Binlog中是否存在大事务。如果要进一步分析事务中包含哪些操作,需加上–extend,如:
$ ./binlog_summary.py -f ./greatsql-bin.000001.txt -c transaction --sort size --extend --limit 5 TRANS_NAME BEGIN_TIME COMMIT_TIME BEGIN_LOG_POS COMMIT_LOG_POS DURATION_TIME SIZE t21 2024-02-05 16:14:32 2024-02-05 16:23:53 14319911 869025248 561 854705337 ├── test_db.idx_test INSERT 10000000 t33 2024-02-20 16:02:41 2024-02-20 16:08:21 913362031 1425529317 340 512167286 ├── aptest.sys_user INSERT 1000000 t32 2024-02-20 16:01:37 2024-02-20 16:02:06 881773547 913361946 29 31588399 ├── aptest.sys_dept INSERT 100000 t31 2024-02-20 16:00:14 2024-02-20 16:00:15 871100835 881773462 1 10672627 ├── aptest.tap_dept_tax INSERT 1000 t20 2024-02-04 14:29:43 2024-02-04 14:29:43 7163617 14319264 0 7155647 ├── test_db.t1 INSERT 262144
性能
实测分析一个2G的Binlog,大概分析时间是2分半,也不慢
$ time python binlog_summary.py -f ./greatsql-bin.000001.txt --new -c transaction --sort size --extend --limit 5 ......结果不展示 154.86s user 2.26s system 99% cpu 2:37.47 total
参考阅读
Enjoy GreatSQL :)
关于 GreatSQL
GreatSQL是适用于金融级应用的国内自主开源数据库,具备高性能、高可靠、高易用性、高安全等多个核心特性,可以作为MySQL或Percona Server的可选替换,用于线上生产环境,且完全免费并兼容MySQL或Percona Server。
相关链接: GreatSQL社区 Gitee GitHub Bilibili
GreatSQL社区:
社区有奖建议反馈: https://greatsql.cn/thread-54-1-1.html
社区博客有奖征稿详情: https://greatsql.cn/thread-100-1-1.html
(对文章有疑问或者有独到见解都可以去社区官网提出或分享哦~)
技术交流群:
微信&QQ群:
QQ群:533341697
微信群:添加GreatSQL社区助手(微信号:wanlidbc
)好友,待社区助手拉您进群。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Elasticsearch:块大小如何影响语义检索结果
在自然语言处理和人工智能领域,分块(chunking)是一项至关重要的技术,它将大块文本分解成更小、更易于管理的片段。 在使用大型语言模型 (LLM) 和语义检索系统时,此过程尤其重要,因为它直接影响从这些模型获得的结果的相关性和准确性。 在这篇博文中,我们将深入探讨分块的概念,探讨其在 LLM 相关应用程序中的重要性,并分享我们自己对不同分块大小的实验的见解。 分块(chunking):解释 分块(chunking)是将大型文本数据语料库划分为较小的、具有语义意义的单元的过程。 通过这样做,我们可以确保每个块都包含噪音最小的相关信息,使 LLMs 更容易处理和理解内容。 这些块的大小可能会根据特定用例和系统所需的结果而变化。 当涉及语义检索时,分块在确定检索结果的相关性方面起着至关重要的作用。 LLMs 的上下文窗口有限,这意味着他们一次只能处理一定数量的文本。 通过将数据分成更小的部分,我们可以确保每个块都适合 LLM 的上下文窗口,从而使其能够更有效地处理和理解信息。 当使用检索到的结果来增强 LLMa 的知识时,这一点尤其重要,因为它直接影响生成输出的质量和准确性。 然而,找...
- 下一篇
【官宣】2024 DTC数据技术嘉年华全议程发布:汇聚行业精英,共襄年度盛宴
龙腾四海内,风云际会时。由墨天轮数据社区和中国数据库联盟(ACDU)主办的第十三届数据技术嘉年华将于2024年4月12日至13日在北京新云南皇冠假日酒店盛大召开。本次大会的主题是“智能·云原生·一体化——DB与AI协同创新,模型与架构融合发展”。 80余位行业领袖、技术精英、实践者和生态布道者将齐聚一堂,共同探讨数据技术的未来趋势。他们将在大会上带来1场主论坛和12场分论坛的精彩演讲,内容涵盖数据技术的各个方面,从前沿理论到实践应用,从技术创新到生态构建,全方位、多角度地展现数据技术的魅力。今天我们将为大家一一揭晓本届嘉年华全议程!(文末含免费参会福利) 主论坛:智能·云原生·一体化 大会主旨演讲 当前人工智能与数据库深度融合,云原生与一体化成为关键词,这些趋势共同推动着数据库技术的创新发展。那么数据库行业到底迎来了怎样的技术革新?提出了哪些行业解决方案?本专题邀请到来自产学研的行业领军人物,深度解读数据库行业前沿发展创新与关键技术突破,探讨数据库融合发展的未来道路。 这些演讲嘉宾都是在数据库领域有着丰富经验和深厚知识的专家。他们的演讲将为参会者提供关于智能、云原生、一体化技术在数据库...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS8编译安装MySQL8.0.19
- CentOS7,CentOS8安装Elasticsearch6.8.6