【发布时间】:2014-07-24 18:38:57
【问题描述】:
这可能是一个加载的问题,但我们的 MySQL 进程锁定的原因可能是什么?我们遇到了一个问题,我们试图使用我们软件的某个功能,但它“冻结”了。调查该问题后,我们发现对 MySQL 数据库的查询被“锁定”,软件在返回之前等待锁定解锁/解决。
一些背景知识,我们在 Glassfish 上运行 Spring 应用程序并让 GF 进行数据库连接池管理。一切似乎都运行良好,直到我们请求执行一个特定的“更新”功能时开始锁定这些线程。
- 我们正在更新的表是 innodb 并设置了默认值(我相信行锁定是默认值)
- 运行
show engine innodb status;未报告任何死锁。 - 运行
show full processlist会显示一些“锁定”进程。我们没有在代码中明确锁定任何内容。 - 我们对有问题的表没有外键约束。 ID 是唯一的主键。
- 从任何地方运行锁定的“更新”查询会导致另一个锁定查询。我们可以毫无问题地从该表中进行选择。我们可以毫无问题地插入其他表。
我能找到的唯一是这里的第一个答案 - MySQL InnoDB hangs on waiting for table-level locks。当人们使用系统时,我们可能已经运行了数据库的转储。这是最可能的原因还是这里可能有其他原因?
【问题讨论】: