web-dev-qa-db-ja.com

最後のいくつかのinnodbデッドロックを表示する

Mysql/innodbで最新のデッドロックを表示できることがわかりましたが、過去のデッドロックを表示する方法はありますか?デッドロックには2つの問題があります。1つは重要で、もう1つは重要ではありません。重要性の低いデッドロックは1日に数回発生するため、「最新の」デッドロックになります。

12
gwgeller

MySQL 5.5.30で導入された設定があります: innodb_print_all_deadlocks

このオプションを有効にすると、InnoDBユーザートランザクションのすべてのデッドロックに関する情報がmysqldエラーログに記録されます。それ以外の場合は、SHOW ENGINE INNODB STATUSコマンドを使用して、最後のデッドロックに関する情報のみを表示します。 InnoDBは状態を即座に検出し、トランザクションの1つを自動的にロールバックするため、偶発的なInnoDBデッドロックは必ずしも問題ではありません。このオプションを使用して、アプリケーションにロールバックを検出して操作を再試行する適切なエラー処理ロジックがない場合にデッドロックが発生する理由をトラブルシューティングすることができます。多数のデッドロックは、複数のテーブルに対してDMLまたはSELECT ... FOR UPDATEステートメントを発行するトランザクションを再構築する必要があることを示している可能性があります。これにより、各トランザクションは同じ順序でテーブルにアクセスし、デッドロック状態を回避します。

この設定をmy.cnfに追加するだけです

[mysqld]
innodb_print_all_deadlocks = 1

または

[mysqld]
innodb_print_all_deadlocks = on

Mysqlを再起動する必要はありません。 mysqlにログインして実行するだけです

mysql> SET GLOBAL innodb_print_all_deadlocks = 1;

or

mysql> SET GLOBAL innodb_print_all_deadlocks = 'ON';

この設定は私にとっても初めてです。

それを試してみて、あなたの考えを私たちにすべて教えてください!!!

15
RolandoMySQLDBA