mysql 记录死锁_mysql 如何记录全部的死锁

我们都知道使用命令:

SHOW engine innodb STATUS \G

可以看到死锁的记录,

不过仅仅是

LATEST DETECTED DEADLOCK。

也就是说很有可能看不全。。。

除非你每秒去执行一下show engine innodb status。。。

只能借助外部的工具了:

pt-deadlock-logger

http://www.percona.com/doc/percona-toolkit/2.1/pt-deadlock-logger.html

它会监视show engine innodb status的输出,

把死锁的记录保存到文件或者数据表中。

看一下如何操作:

# pt-deadlock-logger --create-dest-table --dest D=test,t=deadlocks u=root,h=127.0.0.1

–dest 表示保存到数据库。 D是数据库名,t是表名。

mysql> SHOW CREATE TABLE test.deadlocks\G

*************************** 1. ROW ***************************

TABLE: deadlocks

CREATE TABLE: CREATE TABLE `deadlocks` (

`server` CHAR(20) NOT NULL,

`ts` datetime NOT NULL,

`thread` INT(10) UNSIGNED NOT NULL,

`txn_id` BIGINT(20) UNSIGNED NOT NULL,

`txn_time` SMALLINT(5) UNSIGNED NOT NULL,

`user` CHAR(16) NOT NULL,

`hostname` CHAR(20) NOT NULL,

`ip` CHAR(15) NOT NULL,

`db` CHAR(64) NOT NULL,

`tbl` CHAR(64) NOT NULL,

`idx` CHAR(64) NOT NULL,

`lock_type` CHAR(16) NOT NULL,

`lock_mode` CHAR(1) NOT NULL,

`wait_hold` CHAR(1) NOT NULL,

`victim` tinyint(3) UNSIGNED NOT NULL,

`query` text NOT NULL,

PRIMARY KEY (`server`,`ts`,`thread`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1

开始监视:

# pt-deadlock-logger --daemonize --run-time=3000 --dest D=test,t=deadlocks u=root,h=127.0.0.1

获取结果:

mysql> SELECT * FROM test.deadlocks\G

*************************** 1. ROW ***************************

server: 127.0.0.1

ts: 2012-09-17 12:13:36

thread: 32

txn_id: 0

txn_time: 113

USER: root

hostname: localhost

ip:

db: world

tbl: City

idx: Name

lock_type: RECORD

lock_mode: X

wait_hold: w

victim: 0

query: UPDATE City SET name='New york2' WHERE name='New York'

*************************** 2. ROW ***************************

server: 127.0.0.1

ts: 2012-09-17 12:13:36

thread: 33

txn_id: 0

txn_time: 110

USER: root

hostname: localhost

ip:

db: world

tbl: City

idx: Name

lock_type: RECORD

lock_mode: X

wait_hold: w

victim: 1

query: UPDATE City SET Name='Seattle2' WHERE name='Seattle'

保存到数据表中,就可以使用sql语句(比如group by)做出某些统计了。

不过mysql5.6自带这个功能了:

http://dev.mysql.com/doc/refman/5.6/en/innodb-parameters.html#sysvar_innodb_print_all_deadlocks

再不过,它只能保存到mysql的出错日志中。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值