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 ...
随机推荐
- pip 离线安装
pip download ansible -d . --trusted-host mirrors.aliyun.com pip install ansible-2.7.5.tar.gz --user ...
- 使用Js控制ReactRouter路由
[使用Js控制ReactRouter路由] 首先引入PropTypes: const PropTypes = require('prop-types'); 然后定义context的router属性: ...
- 【Django】关于scss 的安装
今天看视频教程的时候发现老师的样式文件改用了scss(然鹅我买的1块钱特价课程其实是节选出来的,所以前面没有看到过关于scss的介绍) 然后我本以为把原来的css改名字为scss就行,然鹅没有效果. ...
- with as 如何工作
with as 如何工作 with如何工作? Python对with的处理还是很机智滴.基本思想就是with所求值的对象必须有一个__enter__()方法,一个__exit__()方法 紧跟wi ...
- pta l2-28(秀恩爱分得快)
题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805054698012672 题意:给n个人,m张照片,在同一张 ...
- Python+Selenium学习--分页处理
场景 我们在测试一个web 应用时,经常出现翻页的情况,下面介绍翻页场景 代码 #!/usr/bin/env python # -*- codinfg:utf-8 -*- ''' @author: J ...
- python之图像识别
1. 安装配置 1.pip install pytesseract 2.pip install pillow 3.安装tesseract-ocr:http://jaist.dl.sourceforge ...
- Python+Selenium学习--简单对象定位
场景 测试对象的定位和操作是webdriver的核心内容,其中操作又是建立在定位的基础之上,因此对象定位就越发显得重要了. 定位对象的目的一般有下面几种 操作对象 获得对象的属性,如获得测试对象的cl ...
- Fiddler调试和Wireshark数据包分析
扫码时备注或说明中留下邮箱 付款后如未回复请至https://shop135452397.taobao.com/ 联系店主
- word 2016 加载 mathtype
1.加载wold: 首先打开word,选择选项-------加载项------管理(A),选择word加载项,点击转到 这儿显示的是我已经添加过的所以显示的有. 2.点击添加,找到你的mathtype ...