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

问题描述 投票:0回答:1

我们面临的问题可能是由于 AWS RDS 上的资源耗尽造成的。 当我们检查AWS RDS性能洞察时,我们得到了几个具有非常高延迟的sql(甚至超过1小时),然后我们通过执行下面的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;
  

我们发现可能是死锁导致的,发现了一些类似的sql语句

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

这个被屏蔽了

update *** where id= ***

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

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

对于我们接下来的调查有什么建议吗?

mysql hibernate deadlock
1个回答
0
投票
  • 使用慢日志查找耗时较长的查询。

  • 使用

    SHOW ENGINE=INNODB STATUS;
    查看最新的死锁(如果确实死锁)。

SHOW CREATE TABLE
一起呈现结果。然后我们可以进一步讨论。

© www.soinside.com 2019 - 2024. All rights reserved.