更新查询已锁定

时间:2014-07-24 18:38:57

标签: mysql database

这可能是一个加载的问题,但是我们的MySQL进程锁定可能是什么原因?我们遇到了一个问题,我们试图使用我们软件的一个功能并且它已经冻结了#39;。在研究这个问题的过程中,我们发现对MySQL数据库的查询被锁定了#39;并且软件在返回之前等待锁解锁/解决。

有些背景,我们在Glassfish上运行Spring应用程序,让GF进行数据库连接池管理。一切似乎工作正常,直到我们开始让这些线程锁定时,我们要求执行一个特定的更新'功能。

  • 我们正在更新的表是innodb并设置了默认值(我认为是行锁定默认值)
  • 运行show engine innodb status;没有报告任何死锁。
  • 正在运行show full processlist会显示一些“已锁定”状态。流程。我们未在代码中明确锁定任何内容。
  • 我们对相关表没有外键约束。 ID是唯一的主键。
  • 运行锁定的'更新'从任何地方查询导致另一个锁定查询。我们可以毫无问题地从该表中进行选择。我们可以毫无问题地插入其他表格。

我能找到的东西是第一个答案 - MySQL InnoDB hangs on waiting for table-level locks。当人们使用系统时,我们可能已经运行了数据库的转储。这是最可能的原因还是可以在这里开展其他工作?

1 个答案:

答案 0 :(得分:1)

当然,带有默认选项的mysqldump会在转储表之前锁定表,导致更新完全阻止InnoDB。

对mysqldump使用--single-transaction选项以避免此问题。

请参阅: Run MySQLDump without Locking Tables

此外,由于它是表锁,而不是行锁,因此无法使用innodb_lock_wait_timeout控制超时。