CAI001
(Ti D Ber Mhmp8yq Z)
1
【TiDB 使用环境】生产环境 /测试/ Poc
有一条SQL前序执行时间很长40多秒。同一时间这个表有大量的insert语句。这是个长事务,事务期间会调用三方接口,三方接口耗时有点长。这种该如何排查前序执行期间锁是什么锁?行锁还是表锁?
time:50.1s, loops:2, prepare: 23.4µs, insert:42.3µs, lock_keys: {time:50.1s, region:2, keys:2, resolve_lock:105ms, lock_rpc:49.946036237s, rpc_count:50}
1 个赞
zhanggame1
(Ti D Ber G I13ecx U)
2
tidb一般都是行锁,但是有事务冲突情况加锁解锁都比较慢
北南南北
(Ti D Ber 7stzly6a)
5
比如select for update,会在条件行加锁。表上再加锁。
yangyang
(Ti D Ber A Lc My4qe)
6
排查锁类型可通过 TiDB 内置工具直接查看事务锁信息,核心步骤有 3 点:
- 用
show processlist 找到长事务的 ID,或在 TiDB Dashboard 的 “事务” 页面定位该事务;
- 执行
select * from information_schema.tidb_trx where trx_id = '事务ID';,查看 lock_mode 字段(ROW 为行锁,TABLE 为表锁);
- 若需更详细锁信息,执行
select * from information_schema.tidb_locks where trx_id = '事务ID';,可看到具体锁表、锁行的 primary key 及锁类型。
system
(system)
关闭
9
此话题已在最后回复的 7 天后被自动关闭。不再允许新回复。