2PC的疑问

【单选】在 TiDB 中,事务提交时两阶段提交(2PC)最主要的网络开销集中在?
A. 向 PD 获取 TSO
B. 向所有涉及的 TiKV 发起 Prewrite
C. 执行 Commit 操作
D. 事务内 SQL 语句的执行

prewrite是写日志,为啥主要的网络开销也在这

分布式shi事物要不通节点多副本确认

2 个赞

详细过程
Prewrite 并不是简单写日志。

它要做:

向所有涉及的 region 写入锁 + 数据 + MVCC

流程:

TiDB

找到涉及的所有 region

向每个 region 的 leader 发送 prewrite

例如:

事务修改 1000 行

可能分布在:

50 个 region

那么:

需要 50 次 RPC

每个 region:

写锁
写 value
写 default CF
写 write CF
检查冲突
检查锁
写 raft log
复制到 follower

这一步非常重。

2 个赞

写锁那些事其他的开销,不明白为啥会体现在网络开销里面

事务涉及多少个 Region,就发多少次 Prewrite 请求
大表、多行事务 → 几十、上百次网络交互

好的,这么说就明白了

与读写的region有很大关系,还有分布的标签情况

此话题已在最后回复的 7 天后被自动关闭。不再允许新回复。