Percona提供的percona-toolkit提供很多实用功能,这里着重介绍如何监控死锁.

pt-deadlock-logger基本用法

Usage: pt-deadlock-logger [OPTIONS] DSN

解释:指定DSN死锁信息,它可以标准输出到屏幕也可以记入到表中或者日志文件,OPTIONS就是要加的参数了.

在这里做个模拟产生死锁的试验,例子如下:

session1:

mysql> create table lock1 (id int,name char(20),address varchar(50));
Query OK, 0 rows affected (0.15 sec)

mysql> create table lock2 (id int,name char(20),address varchar(50));
Query OK, 0 rows affected (0.15 sec)

mysql> insert into lock1 values (1,'aa','beijing');
Query OK, 1 row affected (0.00 sec)

mysql> insert into lock1 values (2,'bb','shanghai');
Query OK, 1 row affected (0.02 sec)

mysql> insert into lock1 values (3,'cc','shenzhen');
Query OK, 1 row affected (0.01 sec)

mysql> insert into lock2 values (1,'dd','beijing');                   
Query OK, 1 row affected (0.01 sec)

mysql> insert into lock2 values (2,'ee','tianjin'); 
Query OK, 1 row affected (0.01 sec)

mysql> insert into lock2 values (3,'ff','henan');   
Query OK, 1 row affected (0.01 sec)

mysql> select * from lock1;
+------+------+----------+
| id   | name | address  |
+------+------+----------+
|    1 | aa   | beijing  |
|    2 | bb   | shanghai |
|    3 | cc   | shenzhen |
+------+------+----------+
3 rows in set (0.01 sec)

mysql> select * from lock2;
+------+------+---------+
| id   | name | address |
+------+------+---------+
|    1 | dd   | beijing |
|    2 | ee   | tianjin |
|    3 | ff   | henan   |
+------+------+---------+
3 rows in set (0.00 sec)

mysql> set autocommit=0;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from lock1 where id=1 for update;   
+------+------+---------+
| id   | name | address |
+------+------+---------+
|    1 | aa   | beijing |
+------+------+---------+
1 row in set (0.00 sec)

session2
mysql> use test;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> set autocommit=0;                            
Query OK, 0 rows affected (0.00 sec)

mysql>  select * from lock2 where id=1 for update;  
+------+------+---------+
| id   | name | address |
+------+------+---------+
|    1 | dd   | beijing |
+------+------+---------+
1 row in set (0.00 sec)

session1
mysql> select * from lock2 where id=1 for update; ---锁等待

session2
mysql> select * from lock1 where id=1 for update;   
ERROR 1213 (40001): Deadlock found when trying to get lock; try restarting transaction

OK,已经产生死锁了.现在用pt-deadlock-logger分析一下
[root@localhost ~]# pt-deadlock-logger --run-time=10 --interval=3 --create-dest-table --dest D=test,t=deadlocks u=root,p=xxxxx
server ts thread txn_id txn_time user hostname ip db tbl idx lock_type lock_mode wait_hold victim query
localhost.localdomain 2014-01-23T16:04:02 22 0 100 root localhost  test
lock2 GEN_CLUST_INDEX RECORD X w 0 select * from lock2 where id=1 for
update
localhost.localdomain 2014-01-23T16:04:02 23 0 54 root localhost  test
lock1 GEN_CLUST_INDEX RECORD X w 1 select * from lock1 where id=1 for
update

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

继续看deadlock表里是否存储信息
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| deadlocks      |
| lock1          |
| lock2          |
+----------------+
3 rows in set (0.00 sec)

mysql> select * from deadlocks\G
*************************** 1. row ***************************
   server: localhost.localdomai
       ts: 2014-01-23 16:04:02
   thread: 22
   txn_id: 0
 txn_time: 100
     user: root
 hostname: localhost
       ip: 
       db: test
      tbl: lock2
      idx: GEN_CLUST_INDEX
lock_type: RECORD
lock_mode: X
wait_hold: w
   victim: 0
    query: select * from lock2 where id=1 for update
*************************** 2. row ***************************
   server: localhost.localdomai
       ts: 2014-01-23 16:04:02
   thread: 23
   txn_id: 0
 txn_time: 54
     user: root
 hostname: localhost
       ip: 
       db: test
      tbl: lock1
      idx: GEN_CLUST_INDEX
lock_type: RECORD
lock_mode: X
wait_hold: w
   victim: 1
    query: select * from lock1 where id=1 for update
2 rows in set (0.00 sec)

mysql>

测试表明死锁信息已经写入到了表中,记录的是2条导致死锁的SQL还有包括库、用户等等很详细的信息.对于我们可以利用pt-deadlock-logger,查看到底哪些SQL引起死锁方便定位.

