SpringJPA + Hibernate 应用程序导致 MySQL 死锁问题

SpringJPA + Hibernate application causing MySQL Deadlock issue

提问人:Gavin Gu 提问时间:11/17/2023 更新时间:11/19/2023 访问量:11

问:

我们正面临一个问题,该问题可能是由于 AWS RDS 上的资源占用引起的。 当我们检查 AWS RDS 性能见解时,我们得到了几个具有非常高延迟(甚至超过 1 小时)的 sql,然后我们通过执行下面的 sql 查询来检查 RDS 的详细信息

SELECT
  r.trx_id waiting_trx_id,
  r.trx_mysql_thread_id waiting_thread,
  r.trx_query waiting_query,
  b.trx_id blocking_trx_id,
  b.trx_mysql_thread_id blocking_thread,
  b.trx_query blocking_query
FROM information_schema.innodb_lock_waits w
INNER JOIN information_schema.innodb_trx b
  ON b.trx_id = w.blocking_trx_id
INNER JOIN information_schema.innodb_trx r
  ON r.trx_id = w.requesting_trx_id;
  

我们发现可能是死锁导致的,发现了一些像

select *** from table where id = *** for update

这个被阻止了

update *** where id= ***

并且更新查询被另一个具有相同 ID 的更新查询阻止。

当我们检查源代码时,没有像我们使用 select ** for update 语句那样的定义。

我们下一步可以进行调查有什么建议吗?

MySQL 休眠 死锁

评论


答:

0赞 Rick James 11/19/2023 #1
  • 使用 slowlog 查找耗时较长的查询。

  • 用于查看最新的死锁(如果它实际上处于死锁状态)。SHOW ENGINE=INNODB STATUS;

将结果与 一起显示。然后我们可以进一步讨论。SHOW CREATE TABLE