接上一篇,未提交的事务导致锁等待,锁住一段时间后又提交了(也可能是回滚),锁释放业务继续运行。那么我们如何知道产生锁的事务是在跑什么SQL?

今天讲的这个工具,就可以通过监听3306端口的数据,把每个事务的起始时间,SQL命令都打印出来,而且可以设置事务时长,比如事务时长超过10秒的。

参考链接:https://highdb.com/%E8%BF%BD%E8%B8%AAmysql%E4%B8%AD%E9%95%BF%E6%97%B6%E9%97%B4%E8%BF%90%E8%A1%8C%E7%9A%84%E4%BA%8B%E5%8A%A1/

github链接:https://github.com/yoshinorim/MySlowTranCapture,下载后解压


#安装

How to use:
* Install libpcap, libpcap-devel, boost, and boost-devel if not installed
* make
* make install
* Run myslowtrancapture

#运行

[root@xxxx MySlowTranCapture-master]# myslowtrancapture -f "tcp port 3306"
Monitoring any interface..
Filtering rule: tcp port
Logging transactions that take more than milliseconds..
........开始等待符合条件的输出

#默认检测事务时长是4秒,我们构造一个显式事务,持续时间5秒,看看输出结果

#MYSQL SESSION
mysql> select * from t1;
+------+
| id |
+------+
| |
| |
+------+
rows in set (0.00 sec) mysql> begin;delete from t1 where id=;select sleep();rollback;
Query OK, rows affected (0.00 sec) Query OK, row affected (0.00 sec) +----------+
| sleep() |
+----------+
| |
+----------+
row in set (5.00 sec) Query OK, rows affected (0.00 sec) mysql>
From 10.3.171.21:
// ::18.679918 ->
begin #事务开始
// ::18.679992 <-
GOT_OK
// ::18.679995 <-
GOT_OK
// ::18.680104 ->
delete from t1 where id= #这里看到了事务SQL
// ::18.680336 <-
GOT_OK
// ::18.680342 <-
GOT_OK
// ::18.680477 ->
select sleep()
// ::23.680669 <-
GOT_RES
// ::23.680677 <-
GOT_RES
// ::23.680973 ->
rollback #事务回滚

#事务时长=11:25:23-11:25:18=5秒

除了rollback,commit之外,给当前session设置autocommit=0/1,也会提交当前事务-------这句话有问题,单独开事务测试并没有提交,在这里看日志又像是事务终止了,需要再调查下。

From 10.3.171.21:
// ::37.484762 ->
begin
// ::37.484806 <-
GOT_OK
// ::37.484808 <-
GOT_OK
// ::37.484958 ->
delete from test
// ::37.485061 <-
GOT_OK
// ::37.485063 <-
GOT_OK
// ::37.485167 ->
select sleep()
// ::57.485276 <-
GOT_RES
// ::57.485279 <-
GOT_RES
// ::57.485442 ->
TRAN_END BY set autocommit= #set autocommit= From 10.3.139.151:

产生上面输出的SQL是这样的:

mysql> begin;delete from test;select sleep();set autocommit=;
Query OK, rows affected (0.00 sec) Query OK, rows affected (0.00 sec) +------------+
| sleep() |
+------------+
| |
+------------+
row in set ( min 19.98 sec) Query OK, rows affected (0.00 sec) mysql>

