专栏首页「3306 Pai」社区浅析TiDB二阶段提交

浅析TiDB二阶段提交

关键内容说明:

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

TiDB二阶段提交简图

(图1,底图选用tidb官方)

细节描述

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

1. tidb 开始prewrite操作:向所有涉及改动的 region 并发执行 prewrite 请求,如果某个prewrite失败了。

如果报错为 keylslookWriteConfict, 都会重新获取tso,重新启动2pc。其他错误则会报错。

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

tidb向primay所在的region发起commit。

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

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

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

TiKV二阶段提交简图

(图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是客户端。

本文分享自微信公众号 - 3306pai(pai3306),作者:田帅萌

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-03-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 二阶段提交 vs 三阶段提交

    二阶段提交本身比较简单,就是把分布式事务分成准备阶段和提交阶段两个阶段。目的很明确,就是尽可能晚地提交事务,让事务在提交前尽可能地完成所有能完成的工作,这样,最...

    十毛
  • TiDB 最佳实践系列(三)乐观锁事务

    在前两篇的文章中,我们分别介绍了 TiDB 高并发写入常见热点问题及规避方法 和 PD 调度策略最佳实践,本文我们将深入浅出介绍 TiDB 乐观事务原理,并给出...

    PingCAP
  • TiDB用什么保证备份的一致性?

    作为一名MySQL DBA,就应该了解MySQL备份无论是逻辑备份还是物理备份,都会使用FLUSH TABLES WITH READ LOCK(下面简称FTWR...

    田帅萌
  • 构建实时数仓 - 当 TiDB 偶遇 Pravega

    数据仓库是公司数据发展到一定规模后必然需要提供的一种基础服务,也是“数据智能”建设的基础环节。早期数仓多为离线模式,主要处理的是 T+1 的数据,随着互联网时代...

    PingCAP
  • Async Commit 原理介绍

    TiDB 提供了原生的分布式事务支持,实现低延迟的分布式事务是持续的优化方向。TiDB 5.0 引入的 Async Commit 特性大大改善了事务提交的延迟,...

    PingCAP
  • 分布式一致性保证:两阶段提交、三阶段提交

    在分布式系统中,为了保证数据的高可用,通常会将数据保留多个副本,这些副本会放置在不同的物理机器上。

    黑洞代码
  • 数字化加速,数据如何保鲜,价值如何变现?

    全球经济数字化转型是大势所趋。加快数字经济发展,推动数字化变革已经成为未来十年经济发展的重要推动力。数字化增长带来新机遇,DTC(Direct To Custo...

    PingCAP
  • TiDB 源码阅读系列文章(二十四)TiDB Binlog 源码解析

    这篇文章不是讲 TiDB Binlog 组件的源码,而是讲 TiDB 在执行 DML/DDL 语句过程中,如何将 Binlog 数据 发送给 TiDB Binl...

    PingCAP
  • TiDB Ecosystem Tools 原理解读系列(三)TiDB-DM 架构设计与实现原理

    TiDB-DM(Data Migration)是用于将数据从 MySQL/MariaDB 迁移到 TiDB 的工具。该工具既支持以全量备份文件的方式将 MySQ...

    PingCAP

扫码关注云+社区

领取腾讯云代金券