死锁:是指两个或则多个事务在同一个资源上相互占用,并请求锁定对方占用的资源,而导致恶性循环的现象;
当产生死锁的时候,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 ...
随机推荐
-
捉襟见肘之UIImagePickerController 和自定义照相机
目标:自拍并结合C++算法,识别人脸信息,第一步骤,调用相机并且自定义界面和转场效果 先复习一下 https://developer.apple.com/library/prerelease/tvos ...
-
jQuery 实现带下拉提示且自动填充的邮箱
/* ** 本文例子所引用的jQuery版本为 jQuery-1.8.3.min.js ** Author:博客园小dee*/ 本文用 jQuery 实现一个用户输入字符时出现能够提示邮箱后缀名的下拉 ...
-
解决myeclipse10.1导出War包出错:Security Alert:Integrity check error
解决myeclipse10.1导出War包出错:Security Alert:Integrity check error 解决myeclipse10.1不能导出war包报 ============== ...
-
Java_数据类型
变量就是申请内存来存储值. java的两大数据类型:内置数据类型和引用数据类型 数据类型 6种数据类型(4种整数型,2种浮点型),一种字符类型,一种布尔类型 数据类型 位数 描述 byte 8位 -1 ...
-
Java的家庭记账本程序(K)
日期:2019.3.10 博客期:043 星期日 呕吼~这里是编程菜鸟小Master,今天加油的把第二个模板套用了,更改了许多的设定,我想这一个程序的网页版也就到这里结束了,下面是一部分的展示图,想要 ...
-
Junit4 之 Assert 静态方法介绍
Junit中的assert方法全部放在Assert类中,总结一下junit类中assert方法的分类. 1.assertTrue/False([String message,]boolean cond ...
-
2019-04-22-day037-数据库的安装
内容回顾 进程 线程 协程之间的相同点和不同点 进程 : 内存隔离 操作系统级别 开销大 可以利用多核 计算机中资源分配的最小单位 线程 : 内存共享 操作系统级别 开销中 Cpython解释器下不能 ...
-
SQL Server清空日志以及查看日志大小语句
为了安全起见,使用的时候,先数据备份一遍 作者hongb:SQL Server:查看SQL日志文件大小命令:dbcc sqlperf(logspace) https://www.cnblogs.com ...
-
Mvc_ActionResult返回值
//ViewResult 表示HTML的页面内容 //EmptyResult 表示空白的页面内容 //RedirectResult 表示定位到另外一个URL //JsonResult 表示可以运用到A ...
-
Java全栈程序员之03:Ubuntu下安装idea
JetBrains的产品我曾经用过很长一段时间,它们是resharper和dotcover.VS号称宇宙最强IDE,直到它遇到了resharper,我们才知道,原来vs可以更好.DotCover是一个 ...