摘要:

死锁:是指两个或则多个事务在同一个资源上相互占用,并请求锁定对方占用的资源,而导致恶性循环的现象;当产生死锁的时候,MySQL会回滚一个小事务的SQL,确保另一个完成。上面是死锁的概念,而在MySQL中innodb会出现死锁的情况,但是查看死锁却很不“智能”。只能通过 show engine innodb status 查看,但只保留最后一个死锁的信息,之前产生的死锁都被刷掉了。下面介绍的工具却很容易做到记录。

前提:

下载地址:wget www.percona.com/downloads/percona-toolkit/2.2.2/percona-toolkit-2.2.2.tar.gz

安装方法:perl Makefile.PL;make;make install

使用方法:

pt-deadlock-logger [OPTIONS] DSN

pt-deadlock-logger:显示指定的DSN的死锁日志信息,他能够标准输出到屏幕也可以把信息写日志文件中(--log参数)甚至可以保留到指定的表中(--dest参数),该工具默认是永久执行,除非指定--run-time--iterations

用法:

pt-deadlock-logger --ask-pass --run-time=10 --interval=3 --create-dest-table --dest D=test,t=deadlocks u=root,P=3306,h=192.168.200.25
Enter MySQL password:

参数:

--create-dest-table :创建指定的表。
--dest              :创建存储死锁信息的表。
--database          :-D,指定链接的数据库。
--table             :-t,指定存储的表名。
--log               :指定死锁日志信息写入到文件。
--run-time          :运行次数,默认永久
--interval          :运行间隔时间,默认30s。
u,p,h,P           :链接数据库的信息。

以上的参数,已经够用,更多的参数信息见官网说明。

测试:

运行pt-deadlock-logger,操作数据库:

session1:

root@localhost : test 04:46:11>select * from dead_tab;
+----+------+------+---------+
| id | name | age  | address |
+----+------+------+---------+
|  1 | a    |   33 | NULL    |
|  2 | bbb  |   34 | NULL    |
|  3 | bbb  |   35 | NULL    |
+----+------+------+---------+
3 rows in set (0.00 sec)root@localhost : test 04:46:24>start transaction;
Query OK, 0 rows affected (0.00 sec)root@localhost : test 04:46:31>update dead_tab set name ='A' where id >2;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

section2:

root@localhost : test 04:46:13>start transaction;
Query OK, 0 rows affected (0.01 sec)root@localhost : test 04:46:48>update dead_tab set name='AA' where id >1;
…………
…………
一直在等待着...

回到session1:

root@localhost : test 04:46:44>update dead_tab set name ='AA' where id >2;
ERROR 1213 (40001): Deadlock found when trying to get lock; try restarting transaction死锁出现了!

看pt-deadlock-logger的运行情况:

zhoujy@zhoujy:~$ pt-deadlock-logger --ask-pass --create-dest-table --dest D=test,t=deadlocks u=root,P=3306,h=192.168.200.25
Enter MySQL password:
server ts thread txn_id txn_time user hostname ip db tbl idx lock_type lock_mode wait_hold victim query
192.168.200.25 2013-10-28T16:47:00 99 0 8 root localhost  test dead_tab PRIMARY RECORD X w 0 update dead_tab set name='AA' where id >1
192.168.200.25 2013-10-28T16:47:00 100 0 16 root localhost  test dead_tab PRIMARY RECORD X w 1 update dead_tab set name ='AA' where id >1

死锁被打印出来,看看是否写到表里:

root@localhost : test 04:32:45>select * from deadlocks\G;
*************************** 1. row ***************************server: 192.168.200.25ts: 2013-10-28 16:47:00thread: 99txn_id: 0txn_time: 8user: roothostname: localhostip: db: testtbl: dead_tabidx: PRIMARY
lock_type: RECORD
lock_mode: X
wait_hold: wvictim: 0query: update dead_tab set name='AA' where id >1
*************************** 2. row ***************************server: 192.168.200.25ts: 2013-10-28 16:47:00thread: 100txn_id: 0txn_time: 16user: roothostname: localhostip: db: testtbl: dead_tabidx: PRIMARY
lock_type: RECORD
lock_mode: X
wait_hold: wvictim: 1query: update dead_tab set name ='AA' where id >1
2 rows in set (0.00 sec)

结果表明死锁信息已经写入到了表中,记录的内容是2条产生的sql。继续同样的步骤再执行2次出现死锁的SQL来验证是之前的死锁信息否被刷写掉:

root@localhost : test 04:53:29>select count(*) from deadlocks;
+----------+
| count(*) |
+----------+
|        6 |
+----------+
1 row in set (0.02 sec)

继续被写入到表中。可以看到多个产生死锁的sql,而不仅仅是最后一条产生死锁的sql。

总结:

