ITPub博客

首页 > > > TIDB死锁检测

TIDB死锁检测

作者:浪花小雨滴 时间:2020-06-29 14:16:11 0 删除 编辑

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,所以死锁时失败的事务无法确定。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31537575/viewspace-3131451/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: Docker Hello World
请登录后发表评论 登录
全部评论

注册时间:2018-05-16

  • 博文量
    4259
  • 访问量
    39959