https://pan.baidu.com/s/1jHIWUN0
本文只是工具的展示,未过多介绍细节,如果要更多了解细节请参考MYSQL运维内参第21章,当然我也有阅读并且从源码级
进行了验证,同时在书中也有一个用shell写成的脚本进行长期未提交的事物,但是这里我自己使用了自己的工具infobin。
以前我也写过一个帮助如下:
http://blog.itpub.net/7728585/viewspace-2133985/
但是没有包含最新的对长期不提交事物的查询,因为这是我新加入的,这个功能会在本文描述
另外这里涉及到比较重要的两个binlog event及另外这里涉及到比较重要的两个binlog event及query event和xid event,参考的早期的文章
当然这是一个系列如果有兴趣可以全部看看
http://blog.itpub.net/7728585/viewspace-2133188/ 解析MYSQL BINLOG 二进制格式(1)--准备工作 http://blog.itpub.net/7728585/viewspace-2133189/ 解析MYSQL BINLOG 二进制格式(2)--FORMAT_DESCRIPTION_EVENT http://blog.itpub.net/7728585/viewspace-2133321/ 解析MYSQL BINLOG 二进制格式(3)--QUERY_EVENT http://blog.itpub.net/7728585/viewspace-2133429/ 解析MYSQL BINLOG 二进制格式(4)--TABLE_MAP_EVENT http://blog.itpub.net/7728585/viewspace-2133463/ 解析MYSQL BINLOG 二进制格式(5)--WRITE_ROW_EVENT http://blog.itpub.net/7728585/viewspace-2133469/ 解析MYSQL BINLOG 二进制格式(6)--UPDATE_ROW_EVENT/DELETE_ROW_EVENT http://blog.itpub.net/7728585/viewspace-2133502/ 解析MYSQL BINLOG 二进制格式(7)--Xid_log_event/XID_EVENT http://blog.itpub.net/7728585/viewspace-2133506/ 解析MYSQL BINLOG二进制格式(8)--GTID_LOG_EVENT/ANONYMOUS_GTID_LOG_EVENT及其他 http://blog.itpub.net/7728585/viewspace-2133534/ 解析MYSQL BINLOG二进制格式(9)--infobin解析binlog帮助文档 http://blog.itpub.net/7728585/viewspace-2133537/ 解析MYSQL BINLOG二进制格式(10)--问题解答
在innodb中如果我们显示的开启和提交一个事物如下:
这是一个我们熟知的事物,在MYSQL BINLOG 行格式中(当然本工具也可以用于语句格式的binlog),
整个事物包含如下的event
在每一个event中的header中存在4字节的一个时间,这个时间是新纪元时间。
而这个时间来自于dispatch_command函数最开始的设置线程的中的一个set_time()
函数
start_utime= utime_after_lock= my_micro_time();
当发起commit命令后这个时间会记录到XID EVENT中。那么我们得到一个设计思路
我们可以用XID EVENT的时间-QUERY EVENT的时间来得到一个时间差为事物持续的时间
,但是要注意如果不是手动提交而是自动提交当然也就不存在没有及时提交的事物了,
并且这里使用QUERY EVENT而没有使用GTID EVENT是为了兼容5.6不开启GTID的情况,
在5.7中即使不开启GTID也会有匿名的GTID EVENT。
另外值得注意的一点就是即使一个事物持续时间很长,并不一定是没有及时提交,可能
事物中包含了select语句这种不记录binlog的语句,这种是通过binlog无法确定的,但是
我们至少可以将这种长时间未提交的事物中的DML语句找到交给开发进行分析到底是什么
原因。
此工具实际来自我早前学习binlog event的时候写的工具infobin,这次由于线上出现了
大量未及时提交的事物,从而加入了新的功能。
本工具的帮助文档在
简单的说本工具总共分为两部分,分别叫做DETAIL和TOTAL
有了binlog的开始和结束位置要找到是什么DML语句就非常方便了如下就可以了
./mysqlbinlog mysql-bin.000274 --base64-output='decode-rows' -vv --start-position=592514409 --stop-position=592515464|more使用帮助
[[email protected] ~]$ ./infobin [Author]: gaopeng [QQ]:22389860 [blog]:http://blog.itpub.net/7728585/ --USAGE:./infobin [binlogfile] [piece] [bigtrxsize] [bigtrxtime] [binlogfile]:binlog file! [piece]:how many piece will split,is a Highly balanced histogram, find which time generate biggest binlog.(must:piece<2000000) [bigtrxsize](bytes):larger than this size trx will view.(must:trx>256(bytes)) [bigtrxtime](sec):larger than this sec trx will view.(must:>0(sec))使用方法
./infobin mysql-bin.000274 2 200000 400 > log1.log
本工具主要的意义包含4个方面
>Gtid Event:Pos:504(0X1f8) N_pos:569(0X239) Time:1496993578 Event_size:65(bytes) Gtid:89dfa8a4-cb13-11e6-b54-0c29a879a3:2 -->Query Event:Pos:569(0X239) N_Pos:641(0X281) Time:1496993578 Event_size:72(bytes) Exe_time:0 Use_db:test Statment(35b-trun):BEGIN /*!Trx begin!*/ Gno:2 ---->Map Event:Pos641(0X281) N_pos:689(0X2b1) Time:1496993578 Event_size:48(bytes) TABLE_ID:142 DB_NAME:test TABLE_NAME:test Gno:2 ------>Insert Event:Pos:689(0X2b1) N_pos:733(0X2dd) Time:1496993578 Event_size:44(bytes) Dml on table: test.test table_id:142 Gno:2 >Xid Event:Pos:733(0X2dd) N_Pos:764(0X2fc) Time:1496993578 Event_size:31(bytes) COMMIT; /*!Trx end*/ Gno:2
显然这是一个事物
--Piece view: (1)Time:1487560299-1487560543(244(s)) piece:107374204(bytes)[104857.625(kb)] (2)Time:1487560543-1487560751(208(s)) piece:107374204(bytes)[104857.625(kb)] (3)Time:1487560751-1487561012(261(s)) piece:107374204(bytes)[104857.625(kb)] (4)Time:1487561012-1487561480(468(s)) piece:107374204(bytes)[104857.625(kb)] (5)Time:1487561480-1487562682(1202(s)) piece:107374204(bytes)[104857.625(kb)] (6)Time:1487562682-1487563492(810(s)) piece:107374204(bytes)[104857.625(kb)] (7)Time:1487563492-1487563723(231(s)) piece:107374204(bytes)[104857.625(kb)] (8)Time:1487563723-1487563951(228(s)) piece:107374204(bytes)[104857.625(kb)] (9)Time:1487563951-1487564159(208(s)) piece:107374204(bytes)[104857.625(kb)] (10)Time:1487564159-1487564409(250(s)) piece:107374204(bytes)[104857.625(kb)]
一目了然1487560543-1487560751和1487564159-1487564409生成的binlog更大(注意是新纪元时间)
--Large than 700000(bytes) trx: (1)Trx_size:719621(bytes)[702.755(kb)] trx_begin_p:60579814[0X39C5FE6] trx_end_p:61299435[0X3A75AEB] (2)Trx_size:719771(bytes)[702.901(kb)] trx_begin_p:177760551[0XA986927] trx_end_p:178480322[0XAA364C2] (3)Trx_size:719779(bytes)[702.909(kb)] trx_begin_p:314334603[0X12BC5D8B] trx_end_p:315054382[0X12C7592E] (4)Trx_size:719803(bytes)[702.933(kb)] trx_begin_p:317542845[0X12ED51BD] trx_end_p:318262648[0X12F84D78]
大事物的意义不言而喻,因为在函数order_commit函数中其中的3个队列FLUSH队列、SYNC队列、COMMIT队列均是串行的
事物过大会堵塞全库其他的事物提交(GROUP COMMIT)
--Large than 400(secs) trx: (1)Trx_sec:406(sec) trx_begin_time:1502441602 trx_end_time:1502442008 trx_query_pos:592514409 trx_xid_pos:592515464 query_exe_time:90 (2)Trx_sec:411(sec) trx_begin_time:1502441597 trx_end_time:1502442008 trx_query_pos:592518620 trx_xid_pos:592519666 query_exe_time:95 (3)Trx_sec:407(sec) trx_begin_time:1502441601 trx_end_time:1502442008 trx_query_pos:592528469 trx_xid_pos:592529524 query_exe_time:91 (4)Trx_sec:538(sec) trx_begin_time:1502441539 trx_end_time:1502442077 trx_query_pos:595102123 trx_xid_pos:595103178 query_exe_time:153 (5)Trx_sec:531(sec) trx_begin_time:1502441547 trx_end_time:1502442078 trx_query_pos:595141415 trx_xid_pos:595142470 query_exe_time:145 (6)Trx_sec:443(sec) trx_begin_time:1502441694 trx_end_time:1502442137 trx_query_pos:597451804 trx_xid_pos:597452859 query_exe_time:0 (7)Trx_sec:546(sec) trx_begin_time:1502441592 trx_end_time:1502442138 trx_query_pos:597531453 trx_xid_pos:597532508 query_exe_time:100 (8)Trx_sec:468(sec) trx_begin_time:1502441697 trx_end_time:1502442165 trx_query_pos:598471241 trx_xid_pos:598472296 query_exe_time:0 (9)Trx_sec:515(sec) trx_begin_time:1502441693 trx_end_time:1502442208 trx_query_pos:600613882 trx_xid_pos:600614928 query_exe_time:0
这也是本次新加入的功能。也是为查看长期不提交事物定做的。
比如我做如下一个事物:
flush binary logs; begin; insert into testgp values(10); insert into testgp values(20); select sleep(5) from testgp limit 2; commit; flush binary logs;
输出如下:
-------------Now begin-------------- Check Mysql Version is:5.7.13-log Check Mysql binlog format ver is:V4 Check This binlog is closed! Check This binlog total size:585(bytes) Note:load data infile not check! ------------Detail now-------------- >Format description log Event:Pos:4(0X4) N_pos:123(0X7b) Time:1502678321 Event_size:119(bytes) >Previous gtid Event:Pos:123(0X7b) N_pos:194(0Xc2) Time:1502678321 Event_size:71(bytes) >Gtid Event:Pos:194(0Xc2) N_pos:259(0X103) Time:1502678332 Event_size:65(bytes) Gtid:4a6f2a67-5d87-11e6-a6bd-0c29a879a3:196824 last_committed=0 sequence_number=1 -->Query Event:Pos:259(0X103) N_Pos:331(0X14b) Time:1502678322 Event_size:72(bytes) Exe_time:0 Use_db:test Statment(35b-trun):BEGIN /*!Trx begin!*/ Gno:196824 ---->Map Event:Pos331(0X14b) N_pos:380(0X17c) Time:1502678322 Event_size:49(bytes) TABLE_ID:294 DB_NAME:test TABLE_NAME:testgp Gno:196824 ------>Insert Event:Pos:380(0X17c) N_pos:420(0X1a4) Time:1502678322 Event_size:40(bytes) Dml on table: test.testgp table_id:294 Gno:196824 ---->Map Event:Pos420(0X1a4) N_pos:469(0X1d5) Time:1502678322 Event_size:49(bytes) TABLE_ID:294 DB_NAME:test TABLE_NAME:testgp Gno:196824 ------>Insert Event:Pos:469(0X1d5) N_pos:509(0X1fd) Time:1502678322 Event_size:40(bytes) Dml on table: test.testgp table_id:294 Gno:196824 >Xid Event:Pos:509(0X1fd) N_Pos:540(0X21c) Time:1502678332 Event_size:31(bytes) COMMIT; /*!Trx end*/ Gno:196824 >Rotate log Event:Pos:540(0X21c) N_pos:585(0X249) Time:1502678332 Event_size:45(bytes) -------------Total now-------------- Trx total[counts]:1 Event total[counts]:10 Max trx event size:119(bytes) Pos:4[0X4] Avg binlog size(/sec):53.182(bytes)[0.052(kb)] Avg binlog size(/min):3190.909(bytes)[3.116(kb)] --Piece view: (1)Time:1502678321-1502678321(0(s)) piece:117(bytes)[0.114(kb)] (2)Time:1502678321-1502678322(1(s)) piece:117(bytes)[0.114(kb)] (3)Time:1502678322-1502678322(0(s)) piece:117(bytes)[0.114(kb)] (4)Time:1502678322-1502678322(0(s)) piece:117(bytes)[0.114(kb)] (5)Time:1502678322-1502678332(10(s)) piece:117(bytes)[0.114(kb)] --Large than 200000(bytes) trx: No trx find! --Large than 8(secs) trx: (1)Trx_sec:10(sec) trx_begin_time:1502678322 trx_end_time:1502678332 trx_query_pos:259 trx_xid_pos:540 query_exe_time:0
这里我们看到了我们刚才做的没有及时提交的事物
--Large than 8(secs) trx: (1)Trx_sec:10(sec) trx_begin_time:1502678322 trx_end_time:1502678332 trx_query_pos:259 trx_xid_pos:540 query_exe_time:0
起始和结束位置有了直接mysqlbinlog查吧!
infobin工具只要拿到binlog就可以进行解析不依赖其他工具,确实比较方便,现在来说支持5.6,5.7 的binlog对relay log支持不好。
作者微信:
HTML和CSS(二)CSS技术1.1、css技术介绍css是【层叠样式表单】。是用于(增强)控制网页样式并允许将样式信息与网页内容分离的一种标记性语言。1.2、css语法规则:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XaHrR2rG-1608777526575)(C:\Users\1\AppData\Roaming\Typora\typora-user-images\image-20201224080545946.png)]**选择器:**浏览器根据"选择
HBase的Scan查询功能(setStartRow, setStopRow),通过这两个方法,可以实现小范围的扫描,扫描的规则是[startRowKey,endRowKey),扫描的结果是起始行包括在内,终止行不包括在内。但rowkey的存储顺序是按照rowkey的ASCAII值排序,正常情况下是将ASCAII码值小的先查出来。要实现倒序查询,需要将startRow设置为终止行,endRow设置...
I have noticed TortoiseGit seems to contain every feature branch I ever created, both in drop-downs for local branches AND remote, even though many of the remote branches were deleted after being merg...
一、数据仓库基础介绍DW数据仓库(Data Warehouse)是一个面向主题的(Subject Oriented)、集成的(Integrated)、相对稳定的(Non-Volatile)、反映历史变化(TimeVariant)的数据集合,用于支持管理决策(Decision Making Support)。ODS(Operational Data Store):操作型数据存储。EDW(Enterprise Data Warehouse) 是企业级数据仓库数据集市:部门级别的数据集合,一般基于数据仓库
使用job模拟定时从元数据表中抽取指定数据进入目标表的过程。一、创建元数据表 –create table test_origianl create table test_original_data( id number(10,2) primary key, name varchar2(200), descCont varchar2(100), ...
文章目录1、前期必备1.1、下载源码1.2、下载开发工具1.3、下载Tomcat1.4、下载JDK并配置环境变量1.5、安装数据库和数据库管理工具2、将SQL文件导入到数据库3、用Eclipse运行4、常见问题4.1、导入后项目名称前有可能出现红叉叉,那该怎么解决呢?1、前期必备1.1、下载源码本教程源码我已经放到网盘了,在公众号【IT学长】回复 “宿舍管理系统”自行下载。1.2、下载开发工具作者用目前非常流行的 Eclipse 开发工具做演示,大家可直接在百度搜索关键词下载。1.3、下载Tom
VS error C4996 解决方案
介绍了stm8的BEEP功能的使用和选项字节OptionByte中的ARF的设置。
文章目录一、归并排序回顾二、Java并行编程框架三、`RecursiveAction`详解四、测试和效率分析一、归并排序回顾归并排序,想必大家都不陌生,它是我们学习排序算法和分治法的极好例子。它是稳定排序,且有稳定的O(nlogn)O(nlogn)O(nlogn)时间复杂度,不受数据混乱度影响。唯一的不足是需要O(n)O(n)O(n)的辅助空间。因此,归并排序被认为是综合性能最优的排序算法。...
基于Ziegler-Nlichols 方法的PID参数整定Ziegler-Nichols方法是基于稳定性分析的PID整定方法。该方法整定比例系数Kp的思想是,首先置Ki=KD=0,然后增加Kp。直至系统开始振荡(即闭环系统极点在jw轴上),再将Kp乘以0.6,即为整定后的比例系数Kp。整定的计算公式如下:式中,Km为系统开始振荡时的Kp值,wm为振荡频率。利用根轨迹法可以确定Km和wm。对于给定的被控对象传递函数,可以得到其根轨迹。对应穿越jw轴时的增益即为Km,而此点的w值即为wm。然而针对离
简介:账号admin密码123456不会的看源码里的教程!网盘下载地址:http://kekewl.net/AYZFYxdzsKB0图片:
App启动时黑白屏优化 黑白屏问题是app需要重点优化点之一,我以前都是遇到这种比较典型的问题直接上网查找相关的解决方案,筛选直接用,这样的缺点是,只知其表,不知其里,感觉自己这块懂了,但是和人实际表述的时候却说的很片面。细致梳理一下,让自己认知更深刻一下。如果有理解不对的地方,请多多指点。在此先谢过!!1 、app的启动流程图:小结:从图中可以看出app启动分为俩个阶段,一个是系统进程层...