在MySQL进程列表中,它显示一些SELECT
查询已被锁定。锁定时间超过4000
| 24 | user | localhost | database | Query | 4725 | Locked | SELECT * FROM data
| 25 | user | localhost | database | Query | 4725 | Locked | SELECT * FROM data
| 26 | user | localhost | database | Query | 4725 | Locked | SELECT * FROM data
PHP脚本已执行一段时间,但SELECT
处于锁定状态。如何解决这个问题?
$SQL = "SELECT * FROM data";
$query = $db->prepare($SQL);
$query->execute();
while ($row = $query->fetch(PDO::FETCH_ASSOC)) {
//Do something
sleep(2);
}
mySQL服务器是否限制SELECT查询在当时运行一次?可以改变吗?
答案 0 :(得分:2)
您应该运行show engine innodb status \G
以查看持有该锁定的查询。
在评论和听到MyISAM正在使用中讨论之后,有很多写作我建议你转移到InnoDB。
InnoDB一直是默认引擎,通常更好。在这种情况下,您将获得基于行的锁定。 InnoDB也比MyISAM开发得更多。
答案 1 :(得分:0)
如果您的进程列表中只有select语句,则可能是由于服务器上的可用资源有限。如果是这种情况,您可以尝试优化运行的查询(如果可能),或尝试在服务器上实现某种缓存,从而避免此问题。您也可以降低max_connections系统变量,但这可能不是一个可行的解决方案。
答案 2 :(得分:0)
你的桌子有多大?
INNODB不是魔术。有关系统的一些信息可以提供帮助。