2010-07-09 78 views
0

我正在使用MySQLdb,当我对表行执行UPDATE时,我有时会得到无限的进程挂起。MySQLdb手柄行锁

起初我想,也许是因为表是Innodb的COMMIT,但是即使在每次更新之后使用autocommit(True)和db.commit(),我仍然得到挂起。

是否有可能存在行锁并且查询只是无法执行?有没有办法处理潜在的行锁或者甚至可以处理缓慢的查询?

回答

1

根据您的用户权限,您可以执行SHOW PROCESSLIST或从information_schema.processlist中进行选择,而UPDATE挂起以查看是否存在另一个查询的争用问题。还要对UPDATE中使用的WHERE子句的SELECT进行EXPLAIN,以查看是否需要更改语句。

如果是锁争用,那么您最终应该会遇到锁等待超时(默认值= 50秒,我相信)。否则,如果您有时间限制,则可以使用KILL QUERY和KILL CONNECTION解锁光标执行。

+0

感谢您的意见。我终于找到了我的问题的罪魁祸首,幸运的是,这不是一个锁定行问题。 – 2010-07-19 17:32:23