【问题标题】:Force timeout on a MysqlQuery from PHP从 PHP 强制 MysqlQuery 超时
【发布时间】:2011-04-01 22:14:35
【问题描述】:

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

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

【问题讨论】:

  • 哇,从未见过运行数小时的查询...

标签: php mysql timeout


【解决方案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

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

另一方面,您可能正在尝试管理共享服务器,并且可能存在一些流氓用户。在这种情况下,您应该在服务条款中指定脚本将被监控和禁用,而这正是对此类攻击性脚本应采取的措施。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 我正在考虑设置一些连接属性。我很清楚 SHOW PROCESSLIST 和 KILL。我希望有更好的东西
    猜你喜欢
    • 1970-01-01
    • 2011-09-22
    • 1970-01-01
    • 1970-01-01
    • 2021-05-13
    • 2015-04-20
    • 2018-08-18
    • 1970-01-01
    相关资源
    最近更新 更多