待つだけでは循環を解けない
デッドロックは待ちの循環です。例えばAが行1をロックして行2を待ち、Bが行2をロックして行1を待つと、互いに相手を待ち続けます。PostgreSQLはこの循環を検出すると、どちらか一方のトランザクションを中断してデッドロックを解消します。同じ順序でロックを取得したり、トランザクションを短くしたりすることで、この循環が起きる機会を減らせます。
この課の目標
待ちの循環を見分け、同じロック順で減らす。
中断された処理はどうする?
デッドロックは待ちの循環です。例えばAが行1をロックして行2を待ち、Bが行2をロックして行1を待つと、互いに相手を待ち続けます。PostgreSQLはこの循環を検出すると、どちらか一方のトランザクションを中断してデッドロックを解消します。同じ順序でロックを取得したり、トランザクションを短くしたりすることで、この循環が起きる機会を減らせます。
待ちの循環を見分け、同じロック順で減らす。
中断された処理はどうする?