MySQL中用Percona Toolkit監視死結

來源:互聯網
上載者:User

percona,是mysql的一個分支了,相信不少朋友都很熟悉了,而percona-toolkit是其推出的工具包,裡面集合了很多不錯的實用的mysql維護工具包,今天開始學習下這個工具,首先看的是如何檢查死結

如果用傳統的檢查死結的方法,可以使用比如:SHOW ENGINE INNODB STATUS,但這個方法查看的是最新的死結,如果有大量的死結的話,則不容易看得清楚了;

這個時候可以使用pt-deadlock-logger這個percona-toolkit工具包中的小工具了;

基本用法為:

pt-deadlock-logger u=user,p=password,h=host

也就是使用者名稱密碼和host了。在使用這個工具時,通常是運行一段時間去檢查,

比如可以指定參數:--run-time 。此外還可以指定把結果儲存到檔案(--log參數)

或者保持到表格中去(--dest參數),下面看一個例子:

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

這個時候預設建立一個test.deadlocks表,看下結構:

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'

  這裡可以清晰看到有兩條記錄導致死結了,而且鎖的類型都看的很清楚了,提一下,
在mysql 5.6中,innodb_print_all_deadlocks這個設定可以看到死結的情況了,很方便,參考http://dev.mysql.com/doc/refman/5.6/en/innodb-parameters.html#sysvar_innodb_print_all_deadlocks

Percona Toolkit 的詳細介紹:請點這裡
Percona Toolkit 的:請點這裡

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.