浅析 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

目录
相关文章
|
开发工具 Docker 容器
Docker(32)- 如何修改 docker 容器的启动参数
Docker(32)- 如何修改 docker 容器的启动参数
1954 0
Docker(32)- 如何修改 docker 容器的启动参数
|
11月前
|
存储 缓存 数据挖掘
StarRocks 原理详解:探索高效 OLAP 的奥秘
StarRocks 是一款高性能分析型数据仓库,采用向量化、MPP架构、CBO等技术,实现多维、实时、高并发的数据分析。它支持从各类数据源高效导入数据,兼容MySQL协议,并具备水平扩展、高可用等特性,广泛应用于实时数仓、OLAP报表等场景。StarRocks 解决了传统数仓在查询性能、数据导入、扩展性和灵活性等方面的挑战,助力企业实现数据驱动的决策。其分布式架构和智能物化视图等功能显著提升了查询效率,适用于大数据生态中的各种复杂需求。
1884 15
|
测试技术 持续交付 开发工具
Git版本控制在团队协作中具有重要作用
Git版本控制在团队协作中具有重要作用
458 154
|
敏捷开发 数据可视化 数据挖掘
如何通过问题管理工具帮助产品开发团队及时发现和解决关键问题?
在产品开发中,选择合适的管理工具至关重要,它能显著提升团队的工作效率和协作效果。本文介绍了五款敏捷项目管理工具:板栗看板、Taiga、Pivotal Tracker、VersionOne和Axosoft,分别适合不同规模和需求的团队使用,涵盖从简单易用到高度定制化的需求,帮助团队实现高效管理。
如何通过问题管理工具帮助产品开发团队及时发现和解决关键问题?
|
测试技术 持续交付 开发工具
掌握 Git 工作流:高效团队协作的关键
【10月更文挑战第22天】本文介绍了 Git 工作流的核心概念和最佳实践,包括分支策略、提交信息、代码审查和合并策略等。通过优化这些环节,可以提高代码管理效率,促进团队成员之间的有效沟通,从而提升团队整体的开发效率。适合开发者和团队管理者阅读。
|
测试技术 开发工具 git
掌握Git分支管理,提升团队协作效率
掌握Git分支管理,提升团队协作效率
213 0
|
存储 项目管理 开发工具
掌握Git版本控制,提升团队协作效率
掌握Git版本控制,提升团队协作效率
255 0
|
SQL 关系型数据库 MySQL
MySQL主从:延时从库恢复全解
MySQL主从:延时从库恢复全解
|
存储 关系型数据库 MySQL
【MySQL系列笔记】InnoDB引擎-数据存储结构
InnoDB 存储引擎是MySQL的默认存储引擎,是事务安全的MySQL存储引擎。该存储引擎是第一个完整ACID事务的MySQL存储引擎,其特点是行锁设计、支持MVCC、支持外键、提供一致性非锁定读,同时被设计用来最有效地利用以及使用内存和 CPU。因此很有必要学习下InnoDB存储引擎,它的很多架构设计思路都可以应用到我们的应用系统设计中。
1529 4
|
存储 人工智能 API
推荐一款强大的AI开源项目!有了它,将你的数据库秒变AI数据库!
推荐一款强大的AI开源项目!有了它,将你的数据库秒变AI数据库!
560 1

热门文章

最新文章