2

MySQL の InnoDB の行レベル ロックを利用する高性能の Django Web アプリケーションがあります。コードのある時点で、(プロセス A で) を使用してテーブル内の特定の行が使用可能かどうかを確認しますSELECT … FOR UPDATE。その行を使用している別のプロセス (B) があり、最初にそこに到達した場合、その行に排他ロックが発生し、A は「ロック待機タイムアウト」例外を取得します。A はこれをキャッチし、(同様のSELECT … FOR UPDATEアプローチで) 別の行を試すために移動します。

ただし、ロック待機タイムアウトが発生したときに何が起こるかは 100% わかりません。B が終了してロックを解放した後、A の「select … for update」クエリがタイムアウトし、A が別の行をロックするために移動した場合でも、A に排他ロックが与えられますか?

または(これは直感的に起こると思います)、Aがロックを取得しようとして失敗し、次に進み、Bがコミットして終了した後:Aにロックを与える試みはこれ以上ありませんか?

正規のソースであるため、公式の MySQL ドキュメントからの参照/引用が最適です。ロックを取得しようとしてタイムアウトになったときに何が起こるかについて具体的に説明しているドキュメントは見つかりませんでした。

4

1 に答える 1