接上一篇,未提交的事务导致锁等待,锁住一段时间后又提交了(也可能是回滚),锁释放业务继续运行。那么我们如何知道产生锁的事务是在跑什么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,下载后解压


#安装

  1. How to use:
  2. * Install libpcap, libpcap-devel, boost, and boost-devel if not installed
  3. * make
  4. * make install
  5. * Run myslowtrancapture

#运行

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

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

  1. #MYSQL SESSION
  2. mysql> select * from t1;
  3. +------+
  4. | id |
  5. +------+
  6. | |
  7. | |
  8. +------+
  9. rows in set (0.00 sec)
  10.  
  11. mysql> begin;delete from t1 where id=;select sleep();rollback;
  12. Query OK, rows affected (0.00 sec)
  13.  
  14. Query OK, row affected (0.00 sec)
  15.  
  16. +----------+
  17. | sleep() |
  18. +----------+
  19. | |
  20. +----------+
  21. row in set (5.00 sec)
  22.  
  23. Query OK, rows affected (0.00 sec)
  24.  
  25. mysql>
  1. From 10.3.171.21:
  2. // ::18.679918 ->
  3. begin #事务开始
  4. // ::18.679992 <-
  5. GOT_OK
  6. // ::18.679995 <-
  7. GOT_OK
  8. // ::18.680104 ->
  9. delete from t1 where id= #这里看到了事务SQL
  10. // ::18.680336 <-
  11. GOT_OK
  12. // ::18.680342 <-
  13. GOT_OK
  14. // ::18.680477 ->
  15. select sleep()
  16. // ::23.680669 <-
  17. GOT_RES
  18. // ::23.680677 <-
  19. GOT_RES
  20. // ::23.680973 ->
  21. rollback #事务回滚

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

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

  1. From 10.3.171.21:
  2. // ::37.484762 ->
  3. begin
  4. // ::37.484806 <-
  5. GOT_OK
  6. // ::37.484808 <-
  7. GOT_OK
  8. // ::37.484958 ->
  9. delete from test
  10. // ::37.485061 <-
  11. GOT_OK
  12. // ::37.485063 <-
  13. GOT_OK
  14. // ::37.485167 ->
  15. select sleep()
  16. // ::57.485276 <-
  17. GOT_RES
  18. // ::57.485279 <-
  19. GOT_RES
  20. // ::57.485442 ->
  21. TRAN_END BY set autocommit= #set autocommit=
  22.  
  23. From 10.3.139.151:

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

  1. mysql> begin;delete from test;select sleep();set autocommit=;
  2. Query OK, rows affected (0.00 sec)
  3.  
  4. Query OK, rows affected (0.00 sec)
  5.  
  6. +------------+
  7. | sleep() |
  8. +------------+
  9. | |
  10. +------------+
  11. row in set ( min 19.98 sec)
  12.  
  13. Query OK, rows affected (0.00 sec)
  14.  
  15. 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. asp.net——公共帮助类

    在项目开发中公共帮助类是必不可少的,这里记录一些自己摘录或自己编写的帮助类. 64位编码与解码: #region URL的64位编码 /// <summary> /// URL的64位编码 ...

  2. 蚂蚁男孩.队列组件(Framework.Mayiboy.Queue)

    它能做什么 主要是用来方便使用队列而诞生,该组件封装了Queue和Redis中的队列,能够通过简单配置就可以高效快速使用起来. 使用说明 一.    下载源码,自己手动编译,手动引用必要的程序集.(需 ...

  3. .net core 与ELK(4)后台运行els可视化工具和Kibana

    which nohup .bash_profile中并source加载 如果没有就安装吧 yum provides */nohup nohup npm run start & nohup ./ ...

  4. js中的基本类型与引用类型学习

    一.基本数据类型 ECMAScript 有 5 种原始类型(primitive type),即 Undefined.Null.Boolean.Number 和 String,也称为基本数据类型,ES6 ...

  5. django系列5.4--ORM中执行原生SQL语句, Python脚本中调用django环境

    ORM执行原生sql语句 在模型查询API不够用的情况下,我们还可以使用原始的SQL语句进行查询. Django 提供两种方法使用原始SQL进行查询:一种是使用raw()方法,进行原始SQL查询并返回 ...

  6. JQuery - 动态添加Html后,如何使CSS生效,JS代码可用?

    今天在开发JQuery Mobile程序时候,需要从服务器取得数据,随后显示在页面上的Listview控件中,数据完整获取到了,也动态添加到Listview控件中,但是数据对应的CSS没有任何效果了, ...

  7. Linux core 文件 gdb

    http://blog.csdn.net/mr_chenping/article/details/13767609 在程序不寻常退出时,内核会在当前工作目录下生成一个core文件(是一个内存映像,同时 ...

  8. 【LeetCode】390. 消除游戏

    题目 给定一个从1 到 n 排序的整数列表. 首先,从左到右,从第一个数字开始,每隔一个数字进行删除,直到列表的末尾. 第二步,在剩下的数字中,从右到左,从倒数第一个数字开始,每隔一个数字进行删除,直 ...

  9. 实践详细篇-Windows下使用Caffe训练自己的Caffemodel数据集并进行图像分类

    三:使用Caffe训练Caffemodel并进行图像分类 上一篇记录的是如何使用别人训练好的MNIST数据做训练测试.上手操作一边后大致了解了配置文件属性.这一篇记录如何使用自己准备的图片素材做图像分 ...

  10. 1301班 github安装及账户注册

    1.下载github 下载地址: http://git-scm.com/download/ 2.账号注册 进入:mukever.online 在右下角的“New user? Create an acc ...