浅析 TiDB 二阶段提交

简介: 浅析 TiDB 二阶段提交

关键内容说明:

TiDB 对于每个事务,会涉及改动的所有key中,选择出一个作为当前事务的Primary Key,其他的则为Secondary keys。
当Primary Key提交成功,标识整个事务提交成功,否则失败。
Secondary keys,则是等Primary Key提交成功后,异步并行提。
pd 会产生全局唯一递增时间戳tso
TiDB二阶段提交简图

image.png

(图1,底图选用tidb官方)
细节描述

在图中④之前还有几部操作:

tidb 开始prewrite操作:向所有涉及改动的 region 并发执行 prewrite 请求,如果某个prewrite失败了。
如果报错为 keylslook 和 WriteConfict, 都会重新获取tso,重新启动2pc。其他错误则会报错。

2.在tidb 开始commit 也就是图⑥的时候会执行,

tidb向primay所在的region发起commit。

如果失败 先执行回滚操作,然后根据错误判断是否重试:

lockNotEXist 重新获取tso作为start_ts 启动2pc提交。

这几步操作,我简单描述一下 在tidb开始写key的操作,如果遇到锁相关的错误,都会进行一个重新获取tso,重新启动2pc的提交。

TiKV二阶段提交简图
image.png

(图2,底图选用tidb官方,图中的⑦应该是TiKV的准备操作)
TiDB的二阶段提交,还应该包含TiDB对TiKV的二阶段提交,下面用问答的形式来简单说明一下。

问:那么什么时候 TiDB会对TiKV发起二阶段提交?

答:在图1中⑥操作成功之后,TiDB向客户端返回事务成功之前,TiDB会对TiKV发起二阶段提交。

问: TiKV在二阶段提交中如何保证key的一致性?

答:图2中的⑦就是TiKV准备的操作,先对被操作的key进行锁冲突检测,然后对被操作的key进行加锁的一个操作。

在图2中的 ③和④其实为了保证,key已经在TiKV的准备工作中,已经被锁住。然后在内存中循环添加key的信息 write(key,start_ts,commit_ts) 写入一条,和删除锁住key的信息lock(key,start_ts)。当数据没有问题 在写入底层的raft-key中,从而保证了一致性。

从此整个TiDB二阶段提交提交大体完成。

总结 ,在二阶段提交中

PD 提供:提供全局唯一递增时间戳 tso发放。管理 raft-kv 集群

TiKV提供:分布式 kv 存储引擎,提供了 mvcc 功能。可以读取到历史版本数据。

TiDB提供:MySQL协议的解析,相对TiKV而已TiDB是客户端。

参考文章:

https://andremouche.github.io/tidb/transaction_in_tidb.html 22

目录
相关文章
|
4月前
|
资源调度 监控 关系型数据库
在Flink CDC作业提交过程中,出现超时问题可能与多种因素有关
【2月更文挑战第8天】在Flink CDC作业提交过程中,出现超时问题可能与多种因素有关
233 11
|
4月前
|
关系型数据库 MySQL
mysql的日志为什么需要两阶段提交
mysql的日志为什么需要两阶段提交
|
6天前
分布式事务的两阶段提交和三阶段提交分别有什么优缺点?
【9月更文挑战第9天】两阶段提交(2PC)和三阶段提交(3PC)是解决分布式系统事务一致性的机制。2PC实现简单,保证强一致性,但存在同步阻塞、单点故障和数据不一致风险。3PC通过引入超时机制减少阻塞时间,降低单点故障影响,但复杂性增加,仍可能数据不一致,并有额外性能开销。
|
27天前
|
SQL 消息中间件 OLAP
OneSQL OLAP实践问题之BIGO ClickHouse实现二阶段提交事务机制如何解决
OneSQL OLAP实践问题之BIGO ClickHouse实现二阶段提交事务机制如何解决
33 1
|
2月前
|
消息中间件 关系型数据库 MySQL
实时计算 Flink版操作报错合集之整库同步mysql到starRock提交任务异常,该如何处理
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
2月前
|
消息中间件 关系型数据库 MySQL
实时计算 Flink版产品使用问题之提交从savepoint恢复该如何完成
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
实时计算 Flink版产品使用问题之提交从savepoint恢复该如何完成
|
1月前
|
设计模式 运维 测试技术
提交阶段
提交阶段
23 0
|
4月前
|
SQL 关系型数据库 数据库
Flink CDC数据同步问题之处理更新业务失败如何解决
Flink CDC数据同步是指利用Flink CDC实现不同数据源之间的实时数据同步任务;本合集旨在提供Flink CDC数据同步的操作指南、性能优化建议和常见问题处理,助力用户高效实施数据同步。
|
4月前
|
canal SQL 关系型数据库
flink cdc 提交问题之提交任务异常如何解决
Flink CDC(Change Data Capture)是一个基于Apache Flink的实时数据变更捕获库,用于实现数据库的实时同步和变更流的处理;在本汇总中,我们组织了关于Flink CDC产品在实践中用户经常提出的问题及其解答,目的是辅助用户更好地理解和应用这一技术,优化实时数据处理流程。
|
中间件 Java 调度
Seata两阶段提交AT模式详解
Seata两阶段提交AT模式详解
612 0
Seata两阶段提交AT模式详解