読み取りコミットモード(postgres)で次のトランザクションを実行したいとします。
T1: r(A) -> w(A)
T2: r(A) -> w(A)
操作がこの順序で呼び出された場合:
r1(A)->r2(A)->w1(A)->c1->w2(A)->c2
T2はr(A)で待機する必要があると思います。T1は、後で書き込みたいため、最初の読み取り時にAの排他ロックを設定するためです。しかし、MVCCには読み取りロックはありませんか?
今私は2つの質問があります:
JDBCを使用してデータを読み取り、読み取ったデータを挿入するためにseparteコマンドを実行した場合。データベースは、読み取りのみのときに排他ロックを作成する必要があることをどのように認識しますか?私の知る限り、2PLでは読み取りロックを書き込みロックに増やすことは許可されていません。
私の仮定は間違っていると思います...このシナリオはどこで待機しますか、それとも1つのトランザクションが強制終了されますか?コミットされていない読み取りは、失われた更新を許可するべきではありませんが、これがどのように機能するかはわかりません。
誰かが私を助けてくれたら嬉しいです。ありがとう