PHP上的MysqlQuery强制超时

时间:2010-08-20 23:48:13

标签: php mysql timeout

如果在某个时间范围内没有返回查询,是否有办法强制PHP中的Mysql终止查询?

我有时会看到昂贵的查询运行数小时(显然此时HTTP连接已超时或用户已离开)。一旦这样的查询累积起来就会开始严重影响整体性能。

2 个答案:

答案 0 :(得分:4)

长时间运行的查询表明设计不佳。最好检查有问题的查询以及如何优化它们。这只是忽略了这个问题。

如果仍然想要这个,你可以使用SHOW PROCESSESLIST命令来获取所有正在运行的进程。然后使用KILL x来终止客户端连接。但是要实现这一点,你必须从另一个PHP脚本检查这个,因为多线程还不可能。此外,不建议让PHP授权用户使用服务器设置。

答案 1 :(得分:1)

警告:现在应该使用类似upstart的预期行为。

您想为此类事件创建DAEMONS,但您也可以使用cron 只需要一个脚本查看xyz time以上查询的设置间隔并将其删除。

// this instruction kills all processes executing for more than 10 seconds
SELECT CONCAT('KILL ',id,';') 
FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE state = "executing" AND `time` >= 10

但是,如果查询运行了这么长时间...... 必须优化

另一方面,您可能正在尝试管理共享服务器,并且可能存在一些流氓用户。在这种情况下,您应该在服务条款中指定脚本将被监视和禁用,这正是应该对这些令人反感的脚本所做的。