【问题标题】:Mysql : How to identify table lock wait and unlock itMysql:如何识别表锁等待并解锁它
【发布时间】:2012-06-18 11:35:25
【问题描述】:

我的 web 应用程序代码是用 java、swing、hibernate 组合编写的,在 tomcat5 中运行。在某些情况下,一个表在更新/删除时被锁定,一段时间后无法自行解锁[错误是:mysql lock wait timeout exceeded, try restarting transaction],导致应用程序无法访问。

我必须编写一个 java 调度程序,它会定期检查锁定状态,并在某个指定时间后说 30 秒解锁表。

具体来说我想知道如何检查表是否被锁定?以及如何解锁

谢谢

【问题讨论】:

  • 我遇到了同样的问题,但我解决它的想法不同——我不知道它是否适合你,因为你没有提供任何细节。据我所知,您应该不可能解锁表锁,因为看起来它不会是试图解锁的同一个线程,并且会被数据库拒绝。

标签: java mysql


【解决方案1】:

您可以使用具有非常低超时的GET_LOCK 来检查是否存在锁。如果返回码是 0 另一个线程有锁,否则你得到 1 并且你的线程有锁。

至于如何解锁,这有点难。持有锁的可能是一个完全不同的应用程序,并且持有它可能是有充分理由的。不知道能不能强行破解。但我不认为你真的想这样做。

【讨论】:

  • 我认为它不会起作用,GET_LOCK 没有提供有关特定表锁的信息。它只是创建一个具有给定名称的锁。
猜你喜欢
  • 1970-01-01
  • 2021-04-12
  • 2011-09-05
  • 1970-01-01
  • 2014-05-13
  • 1970-01-01
  • 1970-01-01
  • 2015-09-20
  • 1970-01-01
相关资源
最近更新 更多