MySQL进程列表 - 锁定问题

时间:2011-11-20 18:48:49

标签: php mysql database pdo

在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查询在当时运行一次?可以改变吗?

3 个答案:

答案 0 :(得分:2)

您应该运行show engine innodb status \G以查看持有该锁定的查询。

在评论和听到MyISAM正在使用中讨论之后,有很多写作我建议你转移到InnoDB。

InnoDB一直是默认引擎,通常更好。在这种情况下,您将获得基于行的锁定。 InnoDB也比MyISAM开发得更多。

答案 1 :(得分:0)

如果您的进程列表中只有select语句,则可能是由于服务器上的可用资源有限。如果是这种情况,您可以尝试优化运行的查询(如果可能),或尝试在服务器上实现某种缓存,从而避免此问题。您也可以降低max_connections系统变量,但这可能不是一个可行的解决方案。

答案 2 :(得分:0)

你的桌子有多大?

INNODB不是魔术。有关系统的一些信息可以提供帮助。