04. pt-deadlock-logger
死锁:是指两个或则多个事务在同一个资源上相互占用,并请求锁定对方占用的资源,而导致恶性循环的现象;
当产生死锁的时候,MySQL会回滚一个小事务的SQL,确保另一个完成。
上面是死锁的概念,而在MySQL中innodb会出现死锁的情况,但是查看死锁却很不“智能”。
只能通过 show engine innodb status 查看,但只保留最后一个死锁的信息,之前产生的死锁都被刷掉了。
下面介绍的工具却很容易做到记录。
pt-deadlock-logger [OPTIONS] DSN
pt-deadlock-logger:显示指定的DSN的死锁日志信息,他能够标准输出到屏幕也可以把信息写日志文件中(--log参数)甚至可以保留到指定的表中(--dest参数),
该工具默认是永久执行,除非指定--run-time 或 --iterations 。
用法:
pt-deadlock-logger --run-time=10 --interval=3 u=admin,p=admin,h=192.168.100.101,P=3306|pt-align
pt-deadlock-logger --run-time=10 --interval=3 u=admin,p=admin,h=192.168.100.101,P=3306 --create-dest-table --dest D=db01,t=pt_deadlocks
参数:
--create-dest-table :创建指定的表。
--dest :创建存储死锁信息的表。
--database :-D,指定链接的数据库。
--table :-t,指定存储的表名。
--log :指定死锁日志信息写入到文件。
--run-time :运行时长,默认永久
--interval :运行间隔时间,默认30s。
u,p,h,P :链接数据库的信息。
测试:
session 1:
start transaction;
update t01 set name='lulu' where code>3;
session 2:
start transaction;
update t01 set name='kaka' where code>2;
session 1:
update t01 set name='jojo' where code>2;
死锁出现了!
看pt-deadlock-logger的运行情况:
-------------------------------
pt-deadlock-logger --run-time=10 --interval=3 u=admin,p=admin,h=192.168.100.101,P=3306|pt-align
192.168.100.101 2018-11-19T18:14:44 9 0 34 admin localhost db01 t01 PRIMARY RECORD X w 1 update t01 set name='jojo' where code>2
192.168.100.101 2018-11-19T18:14:44 10 0 26 admin localhost db01 t01 PRIMARY RECORD X w 0 update t01 set name='kaka' where code>2
-------------------------
pt-deadlock-logger --run-time=10 --interval=3 u=admin,p=admin,h=192.168.100.101,P=3306 --create-dest-table --dest D=db01,t=pt_deadlocks
select * from pt_deadlocks\G
*************************** 1. row ***************************
server: 192.168.100.101
ts: 2018-11-19 18:14:44
thread: 9
txn_id: 0
txn_time: 34
user: admin
hostname: localhost
ip:
db: db01
tbl: t01
idx: PRIMARY
lock_type: RECORD
lock_mode: X
wait_hold: w
victim: 1
query: update t01 set name='jojo' where code>2
*************************** 2. row ***************************
server: 192.168.100.101
ts: 2018-11-19 18:14:44
thread: 10
txn_id: 0
txn_time: 26
user: admin
hostname: localhost
ip:
db: db01
tbl: t01
idx: PRIMARY
lock_type: RECORD
lock_mode: X
wait_hold: w
victim: 0
query: update t01 set name='kaka' where code>2
2 rows in set (0.00 sec)
---------------------------------------------------------------------------
vim pt-deadlocks-logger.cnf
host=192.168.100.101
port=3306
user=admin
password=admin
tab
log=/root/test/pt-deadlocks.log
daemonize
interval=3
pt-deadlock-logger --config pt-deadlocks-logger.cnf
在后台长久运行,检测死锁,记录到文件里,以配置文件运行。
---------------------------------------------------------------------------
总结:
在检查数据库是死锁信息的时候,又多了一个选择。
该工具也是通过show engine innodb status的信息来计算的。
在mysql 5.6.2中,innodb_print_all_deadlocks这个设置可以看到死锁的情况。
victim就是回滚的事务为 1
04. pt-deadlock-logger的更多相关文章
- 从别人的代码中学习golang系列--01
自己最近在思考一个问题,如何让自己的代码质量逐渐提高,于是想到整理这个系列,通过阅读别人的代码,从别人的代码中学习,来逐渐提高自己的代码质量.本篇是这个系列的第一篇,我也不知道自己会写多少篇,但是希望 ...
- 【Gin-API系列】Gin中间件之日志模块(四)
日志是程序开发中必不可少的模块,同时也是日常运维定位故障的最重要环节之一.一般日志类的操作包括日志采集,日志查询,日志监控.日志统计等等.本文,我们将介绍日志模块在Gin中的使用. Golang如何打 ...
- Java:并发笔记-04
Java:并发笔记-04 说明:这是看了 bilibili 上 黑马程序员 的课程 java并发编程 后做的笔记 本章内容-3 线程状态转换 活跃性 Lock 3.10 重新理解线程状态转换 假设有线 ...
- Ubuntu 14.04 中 安装elasticsearch2.*+logstash2.*+kibana
在Ubuntu 14.04 上安装单机版ELK 2.*(脚本化) 1.判断是否为root权限 if [ "${UID}" -ne 0 ]; then echo "You ...
- java.lang.NoClassDefFoundError: Lorg/slf4j/Logger;
如果你出现类似如下错误 1. Install tomcat7 in my home directory and set up `CATALINA_HOME` environment variable ...
- Win7&Ubuntu12.04 双系统引导问题
周末的时候手贱,重装系统,导致原来的ubuntu12.04和win7双系统的引导不见了,所以在此进行一下说明,如何修复. 1. win7和ubuntu12.04双系统引导修复 问题描述: 在重装 ...
- java.util.logging.Logger 使用详解
概述: 第1部分 创建Logger对象 第2部分 日志级别 第3部分 Handler 第4部分 Formatter 第5部分 自定义 第6部分 Logger的层次关系 参考 第1部分 创建Logger ...
- ubuntu12.04+kafka2.9.2+zookeeper3.4.5的伪分布式集群安装和demo(java api)测试
博文作者:迦壹 博客地址:http://idoall.org/home.php?mod=space&uid=1&do=blog&id=547 转载声明:可以转载, 但必须以超链 ...
- ubuntu 12.04 安装 redis
原文地址:http://ijonas.com/software-development/nosql/412/ 1 Installing Redis 2.6.x on Ubuntu 12.04 and ...
- Ubuntu 14.04下安装eclipse搭建C++开发环境
安装过程分为两部分:1.JAVA开发环境,即JDK的安装:2.eclipse的安装: 一.安装包下载 1.JDK官网下载地址:http://www.oracle.com/technetwork/jav ...
随机推荐
- PPT的感想
①double:使用double类型的数值进行计算, 其结果是不精确的.因为double类型的数值占用64个二进制数,除去最高位表示正负符号的位,在最低位上一定会与实际数据存在误差. 这个涉及到二进制 ...
- Mesh.CombineMeshes
[Mesh.CombineMeshes] public void CombineMeshes(CombineInstance[] combine, bool mergeSubMeshes = true ...
- 获取cookie
1.cookie是存储在用户本地终端的数据,实际上是一小段的文本信息 2.cookie的作用 帮助web站点保存有关的访问者的信息,方便用户的访问,如记住用户名和密码,实现自动登录功能案例:查看访问我 ...
- NBU 还原LINUX ORACLE RAC数据库(CRM)
CRM集群数据库恢复 linux centos 6.6 oracle 11.2.0.3 集群环境 1.53 oraclea 1.54 oracleb 在linux操作系统root用户下安装好NBUci ...
- GreenDao-自定义SQL查询-AndroidStudio
/** * 功能:员工查询 * 方法参数: * strEmpIdOrEmpName:员工ID 或者 员工名称 * strQueryType:员工查询类型 "0": "员工 ...
- PERL 正则表达式简介
来源:脚本之家 网址:http://www.jb51.net/article/17429.htm 一.简介 二.匹配操作符 三.模式中的特殊字符 1.字符+ 2.字符 []和[^] 3.字符 *和? ...
- poj1942(求组合数)
题目链接:http://poj.org/problem?id=1942 题意:实际上这道题就是求C(n+m,n). 思路:n.m的范围在unsigned中,所以不能递推计算组合数,可以采用公式C(a, ...
- pta l2-1紧急救援(Dijkstra)
题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805073643683840 题意:给n个城市,m条边,每个城市 ...
- windows下python文件与文件夹操作
一.导入模块 imoprt os 二.获取python当前执行的目录 s=os.getcwd() 三.创建文件 import datetime import os dtime=datetime.dat ...
- TZOJ 4848 货车运输(最大生成树+倍增lca)
描述 A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物,司机们想知道每辆车在不超过车辆限重的情况下,最多能运多 ...