分享好友

×
取消 复制
TIDB死锁检测
2020-06-29 14:16:11

TiDB 在遇到死锁时的行为。 TiKV 如有锁等待逻辑就会造成死锁。 TiDB 目前采用了全局死锁检测的方式,如果发现当前的等锁行为会形成死锁,就会立刻返回给 TiDB 告知死锁异常,通过这种方式直接把死锁拒绝在源头。

为了保证死锁检测服务的高可用,我们将该服务放在了特定 region leader 所在的 TiKV 实例上,当需要等待锁时,如果发现不是事务加的第一个锁就需要检测死锁,死锁检测请求中会携带如下信息:

  • 代表当前事务 ID(start_ts)
  • 等待事务的 ID(start_ts)
  • 等待的 Key 的信息(目前用 key 的 hash 表示)

目前死锁检测算法为:

  • 维护全局的 wait-for-graph,该图保证无环。
  • 每个请求会尝试在图中加一条 txn -> wait_for_txn 的 edge,若新加的导致有环则发生了死锁。
  • 因为需要发 RPC,所以死锁时失败的事务无法确定。
分享好友

分享这个小栈给你的朋友们,一起进步吧。

TiDB专区
创建时间:2020-05-15 15:03:37
TiDB 是 PingCAP 公司受 Google Spanner / F1 论文启发而设计的开源分布式 HTAP (Hybrid Transactional and Analytical Processing) 数据库
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

技术专家

查看更多
  • 小雨滴
    专家
  • 飘絮絮絮丶
    专家
  • ☀️
    专家
猜你喜欢
戳我,来吐槽~