利用pt-deadlock-logger监控死锁的更多相关文章

  1. 16 利用Zabbix完成windows监控

    点击返回:自学Zabbix之路 16 利用Zabbix完成windows监控 1.安装zabbix_agentd 1.1.下载zabbix_agentd监控客户端软件安装包(windows操作系统客户 ...

  2. 17 利用Zabbix完成VMare监控

    点击返回:自学Zabbix之路 17 利用Zabbix完成VMare监控 最近在研究通过Zabbix监控VMware vSphere,Zabbix Documentation 3.0 从文档中我们看到 ...

  3. SQL Server扩展事件-- 使用system_health默认跟踪会话监控死锁

    SQL Server扩展事件(Extended Events)-- 使用system_health默认跟踪会话监控死锁 转自:http://blog.51cto.com/ultrasql/160037 ...

  4. 利用FileSystemWatcher实现磁盘文件监控

    马上放假了,好开森啊O(∩_∩)O哈哈~ ——————————————————————————————————————————————————————— 昨天逛园子,发现了一个FileSystemWa ...

  5. Linux下利用nc命令来监控检测服务器的端口使用情况(转载)

    最近碰到一个项目,前端用apache htttpd进行发布(80端口),通过双机负载均衡转发到后端的两个tomcat进行处理(8081和8082端口),现在需要随时监控这三个端口的情况,一旦down掉 ...

  6. 利用Windows性能计数器(PerformanceCounter)监控

    一.概述 性能监视,是Windows NT提供的一种系统功能.Windows NT一直以来总是集成了性能监视工具,它提供有关操作系统当前运行状况的信息,针对各种对象提供了数百个性能计数器.性能对象,就 ...

  7. 利用wget 和 curl 监控网站是否正常

    监控网站URL是否正常最常见的方法莫过于wget和curl命令了,这两个命令都是非常强大,参数也非常多,下面列举几个常用的参数. wget  常用命令参数:--spider              ...

  8. zabbix利用自带模板-监控mysql性能

    环境: zabbix3.4.4 mariadb 5.5.56 要求:  利用zabbix 自带的模板 监控mariadb 上的 并发连接数,慢查询数量,增删改查.请求流量带宽,mysql响应流量带宽等 ...

  9. ORA-00060: Deadlock detected 模拟死锁产生与解决方案

    死锁:死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程 ...

随机推荐

  1. 鼠标点击输入框文字消失 value placeholder 以及JQ实现效果 (仿京东的输入框效果)

    鼠标点击输入框文字消失 value实现方法  placeholder实现方法     以及JQ实现placeholder效果 <input type="text" value ...

  2. 腾讯云TDSQL审计原理揭秘

    版权声明:本文由孙勇福原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/244 来源:腾云阁 https://www.qclo ...

  3. ijg库解码超大型jpeg图片

    1. ijg库解码超大型jpeg图片(>100M)的时候,如何避免内存溢出. 采用边解码边压缩的策略,每次解码一行或者若干行图片数据,然后对于这些解码的数据,进行DQT(量化处理,过滤掉高频的数 ...

  4. App_GlobalResources.afvubzdv.resources.dll”--“拒绝访问。“

    在使用ArcGIS Viewer for Silverlight创建应用程序的时候有时会出现编译错误 前面的忘了  最后是App_GlobalResources.afvubzdv.resources. ...

  5. Web移动应用调试工具——Weinre

    如今人们也越来越习惯在手机上浏览网页,而在手机上这些针对桌面浏览器设计的网页经常惨不忍睹.Web应用开发者需要针对手机进行界面的重新设计,但是手机上并没有称心如意的调试工具(如Firebug.web ...

  6. POJ 3020 Antenna Placement 匈牙利算法,最大流解法 难度:1

    http://poj.org/problem?id=3020 #include <cstdio> #include <cstring> #include <vector& ...

  7. SPOJ GSS1 静态区间求解最大子段和

    题目大意: 给定n个数,再给q个区间询问,希望在区间s,t中找到一段连续的子序列使其和最大 因为询问上万,节点数50000,明显是用线段树去做,这里很明显的区间更新,唯一写起来有点恶心的是询问 每一个 ...

  8. 在 Vultr VPS 中 以 Debian 8 i386 (jessie) 为 操作系统 平台 手动 搭建 PPTP VPN 全过程

    更新服务器并安装 PPTP 服务  apt-get update apt-get upgrade apt-get install pptpd 编辑 /etc/pptpd.conf 找到 #locali ...

  9. iOS 图片填充 UIImageView (contentMode)

    掐指算下来做iOS开发也是有两年多的时间了,然后今天一个超级常用的控件让我颜面大跌,于是我准备把自己的丢人行径公之于众.如果您看到我这篇文章时和我一样,也是刚刚知道这项功能,那么您就当收获了一个... ...

  10. The data is said to include information from networks

    The data is said to include information from networks as well as from individual computers and smart ...