我最近开始学习数据库的事务和并发控制。 我的问题是关于两阶段协议中的回滚-有人可以向我解释,回滚后计划中的失败事务重新开始的确切时间是什么时候?
比方说,我以交易T1,T2,T3的时间表为例:
T1 ___________ T2 ___________ T3
R(J)_____________________
_____________ W(J)________
_____________ R(W)________
_____________ W(W)________
_________________________ R(R)
_________________________ W(R)
R(P)_____________________
_________________________ W(P)
R(R)_____________________
R(W)_____________________
W(JW)____________________
_________________________ R(JW)
_________________________ R(P)
_________________________提交
___________ commit _________
提交____________________
假设我正在按照此计划使用伤口等待模式运行Rigorous 2PL。然后,当T1到达第一个“ R(R)”时,T1会缠绕T3。我的问题是T3应该何时重启?
一般来说,有什么经验法则吗?
预先感谢