摘要:

死锁:是指两个或则多个事务在同一个资源上相互占用,并请求锁定对方占用的资源,而导致恶性循环的现象;当产生死锁的时候,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.25
ts: 2013-10-28 16:47:00
thread: 99
txn_id: 0
txn_time: 8
user: root
hostname: localhost
ip:
db: test
tbl: dead_tab
idx: PRIMARY
lock_type: RECORD
lock_mode: X
wait_hold: w
victim: 0
query: update dead_tab set name='AA' where id >1
*************************** 2. row ***************************
server: 192.168.200.25
ts: 2013-10-28 16:47:00
thread: 100
txn_id: 0
txn_time: 16
user: root
hostname: localhost
ip:
db: test
tbl: dead_tab
idx: PRIMARY
lock_type: RECORD
lock_mode: X
wait_hold: w
victim: 1
query: 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. Percona Toolkit mysql辅助利器

    1 PT介绍 Percona Toolkit简称pt工具—PT-Tools,是Percona公司开发用于管理MySQL的工具,功能包括检查主从复制的数据一致性.检查重复索引.定位IO占用高的表文件.在 ...

  2. Percona Toolkit工具使用

    Percona Toolkit简称pt工具-PT-Tools,是Percona公司开发用于管理MySQL的工具,功能包括检查主从复制的数据一致性.检查重复索引.定位IO占用高的表文件.在线DDL等 下 ...

  3. Centos 安装Percona Toolkit工具集

    1.下载 下载地址:   https://www.percona.com/downloads/percona-toolkit/LATEST/ [root@bogon ~]# wget https:// ...

  4. RDS for MySQL 如何使用 Percona Toolkit

    Percona Toolkit 包含多种用于 MySQL 数据库管理的工具. 下面介绍常用的 pt-online-schema-change  和  pt-archiver 搭配 RDS MySQL ...

  5. Percona Toolkit工具集介绍

    部署mysql工具是一个非常重要的部分,所以工具的可靠性和很好的设计非常重要.percona toolkit是一个有30多个mysql工具的工具箱.兼容mysql,percona server,mar ...

  6. 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 ...

  7. Percona Toolkit工具连接MySQL 8报错的解决方案

    使用Percona Toolkit的工具连接MySQL 8.x数据库时,会遇到类似"failed: Plugin caching_sha2_password could not be loa ...

  8. Percona Toolkit 使用

    安装 percona-toolkit perl Makefile.PL make make test make install 默认安装到 /usr/local/bin 目录下 可能需要 DBI-1. ...

  9. 使用Percona Toolkit解决Mysql主从不同步问题【备忘】

    由于各种原因,mysql主从架构经常会出现数据不一致的情况出现,大致归结为如下几类 1:备库写数据 2:执行non-deterministic query 3:回滚掺杂事务表和非事务表的事务 4:bi ...

  10. Percona Toolkit 2.2.19 is now available

    New Features: 1221372: pt-online-schema-change now aborts with an error if the server is a slave, be ...

随机推荐

  1. Eclipse 安装插件后不显示的解决办法

    有时候一些 eclipse 插件安装之后,打开 eclipse 死活都不显示,这时候可以: ① 把 eclipse/configuration/org.eclipse.update 删除掉.出现这种情 ...

  2. SQl语句学习笔记(二)

    merge into        when matched then...  when not mached then... merge into t_road_pre_parameter a fr ...

  3. Mysql中mysqldump命令使用详解

    MySQL有很多可以导入数据的方法,然而这些只是数据传输中的一半,另外的一般是从MySQL数据库中导出数据.有许多的原因我们需要导出数据.一个重要的原因是用于备份数据库.数据的造价常常是昂贵的,需要谨 ...

  4. 《Effective C++》第三版笔记

    阅读此笔记前,请先阅读 <Effective C++>第二版笔记  和  <More Effective C++>笔记 这里只记录与上面笔记不同的条款,主要是 "面对 ...

  5. 采用ETL with RDBMS模式来实现ETL

    目前Teradata数据仓库的ETL作业采用ELT方式, 因为loading太重了, 需要将ETL压力转移到专门的ETL Server上. 对于ETL工具, 市场上已有很成熟的商业/开源工具, 比如I ...

  6. IE6 Must Die

    最近 Twitter 上很多人在推一个名为 IE6 Must Die 的活动, 参与的朋友可以通过头像转换服务在自己的头像上加上一个禁止 IE6 的图标, 很是拉风. Internet Explore ...

  7. HDU 5687 字典树插入查找删除

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=5687 2016百度之星资格赛C题,直接套用字典树,顺便巩固了一下自己对字典树的理解 #include< ...

  8. Java多线程基础知识(五)

    一. Java中的13个原子操作类 在Jdk1.5中,这个包中的原子操作类提供了一种用法简单,性能高效,线程安全的更新一个变量的方式. 1. 原子更新基本类型类 AtomicBoolean : 原子更 ...

  9. iOS开发——高级篇——UIDynamic 物理引擎

    一.UIDynamic 1.简介什么是UIDynamicUIDynamic是从iOS 7开始引入的一种新技术,隶属于UIKit框架可以认为是一种物理引擎,能模拟和仿真现实生活中的物理现象重力.弹性碰撞 ...

  10. linux中chmod更改文件权限命令

    1. 命令格式: chmod [-cfvR] [--help] [--version] mode file 2. 命令功能: 用于改变文件或目录的访问权限,用它控制文件或目录的访问权限. 3. 命令参 ...