2012-06-21 30 views
2

我正在經歷一個非常緩慢的ADO和mysqli連接,用於我的生產Web服務器。目前的軟件設置是Windows 2008 Server R2 Standard Edition SP1,Apache 2.4,PHP 5.3.10,MySql 5.5.24,Pear 1.94,Zend Engine 2.30版本。ADO和msqli連接非常慢

我已經使用XDEBUG描述了代碼,它顯示了每個約1200ms的初始連接(無論頁面被訪問),而在本地開發機器和另一個測試服務器上,連接只需要8ms左右。除了php,pear,mysql和apache ini以及conf文件外,網站的代碼都是通過SVN同步的。我對這些做了差異檢查差異,並沒有任何差異。數據庫內容也是一個完整的副本。生產服務器的所有內容都託管在同一臺機器上,因此沒有任何防火牆或互聯網問題。

第一連接配置文件有以下調用堆棧:

ADOConnecton->Connect 
ADODB_mysql->_connect 
php::mysql_connect 

第二個:

php::mysqli->mysqli 

有什麼建議?

+1

所以第一個代碼塊說你連接到MySQL 3次?你不應該基本上將你的連接存儲到一個單例中,而只是將它傳遞給需要使用db的操作? – Kristian

+0

@Tony如果你嘗試連接命令行客戶端,你是否有相同的延遲?另外,你是連接到「localhost」還是連接到「127.0.0.1」? – RandomSeed

+0

Localhost,它會出現這樣..雖然可能很難說,因爲你不能配置命令行客戶端。 – Tony

回答

1

我編輯了Mysql my.ini,將mysql服務更改爲僅綁定到IPV4回送適配器。

[mysqld] 
... 
bind=127.0.0.1 

我還更改了\ public_html \ conf \ face.ini以使用IPV4回送地址而不是本地主機。 (將「localhost」更改爲「127.0.0.1」)

之後,所有問題都消失了。我不確定是因爲機器有六個IP地址還是試圖決定是使用IPV6還是IPV4。

1

通常,(第一個)連接的慢度取決於DNS解析。 可能是:

  • 客戶端解析服務器名稱
  • 服務器來解析客戶端名稱相匹配的訪問規則

讓客戶機/服務器讓使用服務器/客戶端的地址知道主機文件: http://en.wikipedia.org/wiki/Hosts_(file)