暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

TiDB 锁冲突问题处理

原创 小气鬼 2022-08-04
1798

TiDB 支持完整的分布式事务,自 v3.0 版本起,提供乐观事务悲观事务两种事务模式。本文介绍如何使用 Lock View 排查锁相关的问题,以及如何处理使用乐观事务或者悲观事务的过程中常见的锁冲突问题。

使用 Lock View 排查锁相关的问题

关于这些系统表的详细说明,请参考以下文档:

  • TIDB_TRXCLUSTER_TIDB_TRX:提供当前 TiDB 节点上或整个集群上所有运行中的事务的信息,包括事务是否处于等锁状态、等锁时间和事务曾经执行过的语句的 Digest 等信息。
  • DATA_LOCK_WAITS:提供关于 TiKV 内的悲观锁等锁信息,包括阻塞和被阻塞的事务的 start_ts、被阻塞的 SQL 语句的 Digest 和发生等待的 key。
  • DEADLOCKSCLUSTER_DEADLOCKS:提供当前 TiDB 节点上或整个集群上最近发生过的若干次死锁的相关信息,包括死锁环中事务之间的等待关系、事务当前正在执行的语句的 Digest 和发生等待的 key。

少数热点 key 造成锁排队

DATA_LOCK_WAITS 系统表提供 TiKV 节点上的等锁情况。查询该表时,TiDB 将自动从所有 TiKV 节点上获取当前时刻的等锁信息。当少数热点 key 频繁被上锁并阻塞较多事务时,你可以查询 DATA_LOCK_WAITS 表并按 key 对结果进行聚合,以尝试找出经常发生问题的 key:

select `key`, count(*) as `count` from information_schema.data_lock_waits group by `key`

以下为排查部分问题的示例。

死锁错误

要获取最近发生的死锁错误的信息,可查询 DEADLOCKSCLUSTER_DEADLOCKS 表。

以查询 DEADLOCKS 表为例,请执行以下 SQL 语句:

select * from information_schema.deadlocks;

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论