基于TimeStamp协议的事务回滚后执行顺序规则疑问
时间戳(Timestamp)协议事务回滚执行顺序说明
首先你的判断是正确的:时间戳协议中读操作规则要求,若发起读的事务时间戳 < 所访问数据项的WTS(写时间戳),说明已有更新的事务修改了该数据项,当前读操作拿到的是过期数据,因此T1执行R(T)时遇到WTS(T)=4触发回滚符合协议规则。
回滚后的执行顺序遵循以下核心规则:
- 事务触发回滚后,会先完成回滚清理动作:清除该事务此前对所有数据项的修改痕迹,同时系统会为回滚的事务分配新的更大的时间戳,其优先级低于所有已分配过时间戳的未终止、已提交事务
- 调度优先级由事务时间戳决定,时间戳越小优先级越高,优先级高的事务的待执行操作会被优先调度
对应你的场景执行顺序如下:
- 完成T1的回滚清理,为T1分配新的时间戳(假设原事务时间戳T1=1、T2=2、T3=3、T4=4,新T1时间戳为5,为当前最大时间戳,优先级最低)
- 先执行原调度队列中优先级更高的待执行操作,也就是你提到的未回滚时本要执行的
T3-R(N),后续继续按原优先级顺序执行所有无冲突的事务操作 - 等所有优先级高于新T1的事务的待执行操作全部处理完成后,再调度T1从自身操作的起始位置重新执行完整操作序列
如果T1重新执行过程中再次遇到读写冲突,会再次触发回滚、分配更大的新时间戳,直到无冲突完成执行或达到回滚次数上限被终止。
内容的提问来源于stack exchange,提问作者Tommy Mei
相关产品推荐
相关产品推荐

