コマンド
pt-deadlock-logger [ オプション ] [ DSN ]
【必須項目】
- ・[ オプション ] : -p パスワード
【主なオプション】
- ・ –dest D=データベース名, t=テーブル名 : デットロック情報を保存するテーブルを指定します
- ・ –create-dest-table : 上記のオプションで指定したテーブルが存在しない場合、新規作成します
目的
データベースのデッドロック情報をダンプします
設定ファイル
上記の必須項目を、設定ファイルにまとめておきます
# touch /etc/percona-toolkit/pt-deadlock-logger.conf
# vi /etc/percona-toolkit/pt-deadlock-logger.conf
・設定ファイルの作成
# touch /etc/percona-toolkit/pt-deadlock-logger.conf
・設定ファイルの編集
# vi /etc/percona-toolkit/pt-deadlock-logger.conf
# config for pt-deadlock-logger
password =
・MySQL のパスワードを記入
password =
シナリオ
デッドロック情報を保存するテーブルを作成するため、初回は保存用テーブル作成オプションをつけて実行します
(初回)
# pt-deadlock-logger --create-dest-table --dest D=test, t=deadlocks
(2回目以降)
# pt-deadlock-logger --dest D=test, t=deadlocks
MySQL内でデッドロックを発生させると、作成したテーブルに情報が書き込まれます
コンソールを2つ起動し、MySQLへログインします
→ これでデッドロックが発生するので、下記コマンドを実行して書き込まれた情報を確認します
mysql> SELECT * FROM deadlocks\G
結果
以下のように、エラー情報がdeadlocksテーブルに格納されていることが確認できます
mysql> SELECT * FROM test.deadlocks\G
*************************** 1. row ***************************
server: localhost.localdomai
ts: 2017-04-04 00:45:44
thread: 21
txn_id: 0
txn_time: 127
user: root
hostname: localhost
ip:
db: employees
tbl: employees
idx: PRIMARY
lock_type: RECORD
lock_mode: X
wait_hold: w
victim: 0
query: update employees.employees set last_name='deadlock' where emp_no=10105
*************************** 2. row ***************************
server: localhost.localdomai
ts: 2017-04-04 00:45:44
thread: 22
txn_id: 0
mysql>
また、pt-deadlock-logger のコマンドを実行したコンソールにも情報が標準出力されます
[root@localhost Et]# pt-deadlock-logger --create-dest-table --dest D=test, t=deadlocks
server ts thread txn_id txn_time user hostname ip db tbl idx lock_type lock_mode wait_hold victim query
localhost.localdomain 2017-04-04T00:45:44 21 0 127 root localhost employees employees PRIMARY RECORD X w 0 update employees.employees set last_name='deadlock' where emp_no=10105
localhost.localdomain 2017-04-04T00:45:44 22 0 107 root localhost employees employees PRIMARY RECORD X w 1 update employees.employees set last_name='deadlock' where emp_no=10105
良い点
期間を指定してバックグラウンドで起動させ、指定のデータベーステーブルへデッドロック情報を保存したりする事が可能なので、デッドロックの監視を行う際等に有効です
その他
MySQL5.6 以降では、innodb_print_all_deadlocks を有効にすると同様の情報がエラーログへ記録されます