从PHP强制中止MysqlQuery的超时时间

3

是否有一种方法可以从PHP强制Mysql在特定时间内杀死一个查询?

有时我会看到执行很耗费资源的查询,运行几个小时(很显然这个时候HTTP连接超时或者用户已经离开了)。一旦足够多的这样的查询积累起来,它就会严重影响整体性能。


2
哇,从来没有见过运行几个小时的查询... - tomsseisums
2个回答

4
长时间运行的查询是设计不良的标志。最好检查相关的查询语句并优化它们,否则只是忽略了问题。
如果你仍然需要这么做,你可以使用SHOW PROCESSESLIST命令获取所有正在运行的进程。然后使用KILL x来终止客户端连接。但为了使其工作,你必须从另一个PHP脚本中进行检查,因为多线程还不可行。此外,不建议给被PHP利用的用户授予更改服务器设置的权限。

我在考虑设置一些连接属性。我很清楚 SHOW PROCESSLIST 和 KILL。我希望有更好的选择。 - Ghostrider

1

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

您想要为此类事情创建{{link2:DAEMONS}},但也可以使用cron。
只需编写一个脚本,定期查看超过xyz时间的查询并将其终止。

// 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

然而,如果查询运行时间过长...它们必须被优化

另一方面,您可能正在尝试管理共享服务器,可能会有一些流氓用户。在这种情况下,您应该在服务条款中指定脚本将被监视和禁用,并且对于这些具有攻击性的脚本,确实应该采取这样的措施。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接