MySQLdb 处理行锁
我在使用MySQLdb的时候,更新表格中的一行数据时,有时候会遇到程序一直卡住的情况。
一开始我以为可能是因为表格是InnoDB格式,所以和COMMIT有关,但即使我设置了自动提交(autocommit(True))并在每次更新后都执行了db.commit(),问题依然存在。
是不是可能有行锁的情况,导致查询无法执行呢?有没有办法处理潜在的行锁,或者处理慢查询的情况呢?
1 个回答
1
根据你的用户权限,你可以在更新操作卡住的时候,执行 SHOW PROCESSLIST
或者从 information_schema.processlist
中选择数据,这样可以查看是否有其他查询在争抢资源。同时,你也可以对更新语句中使用的 WHERE 条件做一个 EXPLAIN,看看是否需要修改这个语句。
如果是因为锁的争用导致的问题,你最终会遇到一个锁等待超时(默认是50秒,我记得)。如果你有时间上的限制,可以使用 KILL QUERY 和 KILL CONNECTION 来解除光标执行的阻塞。