製品&サポートサービス

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 (設定ファイルの編集)
# config for pt-deadlock-logger
# config for pt-deadlock-logger (MySQL のパスワードを記入)

シナリオ

デッドロック情報を保存するテーブルを作成するため、初回は保存用テーブル作成オプションをつけて実行します

(初回)

# pt-deadlock-logger --create-dest-table --dest D=test, t=deadlocks

(2回目以降)

# pt-deadlock-logger --dest D=test, t=deadlocks

MySQL内でデッドロックを発生させると、作成したテーブルに情報が書き込まれます
コンソールを2つ起動し、MySQLへログインします

mysql> START TRANSACTION; (コンソール1)
mysql> START TRANSACTION; (コンソール2)
mysql> SELECT id, title, body FROM articles WHERE id=1 LOCK IN SHARE MODE; (コンソール1)
mysql> SELECT id, title, body FROM articles WHERE id=1 LOCK IN SHARE MODE; (コンソール2)
mysql> UPDATE articles SET body= 'deadlock' WHERE id=1; (コンソール1)
mysql> UPDATE articles SET body= 'deadlock' WHERE id=1; (コンソール2)

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

mysql> SELECT * FROM deadlocks\G

結果

以下のように、エラー情報がdeadlocksテーブルに格納されていることが確認できます

pt-deadlock-logger01

また、pt-deadlock-logger のコマンドを実行したコンソールにも情報が標準出力されます

pt-deadlock-logger02

良い点

期間を指定してバックグラウンドで起動させ、指定のデータベーステーブルへデッドロック情報を保存したりする事が可能なので、デッドロックの監視を行う際等に有効です

その他

MySQL5.6 以降では、innodb_print_all_deadlocks を有効にすると同様の情報がエラーログへ記録されます

MySQLや関連ソリューションに関するお問い合わせ、お見積などがございましたら、ご連絡ください。

お問い合わせ各MySQL保守サービス見積依頼スマートスタイルOSSストア

ページトップへ