製品&サポートサービス

pt-deadlock-logger

コマンド

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へログインします

deadlock-logger

→ これでデッドロックが発生するので、下記コマンドを実行して書き込まれた情報を確認します

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 を有効にすると同様の情報がエラーログへ記録されます

各データベース保守サービス比較
各データベース保守サービス見積依頼
MySQLサポートサービス
MySQL Editions
Oracle Cloudトータルサポート
Percona
MariaDBプロダクト・サポート・サービス
エンタープライズOSSサポート
高可用性ソリューション
OSSシステムソリューション
Navicat
SQL Diagnostic Manager for MySQL
SYNCNEL
OSS保守サポートサービス
Microsoft Azure
お問い合わせ
各MySQL保守サービス見積依頼
スマートスタイルOSSストア
Oracle Gold Partner

ページトップへ