TiDB 内核解剖室 / 信息图系列 1024 TiDB AIGC 黑客松
03
2PC · DISTRIBUTED TRANSACTION

要么全成,要么全不成

一次跨 3 个 TiKV 的转账,凭什么保证原子性 —— prewrite → commit。

① PREWRITE 写数据 + 加锁 T1 · PRIMARY locked T2 locked T3 locked 全部 prewrite 成功后 → 取 commit_ts,提交从 Primary 开始 ② COMMIT 提交 + 清锁 T1 · PRIMARY committed T2 committed T3 committed 锁只可能在第一阶段被加上 —— 所以冲突与回滚也只会发生在 prewrite 单事务默认上限 100 MB · 单行上限 6 MB
两阶段第一阶段 prewrite 写数据并加锁,第二阶段 commit 提交并清理锁。
冲突冲突检测在 TiKV 内部、发生在 prewrite 阶段 —— 这决定了回滚只会发生在第一阶段。
默认集群默认悲观事务(v3.0.8 起);乐观事务自 v8.0.0 起不再自动重试,需应用自己捕获错误重试。
口径角标 · WHERE THE NUMBERS COME FROM
官方文档正文未展开 Percolator 的列族级数据布局 —— 所以这张图只画「值 + 锁标记」,一个列族名都不出现。
← 信息图系列 下载高清 PNG