2014-01-14 203 views
2

最近我在這種情況下沒有改變任何東西,但是最近我的mysqli_connect()到遠程服務器是非常慢的(大約一半的時間它達到了30秒的最大執行時間)。當它工作時,響應時間在28到30秒之間。mysqli_connect()突然極其緩慢

我已在兩臺服務器上重新啓動MySQL。持有PHP腳本的服務器是本地WAMP服務器,遠程服務器是LAMP堆棧。 LAMP服務器可以很好地服務於WAMP服務器請求的相同信息。該查詢不似乎是問題,而不是它看起來像mysqli_connect()的問題是:

$mtime = microtime(); 
    $mtime = explode(" ",$mtime); 
    $starttime = $mtime[1] + $mtime[0]; 
     $this->conn = mysqli_connect($this->host,$this->user,$this->password) or die(mysqli_error($this->conn)); 
     $etime = microtime(); 
    $etime = explode(" ",$etime); 
    $endtime = $etime[1] + $etime[0]; 
    $totaltime = ($endtime - $starttime); 
    echo('<!--mysqli_connect took: '.$totaltime.' seconds-->'); 

頁(當它不給擊中的max_execution_time 500響應)將顯示:

<!--mysqli_connect took: 28.975151777267 seconds--> 

遠程LAMP服務器相同的代碼會顯示:

<!--mysqli_connect took: 0.036190032958984 seconds--> 

我還沒有更新的代碼或製成,因爲這是工作的任何配置更改。在WAMP服務器上超過30秒時,除了max_execution_time超出的錯誤外,其他服務器上都不會出現錯誤。有沒有人有什麼建議?

感謝您的閱讀。

+0

服務器上是否有足夠的可用連接來滿足連接需求?或者是否有可能導致查詢/連接堆疊起來的一些長時間運行的查詢? –

+0

重新啓動10分鐘後:'max_connections'設置爲151,pma顯示'max。併發連接數爲6,'threads_connected'爲3,而'threads_created'爲23.沒有記錄緩慢的查詢。重新啓動後,我的mysqli_connect仍然需要> 30秒。 –

+0

mysqltuner顯示可用連接的最高使用率:5%(9/151) –

回答

4

也許是DNS問題? 您是否嘗試將主機字符串更改爲直接IP地址而不是說域名?在這裏有一個類似的問題,Connecting to mysql server(localhost) very slow,聽起來很相似,但它是本地主機,並更改爲127.0.0.1修復了問題。

+0

我根據您的建議嘗試了IP,並且時間不受影響。更改LAMP服務器上的主機名以使用'localhost'而不是域名確實將響應時間從0.03降低到了0.0002。我認爲這不是DNS問題,因爲我在兩臺服務器上使用相同的主機名(對於LAMP服務器不使用localhost或127.0.0.1)。不過謝謝你的建議。 –

+0

莎拉 - 我真的在這裏拍飛鏢,但這裏有其他可能導致這個問題的東西(儘管你談論的時間比這個長很多):http://stackoverflow.com/問題/ 13439817/why-my-mysqli-connection-so-slow –

+0

是的,它看起來像是一個本地MySQL服務器減速(我的本地主機連接工作正常)。對於Windows 7和更高版本,這似乎也是一個問題,我正在使用Linux和較早版本的Windows Server。 –

0

發現問題,它與DNS相關。但我仍然不完全理解它。看起來守護程序named在LAMP服務器上停止。此服務器是我用於連接的域名的權威NS。我不知道爲什麼它有時會起作用,或者爲什麼當我使用IP地址時它不起作用,但是現在我再次啓動服務時工作正常。

非常感謝您的幫助。

+0

這是因爲MySQL服務器查找客戶端的DNS。你也可以[禁用](http://developer.sugarcrm。com/2012/01/10/howto-turn-off-mysql-reverse-dns-lookup-to-speed-up-response-times /)它在服務器配置。 – spacediver

+0

WAMP服務器的IP不受LAMP服務器控制,但由我們的ISP控制 - 所以我不認爲問題與LAMP服務器無法找到有關客戶IP的信息有關。雖然我欣賞這個鏈接。 –

+1

那麼,爲了正確;) - MySQL服務器將查找連接客戶端的DNS名稱,無論這些客戶端在哪裏獲取其IP地址。我相信它的動機可能是更詳細的日誌記錄和連接顯示。 從你的解決方案中我看到,一旦打開命名解決了延遲,因此MySQL服務器主動使用它。而且,如果由於某種原因,你將開始在命名上獲得解析延遲 - 這些延遲也會傳播到MySQL。 我看不到任何理由有這種查找(和服務依賴!)配置在所有。 :) – spacediver