异步提交

【 TiDB 使用环境】
【概述】: tidb 5.0 feature 异步提交事务 (Async Commit)的介绍里面讲事务在第一阶段提交成功后就会返回结果给客户端,系统会在后台异步执行第二阶段提交操作,降低事务提交的延迟。

但是如果在第二阶段commit的时候出现问题了怎么办呢,client已经收到success的响应,我看这个issue(https://github.com/tikv/tikv/issues/8316)里面说会在read的时候recovery procedure,但是如果recovery的时候rollback了,也保证了事务的原子性,但那对于用户来说相当于这个事务就没执行,但是用户收到的响应是success,感觉数据就丢了呢?

麻烦解答下:joy:

@yarthur

在 2PC 提交事务中,事务最终状态单独取决于事务 primary key 的 commit 状态,所以故障恢复只需根据这一点进行判断。
异步提交事务中,事务的最终状态在 prewrite 结束之后就已经确定,故障恢复过程需要查看所有事务参与者的状态进而最终决定的状态。
如果 client 收到成功,说明所有 prewrite 请求都已经收到成功应答,即便异步 commit 没有成功,故障恢复也会将事务恢复为提交状态。恢复过程相比于 2PC 也要复杂许多。

1 个赞

就是说只要prewrite成功,就可以通过一些机制来实现事务一定是能够commited的状态是吗

@yarthur
可以这么理解,也就是上文提到的故障恢复机制。

此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。