簡體   English   中英

MySQL查詢每60秒重新啟動一次?

[英]MySQL Query Restarting Every 60 Seconds?

我有一個奇怪的問題。 我正在對來自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秒!

解決方案是讓客戶端繞過我們站點的代理服務器。

當客戶端將其代理服務器升級到最新版本時,解決了這個完全相同的問題的第二個實例。

很抱歉,但是我不記得在哪種情況下都使用了什么代理服務器,就像幾個月前一樣,從那時起我就睡覺了:-/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM