yarthur
(Yarthur)
1
【 TiDB 使用环境】
【概述】: tidb 5.0 feature 异步提交事务 (Async Commit)的介绍里面讲事务在第一阶段提交成功后就会返回结果给客户端,系统会在后台异步执行第二阶段提交操作,降低事务提交的延迟。
但是如果在第二阶段commit的时候出现问题了怎么办呢,client已经收到success的响应,我看这个issue(https://github.com/tikv/tikv/issues/8316)里面说会在read的时候recovery procedure,但是如果recovery的时候rollback了,也保证了事务的原子性,但那对于用户来说相当于这个事务就没执行,但是用户收到的响应是success,感觉数据就丢了呢?
麻烦解答下
cfzjywxk
(cfzjywxk)
2
@yarthur
在 2PC 提交事务中,事务最终状态单独取决于事务 primary key 的 commit 状态,所以故障恢复只需根据这一点进行判断。
异步提交事务中,事务的最终状态在 prewrite 结束之后就已经确定,故障恢复过程需要查看所有事务参与者的状态进而最终决定的状态。
如果 client 收到成功,说明所有 prewrite 请求都已经收到成功应答,即便异步 commit 没有成功,故障恢复也会将事务恢复为提交状态。恢复过程相比于 2PC 也要复杂许多。
1 个赞
yarthur
(Yarthur)
3
就是说只要prewrite成功,就可以通过一些机制来实现事务一定是能够commited的状态是吗
cfzjywxk
(cfzjywxk)
4
@yarthur
可以这么理解,也就是上文提到的故障恢复机制。
system
(system)
关闭
5
此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。