MySQL 1つのテーブルでデッドロックさせる

デッドロック

どうも!デッドロック撲滅委員会会長の優です。

今回は1つのテーブルでも発生してしまうデッドロックのご紹介です!

 

こんなケース

『怪しいのはトランザクションしている箇所だ。でも2つのテーブルを操作しているわけでもないので、デッドロックは起こりえないはず。デッドロックってことはなさそうだけど??さっぱり原因が不明だ…。サーバスペックあげたら解決するかな???』

 

そんな時、それはやはりデッドロックかもしれません。

 

バックナンバー

 

 

1テーブルでもデッドロックは発生する

上記のようにテーブルを作成します。

 

 

デッドロック

 

 

レコードの更新順によっては、1つのテーブルでもたすきがけとなりデッドロックが発生します。

複数レコードを日時などの範囲指定でいっきに更新する時など発生しがちです。

 

解決には?

デッドロック

 

FOR UPDATEで排他ロックをかけてあげればOKです。

 

 

 

 

 

デッドロックをログに出したい

innodb_print_all_deadlocksをONにすればエラーログとしてログに出力することが出来ます。

 

現在の設定を確認します。

OFFになっていますね。

 

 

 

 

デッドロックのログを見てみよう!

実は事前に設定あるので、こんな風にデッドロックの箇所を確認することが出来ます。

 

お疲れ様です。

 

 

最新情報をチェックしよう!
>システム構築・保守に特化した会社です。

システム構築・保守に特化した会社です。

システムの構築・保守運用「システムガーディアン」 社内システム担当が欲しいが、専属で雇うほどの仕事量はない。 必要な時に必要なだけ頼りたいというお悩みを持つ企業様へ専門知識を持って対応を行っております。 サーバから各種システムまで自社・他社で構築されたシステムに対してサポートを行っております。

CTR IMG