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

ホーム > 業務日誌 > スタッフ別 > > MySQL 1つのテーブルでデッドロックさせる

デッドロック

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

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

 

こんなケース

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

 

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

 

バックナンバー

 

 

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

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

 

 

デッドロック

 

 

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

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

 

解決には?

デッドロック

 

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

 

 

 

 

 

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

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

 

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

OFFになっていますね。

 

 

 

 

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

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

 

お疲れ様です。

 

 

金広 優(エンジニア)

この記事を書いた人:金広 優(エンジニア)

システムガーディアン爆弾処理班。アクセス負荷対策やNginxへの移行案件が多いこの頃。IBM BlueMix InfrastructureやAWSなどクラウド案件が多くなってきました。

この記事に関してのお問い合わせ
御連絡・ご返信は原則2営業日以内を予定しております。
お急ぎの場合は、お手数ですが下記電話でもご対応をしております。

システムガーディアン株式会社
受付時間:平日9:00~18:00
受付担当:坪郷(つぼごう)・加藤
電話:03-6758-9166