日々精進

新しく学んだことを書き留めていきます

楽観ロックでもデッドロックは発生する

sqlでDBのデータをupdateする場合、updateした行はcommitされるまでロックされるため、 複数行を複数回SQLを実行してUpdateすると、デッドロックが発生する可能性がある。詳細は以下サイト参照。

blog.livedoor.jp

ただし、複数行のUpdateがAtomicな操作で一度に行われればデッドロックは起きない。 なので対策としてはテーブル・レコードの更新順を決めてみんなでそれを守るか、bulk insertを使うなどして一度のupdate実行でデータを更新する、になるかなと思う。 DBにはデッドロック検知機能があるらしいので保険としてそれを使うと良さそう。

oss-db.jp