我正在使用MySQLdb,当我对表行执行UPDATE时,我有时会得到一个无限的进程挂起。
起初我想,也许它的COMMIT因为表是Innodb,但即使使用autocommit(True)和db.commit(),每次更新后我仍然会挂起。
是否可能存在行锁并且查询无法执行?有没有办法处理潜在的行锁或甚至可能处理慢查询?
答案 0 :(得分:1)
根据您的用户权限,您可以在UPDATE挂起时执行SHOW PROCESSLIST
或information_schema.processlist
中的SELECT,以查看是否存在其他查询的争用问题。还要对UPDATE中使用的WHERE子句的SELECT执行EXPLAIN,以查看是否需要更改语句。
如果是锁争用,那么你最终应该遇到锁定等待超时(默认= 50秒,我相信)。否则,如果您有时序约束,则可以使用KILL QUERY和KILL CONNECTION取消阻止光标执行。