MySQLdb处理行锁

时间:2010-07-09 19:47:53

标签: python mysql

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

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

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

1 个答案:

答案 0 :(得分:1)

根据您的用户权限,您可以在UPDATE挂起时执行SHOW PROCESSLISTinformation_schema.processlist中的SELECT,以查看是否存在其他查询的争用问题。还要对UPDATE中使用的WHERE子句的SELECT执行EXPLAIN,以查看是否需要更改语句。

如果是锁争用,那么你最终应该遇到锁定等待超时(默认= 50秒,我相信)。否则,如果您有时序约束,则可以使用KILL QUERY和KILL CONNECTION取消阻止光标执行。