如果在某个时间范围内没有返回查询,是否有办法强制PHP中的Mysql终止查询?
我有时会看到昂贵的查询运行数小时(显然此时HTTP连接已超时或用户已离开)。一旦这样的查询累积起来就会开始严重影响整体性能。
答案 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
但是,如果查询运行了这么长时间...... 必须优化。
另一方面,您可能正在尝试管理共享服务器,并且可能存在一些流氓用户。在这种情况下,您应该在服务条款中指定脚本将被监视和禁用,这正是应该对这些令人反感的脚本所做的。