专栏首页「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 条评论
登录 后参与评论

相关文章

  • MySQL8.0新特性-invisible indexes

    曾就职于阿里巴巴,全程参与阿里数据架构从Oracle迁移到MySQL过程,参与分布式中间件Cobar设计。

    [3306 Pai ] 社区
  • MySQL性能测试 : 新的InnoDB Double Write Buffer

    新的MySQL8.0.20版本重新设计了InnoDB Double Write(DBLWR),确实是一个大的历史烦人的事情。为什么在过去这么痛苦,让我们付出了这...

    [3306 Pai ] 社区
  • MySQL8.0新功能列表

    There are over 250 new features in MySQL 8.0. The MySQL Manual is very good, but...

    [3306 Pai ] 社区
  • 如何对不同行,同列名进行多维转一维?

    这里留个疑问,因为目前来看,列名都是一一对应的,如果列名不一致的话,如何进行处理呢?可以先行试着操作下。

    逍遥之
  • 第一章计算机网络和因特网-day01

    什么是因特网: 其一:构成因特网的基本硬件与软件。 其二:为分布式应用提供服务的联网基础设施。 终端机器称为主机( host ) 或者端系统( end syst...

    用户1134788
  • 【园丁计划】浅谈高校科研的比较优势

    腾讯高校合作
  • 好雨云帮两周问答集锦(2016.12.19-2017.01.01)

    Rainbond开源
  • pygame 笔记-8 背景音乐&子弹音效

    另一个问题,发射子弹和子弹击中,也需要声音,这个必须用另一种方法,否则的话,会把背景音乐给停掉:

    菩提树下的杨过
  • 使用Dash快速构建你的数据可视化前端

    还记得上篇文章我们采用Plotly去画出各式各样的图,这次我们就来讲讲,如何把这些图片展示在你的前端上。

    用户7466307
  • 资源 | 最入门级别的机器学习图书:Chris Bishop发布在线新书

    选自MBML book 参与:蒋思源 PRML 大神、微软剑桥研究院院长 Chris Bishop 与 John Winn 的机器学习新书 Model Base...

    机器之心

扫码关注云+社区

领取腾讯云代金券