我有一个奇怪的问题.我正在针对
PHP中的一个非常大的表运行MySQL查询.查询时间超过一分钟,但这不是我的问题.看起来PHP每66秒重新发送一次查询.
show processlist; +--------+---------+-------------------+----------+---------+------+---------------+-------------------------------------------------------- | Id | User | Host | db | Command | Time | State | Info +--------+---------+-------------------+----------+---------+------+---------------+-------------------------------------------------------- | 150018 | root | localhost | amrs | Query | 32 | Sending data | /*DEREK*/select ctlno,count(*) AS count from (omitted)
几分钟后,我再次检查:
+--------+---------+-------------------+----------+---------+------+---------------+-------------------------------------------------------- | Id | User | Host | db | Command | Time | State | Info +--------+---------+-------------------+----------+---------+------+---------------+-------------------------------------------------------- | 150018 | root | localhost | amrs | Query | 188 | Sending data | /*DEREK*/select ctlno,count(*) AS count from (omitted) | 150021 | root | localhost | amrs | Query | 122 | Sending data | /*DEREK*/select ctlno,count(*) AS count from (omitted) | 150023 | root | localhost | amrs | Query | 56 | Sending data | /*DEREK*/select ctlno,count(*) AS count from (omitted)
我没有重新加载页面或任何东西.在脚本开头附近调用set_time_limit(0).令人讨厌的部分是,页面似乎与最近运行的页面相关联.因此,如果我杀了150018,没有什么不好的事情发生,但是如果我在生成另一个之前杀死了150023,那么该页面会出现“查询执行中断”错误. 150018最终将自行运行,但它没有任何好处,因为脚本/页面不会收到它.
有人有主意吗?
编辑:显示完整的进程列表给出以下内容(为简洁和机密性删除了一些行):
+--------+---------+-------------------+----------+---------+-------+--------------+----------------------------------------------------- | Id | User | Host | db | Command | Time | State | Info +--------+---------+-------------------+----------+---------+-------+--------------+----------------------------------------------------- | 147385 | root | localhost:44560 | amrs | Sleep | 14021 | | NULL | 150248 | root | localhost | NULL | Query | 0 | NULL | show full processlist | 150251 | root | localhost | amrs | Query | 1 | statistics | /*DEREK*/select ctlno,count(*) AS count from (snip) +--------+---------+-------------------+----------+---------+-------+--------------+-----------------------------------------------------
我之前已经看过几次类似的问题了,你的问题听起来和我以前在网站上工作时遇到的问题非常相似.
你去网站时是否要通过代理服务器?
我的网站发生的事情是,来自同一公司内某个特定用户的查询是通过他们的代理服务器进行的,该代理服务器自己决定如果在60秒内没有收到响应,那么它只会发出再次请求Web请求,而不通知客户端浏览器发生了这种情况!
因此,对于某些长时间运行的查询需要花费一分钟来执行,我会看到查询开始相互复合,我最终会查看一个包含大量相同查询的进程列表,每个查询都相隔几乎相同正好60秒!
当客户端将其代理服务器升级到最新版本时,解决了此完全相同问题的第二个实例.
对不起,但我不记得在任何一种情况下使用的是什么代理服务器,就像几个月前一样,我从此睡过了: – /