在检查数据库是死锁信息的时候,又多了一个选择。该工具也是通过show engine innodb status的信息来计算的。在mysql 5.6.2中,innodb_print_all_deadlocks这个设置可以看到死锁的情况。

percona-toolkit 之 【pt-deadlock-logger】说明相关推荐

  1. mysql 工具_最全Mysql运维工具Percona Toolkit使用案例

    Percona Toolkit简介 Percona Toolkit简称pt工具,是Percona公司开发用于管理MySQL的工具,DBA熟悉掌握后将极大提高工作效率. Percona toolkit有 ...

  2. Want to archive tables? Use Percona Toolkit’s pt-archiver--转载

    原文地址:https://www.percona.com/blog/2013/08/12/want-to-archive-tables-use-pt-archiver/ Percona Toolkit ...

  3. mysql开启yum search pt-mysql_Centos使用MySQL工具Percona Toolkit

    Centos使用MySQL工具Percona Toolkit 安装Percona Toolkit 的Repo 得以支持直接用yum 安装二进制包 yum install -y https://www. ...

  4. percona toolkit系列(gh-ost)

    背景 和上篇pt-osc同样功能的工具gh-ost(使用的是binlog复制数据),目前是为了修改表结构 online DDL 写在前面 (该工具并不是percona toolkit中的,只是为了读者 ...

  5. percona toolkit 简介

    os: centos 7.4 db: mysql 5.7 software: toolkit 3.0.8 percona toolkit 是一款percona公司推出的优秀的开源的mysql分析工具. ...

  6. Percona Toolkit安装

    TIPS 本文基于Percona Toolkit 3.2.0,理论支持所有版本. Percona Toolkit是一款MySQL世界里面非常实用的工具套件,本文来探讨如何安装它. 工具列表 pt-al ...

  7. Percona Toolkit工具简介

    系列文章目录 第一章:sql_mode模式 第二章:optimize table.analyze table.alter table.gh-ost 第三章:InnoDB MVCC原理 第四章:sql语 ...

  8. pt mysql_pt(Percona Toolkit)工具详解:(二)工具介绍

    之所以先写介绍,那是因为太多工具,要查起来非常麻烦,要先做个汇总介绍,方便查找. 介绍 1.找出重复的索引和外键 pt-duplicate-key-checker 这个工具会将重复的索引和外键都列出来 ...

  9. pt mysql_pt(Percona Toolkit)工具介绍

    例子:[root@node1 ~]# pt-show-grants --user=root --password='abc123'实际意义不大,主要是比较mysql权限以及进行版本控制5.在多台服务器 ...

  10. Percona Toolkit使用之pt-heartbeat

    pt-heartbeat的功能是监控MySQL复制延迟. 用法如下: pt-heartbeat [OPTIONS] [DSN] --update|--monitor|--check|--stop pt ...

最新文章

  1. [C] 图的深度优先遍历
  2. 跳槽季,TurboMail邮件系统支招防员工邮件泄密
  3. JNLP(jar包签名)
  4. Android 数据库综述(一) 数据库片的升级与数据的迁移操作
  5. 零值比较--BOOL,int,float,指针变量与零值比
  6. tomcat ---- web.xml
  7. 第八届蓝桥杯第四题方格分割
  8. 面试必掌握的redis的问题
  9. 学成在线(一)项目介绍
  10. chromebook刷机_你能在大学里得到一本Chromebook吗?
  11. multi task训练torch_torch中创建multitask网络结构
  12. 个人信用报告今起可上网查询
  13. Java基础知识(十) 多线程
  14. GitHub 近 70K 星,命令行的艺术!
  15. 金融时间序列分析:1. 基础知识
  16. JAVA毕业设计_机房管理系统
  17. CSS 盒子模型,绝对定位和相对定位
  18. java开发拖拉图形爬虫工具
  19. 阿里云:加大NoSQL数据库软硬件一体化技术自研
  20. 警告: Exception encountered during context initialization - cancelling refresh attempt: org.springfram

热门文章

  1. 刀塔霸业android安装包,刀塔霸业安卓下载-刀塔霸业安卓官网版(dota2自走棋)下载v1.0...
  2. php wiki搭建,wiki网站搭建
  3. css滑动星星评分,纯css3滑动星星打分动画特效
  4. linux设置不同地址,ubuntu20.04设置静态ip地址(包括不同版本)
  5. php页面重定向到html,javascript-页面重定向(PHP,HTML)
  6. myeclipse将普通java项目转换成maven项目_Myeclipse Java项目转换成Maven项目
  7. 20190828:(leetcode习题)回文链表
  8. socketio mysql_Golang + Socket.io
  9. c语言 消除最后一个空格,新人提问:如何将输出时每行最后一个空格删除
  10. java枚举很少被使用_java中枚举原来还可以这么用