悲观事务中对相关行数据进行上锁的耗时过长

【TiDB 使用环境】生产环境
【TiDB 版本】7.1。6
【操作系统】liunx
【部署方式】云上部署(什么云)/机器部署(什么机器配置、什么硬盘)
【集群数据量】3
【集群节点数】
【问题复现路径】replace操作悲观实物上锁时间过长
【遇到的问题:问题现象及影响】 replace操作悲观实物上锁时间过长

1 个赞

把SQL和相关的执行计划发出来

sql:

REPLACE INTO `hc_records`
SET
  `uid` = ?,
  `video_detail_id` = ?,
  `video_id` = ?,
  `created_at` = ?,
  `updated_at` = ?,
  `applet_id` = ? [arguments: (30015157, 283160, 211131, 1759124412, 1759124412, 30272)];

执行计划:

1 个赞

这种delete再insert像是并发导致的锁冲突,可以换一种方式试试,使用:INSERT … ON DUPLICATE KEY UPDATE,这种会估计会改善一些。

1 个赞

好的,感谢

1 个赞

改了 好了?

搞好了啊

1 个赞

先在应用层减少不必要的replace,合并批量操作,避免产生热点key。

1 个赞

上锁耗时,我理解是数据库,当前存在排他锁,导致等待过长。可以监控当时的语句运行情况,是否有长时间运行语句,以及语句是否涉及锁

1 个赞

是不是大事务呢,如果是大事务,耗时长应该是正常的啊