タダです.
Aurora のデッドロックの発生時に SHOW ENGINE INNODB STATUS
を実行し, LATEST DETECTED DEADLOCK
の詳細情報を抽出して開発メンバーに連携する作業が時折発生してどうにかならんかな〜と思っていた際に自分の改善案を持っていって所属のチームで相談してみたところ, innodb_print_all_deadlocks
というパラメーターを教えてもらいました.この記事ではこのオプションの概要と設定方法を記してきます.
innodb_print_all_deadlocks
の概要
innodb_print_all_deadlocks
は SHOW ENGINE INNODB STATUS
からデッドロックの情報についてのみ出力するパラメーターです.まさに自分が今回やろうとしてた改善に適うパラメーターでした.
このパラメータを有効にすると (1 に設定)、InnoDB ユーザートランザクションに関連するデッドロックが MySQL エラーログに記録されます。それ以外の場合、この情報は SHOW ENGINE INNODB STATUS コマンドを使用して最後のデッドロックについてのみ利用できます
引用記事
関連ドキュメント
Aurora MySQL で innodb_print_all_deadlocks
を有効化する
Aurora では innodb_print_all_deadlocks
はクラスターパラメーターグループにあり,再起動は不要で指定できます.加えて,エラーログでデッドロックの詳細情報が出力されるので CluoudWatch Logs の出力有効化を行います.これで準備万端です.
Aurora MySQL 設定パラメータ - Amazon Aurora
デッドロック発生時のログの中身
デッドロックを試しに発生した時の CloudWatch Logs の通知内容を確認してみます.デッドロックが発生すると transactions deadlock detected, dumping detailed information
のメッセージの次のログにまさに LATEST DETECTED DEADLOCK
の詳細情報が出力されていました(本記事では内容部分は割愛しています).この結果を通知してあげれば,データベースにログインするオペレーションも無くなり,開発メンバーもすぐに内容確認できて良い運用のカタチを目指せそうです.
2024-03-14 02:09:32 xxxInnoDB: transactions deadlock detected, dumping detailed information. 2024-03-14 02:09:32 xxx-03-14 02:09:32 xxx *** (1) TRANSACTION: ~各種情報~ *** (1) WAITING FOR THIS LOCK TO BE GRANTED: ~各種情報~ *** (2) TRANSACTION: ~各種情報~ *** (2) HOLDS THE LOCK(S): ~各種情報~ *** (2) WAITING FOR THIS LOCK TO BE GRANTED: ~各種情報~ *** WE ROLL BACK TRANSACTION (2) =====================================
まとめ
Aurora のデッドロックの詳細情報を CloudWatch Logs に出力するパラメーターと設定方法をまとめました.