死锁监控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. 如何在vue中请求本地json文件

    1..修改webpack.base.conf.js 文件中添加'/static': resolve('static'),如下所示,此时存放于static的json文件就可以通过/static/xxx. ...

  2. Oracle 数据库、表、方案的逻辑备份与恢复

    数据库(表)的逻辑备份与恢复 逻辑备份是指使用工具export将数据对象的结构和数据导出到文件的过程,逻辑恢复是指当数据库对象被破坏而使用工具import利用备份的文件把数据对象导入到数据库的过程,逻 ...

  3. 机器学习——LightGBM

    基础概念 LigthGBM是boosting集合模型中的新进成员,它和xgboost一样是对GBDT的高效实现,很多方面会比xgboost表现的更为优秀.原理上它和GBDT及xgboot类似,都采用损 ...

  4. 持续集成:TeamCity 的安装和使用

    TeamCity 本文初衷 让大家了解持续集成(CI),以及入门了解 JetBrains 家的 TeamCity 的一些简单实用. TeamCity 的一些复杂使用我暂时也不会,一样也是要看文档的,所 ...

  5. HTTP协议(二)header标头说明

    HTTP协议(二):header标头说明 Header 解释 示例 Accept-Ranges 表明服务器是否支持指定范围请求及哪种类型的分段请求 Accept-Ranges: bytes Age 从 ...

  6. codeforces 675 C ——Money Transfers——————【思维题】

    Money Transfers time limit per test 1 second memory limit per test 256 megabytes input standard inpu ...

  7. 文档类型DTD,DOCTYPE和浏览器模式

    出处:http://blog.csdn.net/freshlover/article/details/11616563 浏览器从服务端获取网页后会根据文档的DOCTYPE定义显示网页,如果文档正确定义 ...

  8. webservice随记

    WebService:跨平台.系统.跨语言间相互调用 CXF:Axis(Apache)-> Axis2(Apache)XFire -> CXF(Celtrix + XFire)(Apach ...

  9. jxls实现基于excel模板的报表

    此文章是基于 搭建Jquery+SpringMVC+Spring+Hibernate+MySQL平台 一. jar包介绍 1. commons-collections-3.2.jar 2. commo ...

  10. Android-多线程和进程

    http://www.cnblogs.com/plokmju/p/android_ProcessOrThread.html 对于单线程模型,Android有两个规则: 不能阻塞UI线程 不能在工作线程 ...