追踪MySQL中长时间运行的事务的更多相关文章

  1. MySQL查看当前运行的事务和执行的账户

    -- 查看当前运行的事务,这点在变更表结构之前必须要查看select * from information_schema.innodb_trx; -- 查看当前运行的事务的账户和事务开始的时间,及其事 ...

  2. Linux中长时间运行程序的方法

    一.场景: 如果临时有一个命令需要长时间运行,比如 python hello.py ,什么方法能最简便的保证它在后台稳定运行呢?解决方法:      当用户注销(logout)或者网络断开时,终端会收 ...

  3. Mysql查询正在运行的事务以及杀掉它

    查询 正在执行的事务:SELECT * FROM information_schema.INNODB_TRX 根据这个事务的线程ID(trx_mysql_thread_id): 可以使用mysql命令 ...

  4. Mysql查询正在运行的事务

    查询 正在执行的事务:SELECT * FROM information_schema.INNODB_TRX 根据这个事务的线程ID(trx_mysql_thread_id): 可以使用mysql命令 ...

  5. strace追踪mysql执行语句

    一.strace参数 strace是Linux环境下的一款程序调试工具,用来监察一个应用程序所使用的系统调用及它所接收的系统信息.追踪程序运行时的整个生命周期,输出每一个系统调用的名字,参数,返回值和 ...

  6. linux strace追踪mysql执行语句 (mysqld --debug)

    转载请注明出处:使用strace追踪多个进程 http://www.ttlsa.com/html/1841.html http://blog.itpub.net/26250550/viewspace- ...

  7. MySQL隔离性及Spring事务

    一.数据库事务ACID特性 必须要掌握事务的4个特性,其中事务的隔离性之于MySQL,对应4级隔离级别. 原子性(Atomicity): 事务中的所有原子操作,要么都能成功完成,要么都不完成,不能停滞 ...

  8. mysql(函数,存储过程,事务,索引)

    函数 MySQL中提供了许多内置函数: 内置函数 一.数学函数 ROUND(x,y) 返回参数x的四舍五入的有y位小数的值 RAND() 返回0到1内的随机值,可以通过提供一个参数(种子)使RAND( ...

  9. MySQL全面瓦解14:事务

    关于事务 我们在数据库中需要执行一个系列的操作的时候,要保证这个系列执行的连续性和完整性,要么整个系列的执行都成功,要么就全部失败(只要有一个步骤失败,其他均回滚到之前的状态), 保证不会存在一部分成 ...

随机推荐

  1. python 几种方法实现随机生成8位同时包含数字、大写字符、小写字符密码的小程序

    python 实现随机生成包8位包含大写字母.小写字母和数字的密码的程序.要求:1用户输入多少次就生成多少条密码,2要求密码必须同时包含大写字母.小写字母和数字,长度8位,不能重复代码如下: impo ...

  2. CSS选择器分类总结

    一.选择器语法及其意义(pattern and meaning) Pattern Meaning CSS level E an element of type E 标记选择器,匹配所有标签名为E的元素 ...

  3. BitAdminCore框架更新日志20180529

    索引 NET Core应用框架之BitAdminCore框架应用篇系列 框架演示:http://bit.bitdao.cn 框架源码:https://github.com/chenyinxin/coo ...

  4. .net生成条形码

    1..net 标准库(.net standard 2.0) Nuget添加引用:ZXing.Net生成条形码,ZXing.Net.Bindings.ImageSharp生成图片 public stat ...

  5. iterm2 恢复默认设置

    如果你设置了Iterm2的默认字体,然后感觉不好看又忘记默认字体是什么的时候 执行如下命令,重新启动iTerm2即可: defaults delete com.googlecode.iterm2

  6. poj1125

    题目大意:哎,意思看了半天,看了别人的解释才明白,就是说从一个经纪人出发传递消息,直到所有人都收到消息 也就是说只要找到该经纪人到其它所有点的最短距离中的最大一个时间,就说明最后一个也收到消息了. 而 ...

  7. 【xsy1201】 随机游走 高斯消元

    题目大意:你有一个$n*m$的网格(有边界),你从$(1,1)$开始随机游走,求走到$(n,m)$的期望步数. 数据范围:$n≤10$,$m≤1000$. 我们令 $f[i][j]$表示从$(1,1) ...

  8. Swift 基本数据类型与运算符表达式

    // // main.swift // LessonSwift01 // // Created by lanouhn on 16/1/25. // Copyright © 2016年 齐彦坤. All ...

  9. h5仿微信、支付宝数字键盘|微信支付键盘|支付宝付款键盘

    html5仿微信支付数字键盘|仿支付宝键盘|h5仿微信密码输入键盘|自定义数字键盘 很早之前由于项目需求,就有开发过一个h5仿微信支付键盘,这几天就把之前的数字键盘模块独立出来,重新整理开发成demo ...

  10. QuantLib 金融计算——修复 BatesProcess 中的两个 Bug

    QuantLib 金融计算--修复 BatesProcess 中的两个 Bug 我发现了 BatesProcess 中的两个 Bug: 基类 HestonProcess::factors 的返回值取决 ...