4

SELECT ... FOR UPDATEやなどの一部のデータベース機能は、ON DELETE CASCADE使用されるロック順序がデータベースで指定されていないため、暗黙のうちにデッドロックに対して脆弱です。特定の実装は言うまでもなく、この動作が SQL 標準で指定されていないことを示唆する2 つの 議論を見つけました。そのため、ロックの順序を制御できないという前提で作業しています (少なくとも、その方法は明らかではありません)。

ロック順序に依存できない場合、データベースのデッドロックを回避するにはどうすればよいでしょうか?

デッドロックを回避する必要がない場合 (これを私に納得させるには、非常に懸命に戦わなければならないでしょう)、どうすればよいでしょうか?

この質問はデータベースにとらわれないものであるため、使用しているデータベースを聞かないでください。

4

2 に答える 2

0

デッドロックを引き起こす可能性のある機能を使用しないでください。 ON DELETE CASCADE順序を強制してデッドロックを回避する方法で書き直すことができます。

SELECT ... FOR UPDATEは、ロックを回避できるように特別に設計されています。行を選択してロックできるため、すべてのスレッドで一貫した順序を維持できます。

すべての更新のロック順序を理解していないと、デッドロックが発生する可能性があります。

于 2013-01-15T03:31:02.333 に答える