死锁监控pt-deadlock-logger
首先我们要创建一个表用来保存死锁的信息:
CREATE TABLE deadlocks (
server char() NOT NULL,
ts timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
thread int unsigned NOT NULL,
txn_id bigint unsigned NOT NULL,
txn_time smallint unsigned NOT NULL,
user char() NOT NULL,
hostname char() NOT NULL,
ip char() NOT NULL, -- alternatively, ip int unsigned NOT NULL
db char() NOT NULL,
tbl char() NOT NULL,
idx char() NOT NULL,
lock_type char() NOT NULL,
lock_mode char() NOT NULL,
wait_hold char() NOT NULL,
victim tinyint unsigned NOT NULL,
query text NOT NULL,
PRIMARY KEY (server,ts,thread)
) ENGINE=InnoDB;
然后开启死锁进程模拟死锁:
[root@mxqmongodb2 bin]# ./pt-deadlock-logger h=172.16.16.35,P=,u=root,p= --dest h=172.16.16.35,P=,D=test,t=deadlocks,u=root,p=
server ts thread txn_id txn_time user hostname ip db tbl idx lock_type lock_mode wait_hold victim query
172.16.16.35 --21T14:: root 172.16.16.35 test test idx RECORD X w update test set id1= where id=
172.16.16.35 --21T14:: root 172.16.16.35 test test idx RECORD X w update test set id1= where id=
在MySQL打开两个终端:
先看一下模拟表结构:
mysql> show create table test;
+-------+------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+------------------------------------------------------------------------------------------------------------------------------------------+
| test | CREATE TABLE `test` (
`id` int() DEFAULT NULL,
`id1` int() DEFAULT NULL,
KEY `idx` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-------+------------------------------------------------------------------------------------------------------------------------------------------+
row in set (0.00 sec)
mysql> select * from test;
+------+------+
| id | id1 |
+------+------+
| | |
| | |
| | |
+------+------+
rows in set (0.00 sec)
session1:
mysql> begin;
Query OK, rows affected (0.00 sec)
mysql> select id1 from test where id= for update;
+------+
| id1 |
+------+
| |
| |
+------+
rows in set (0.00 sec)
mysql> update test set id1= where id=;
Query OK, row affected (0.00 sec)
Rows matched: Changed: Warnings:
mysql> commit
session2:
mysql> begin;
Query OK, rows affected (0.00 sec)
mysql> select id1 from test where id= for update;
+------+
| id1 |
+------+
| |
+------+
row in set (0.00 sec)
mysql> update test set id1= where id=;
ERROR (): Deadlock found when trying to get lock; try restarting transaction
mysql> commit
可见,MySQL提示已经出现了死锁,我们去看一下存储表:
mysql> select * from deadlocks\G
*************************** . row ***************************
server: 172.16.16.35
ts: -- ::
thread:
txn_id:
txn_time:
user: root
hostname:
ip: 172.16.16.35
db: test
tbl: test
idx: idx
lock_type: RECORD
lock_mode: X
wait_hold: w
victim:
query: update test set id1= where id=
*************************** . row ***************************
server: 172.16.16.35
ts: -- ::
thread:
txn_id:
txn_time:
user: root
hostname:
ip: 172.16.16.35
db: test
tbl: test
idx: idx
lock_type: RECORD
lock_mode: X
wait_hold: w
victim:
query: update test set id1= where id=
rows in set (0.00 sec)
这会记录死锁的相关信息,但是这个对性能还是有一定影响的,一般情况就别开启了。

pt-deadlock-logger使用的更多相关文章

  1. c3p0 APPARENT DEADLOCK!!! Creating emergency threads for unassigned pending tasks

    2018-01-04 15:02:03,319 ---com.mchange.v2.async.ThreadPoolAsynchronousRunner: com.mchange.v2.async.T ...

  2. ABP源码分析八:Logger集成

    ABP使用Castle日志记录工具,并且可以使用不同的日志类库,比如:Log4Net, NLog, Serilog... 等等.对于所有的日志类库,Castle提供了一个通用的接口来实现,我们可以很方 ...

  3. org.apache.log4j.Logger详解

    org.apache.log4j.Logger 详解 1. 概述 1.1. 背景 在应用程序中添加日志记录总的来说基于三个目的 :监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析工 ...

  4. Java程序日志:java.util.logging.Logger类

    一.Logger 的级别 比log4j的级别详细,全部定义在java.util.logging.Level里面.各级别按降序排列如下:SEVERE(最高值)WARNINGINFOCONFIGFINEF ...

  5. [LeetCode] Logger Rate Limiter 记录速率限制器

    Design a logger system that receive stream of messages along with its timestamps, each message shoul ...

  6. .Net Core Logger 实现log写入本地文件系统

    .net core 自带一个基础的logger框架Microsoft.Extensions.Logging. 微软默认实现了Microsoft.Extensions.Logging.Console.d ...

  7. Android源码——Logger日志系统

    Android的Logger日志系统是基于内核中的Logger日志驱动程序实现的. 日志保存在内核空间中 缓冲区保存日志   分类方法:日志的类型  +   日志的输出量   日志类型:   main ...

  8. java.lang.NoClassDefFoundError: Lorg/slf4j/Logger;

    如果你出现类似如下错误 1. Install tomcat7 in my home directory and set up `CATALINA_HOME` environment variable ...

  9. PX 和PT的区别

    字体大小的设置单位,常用的有2种:px.pt.这两个有什么区别呢? 先搞清基本概念:px就是表示pixel,像素,是屏幕上显示数据的最基本的点: pt就是point,是印刷行业常用单位,等于1/72英 ...

  10. LeetCode 359 Logger Rate Limiter

    Problem: Design a logger system that receive stream of messages along with its timestamps, each mess ...

随机推荐

  1. c/c++ int long float double 表示范围

    引自https://blog.csdn.net/xuexiacm/article/details/8122267

  2. ocr 资源

    1. PIL 在图片上添加中文 https://blog.csdn.net/m0_37606112/article/details/78511381 2 .Chinese Text in the Wi ...

  3. (转)用mysql自带工具mysqlslap对数据库进行压力测试

    http://aolens.blog.51cto.com/7021142/1901557-------用mysql自带工具mysqlslap对数据库进行压力测试 mysqlslap是mysql自带的工 ...

  4. 使用swiper来实现轮播图

    使用swiper来实现轮播图 swiper实现轮播图几乎是没有一点点技术含量,但是用起来却很方便,包括对移动端的支持也很好. 由于简单这里当然就不会去详细介绍了,推荐两个网址: 1.http://ww ...

  5. Android JPush极光推送应用

    JPush纠结了5-6个小时,一直报下面的错误,纠结! [AndroidUtil] AndroidManifest.xml missing required intent filter for Pus ...

  6. 使用NDK编译含JNI的Android项目常见问题解决方案

    有时候,自己下载的或者拷贝过来的JNI项目出现莫名错误,通常是找不到头文件,可能解决方案如下: Removing the C nature: The only way I could find to ...

  7. Bash实践:抽样检测数据迁移至Redis集群后的数据一致性

    熟悉了一段时间的Bash编程,因此借此任务操作一把bash编程,主要涉及到Redis单节点与Redis集群的操作 1. 任务背景 近日有个任务需要将历史的Redis(主从节点)中的数据迁移至Redis ...

  8. WINDOWS安装mysql5.7.20

    MSI安装包链接 http://pan.baidu.com/s/1mhI0SMO 提取密码 gaqu 安装前要把老版本的MYSQL卸载干净 之前用官网的archive免安装版安装一直失败,放弃,用MS ...

  9. JS原型与原型链图解

  10. 常用工具说明--搭建基于rietveld的CodeReview平台(未测试)

    为什么要codereview . 整个团队的编码风格是统一的. . 有高手能对自己的代码指点一二,从而提高编码水平. . 减少低级错误的出现 . 约束自己写高质量的代码,因为是要给人看的. 我们对co ...