为什么我需要在 mysql (InnoDB) 中回滚 SELECT?
Why do I need to rollback a SELECT in mysql (InnoDB)?
我 运行 在 mysql 数据库中的大型 InnoDB table 上 SELECT *
不明智。
所以大约 10 分钟后我意识到错误,用 show processlist 找到了 connectionid
,并试图用 kill 命令终止连接和查询。然后我 运行 另一个关于同一个 table 的查询。
show processlist
显示原来的 select 收到了 Killed 标志,但卡在了 "Sending data" 状态。后续查询正在等待锁定。这已经持续了几个小时。
现在我明白了为什么,如果我的原始查询一直在以任何方式修改 table,那么我要描述的内容将等待回滚。
但这是 select
;回滚 select 甚至意味着什么?
所以我想知道是否有人可以告诉我我在等待什么,以及是否有任何方便的方法来取消 select
查询。
您不是像其他人所说的那样等待事务回滚。我也遇到过这个问题:称它为错误,因为它确实是一个错误 MySQL 不同意。
现在我只能给你一个有根据的猜测,因为你得到这个 'deadlock',但我可以给你一个解决方案:
我 运行 在 mysql 数据库中的大型 InnoDB table 上 SELECT *
不明智。
所以大约 10 分钟后我意识到错误,用 show processlist 找到了 connectionid
,并试图用 kill 命令终止连接和查询。然后我 运行 另一个关于同一个 table 的查询。
show processlist
显示原来的 select 收到了 Killed 标志,但卡在了 "Sending data" 状态。后续查询正在等待锁定。这已经持续了几个小时。
现在我明白了为什么,如果我的原始查询一直在以任何方式修改 table,那么我要描述的内容将等待回滚。
但这是 select
;回滚 select 甚至意味着什么?
所以我想知道是否有人可以告诉我我在等待什么,以及是否有任何方便的方法来取消 select
查询。
您不是像其他人所说的那样等待事务回滚。我也遇到过这个问题:称它为错误,因为它确实是一个错误 MySQL 不同意。
现在我只能给你一个有根据的猜测,因为你得到这个 'deadlock',但我可以给你一个解决方案: