今天發現網站開啟特別慢,然後分析原因,發現是資料庫查詢花費時間特別長,一個最簡單的查詢都至少4秒以上,然後分析最終發現原因是執行new PDO(...) 時間花費4秒以上,請問可能是因為什麼原因?
網站用的thinkphp架構,伺服器版本:windows serve 2008.
資料庫在另外一台伺服器上。
另:1.new PDO(localhost...) 不存在該問題
2.new PDO(另外一個windows上啟動並執行資料庫) 出現同樣問題
3.new PDO(另外一個linux上啟動並執行資料庫) 不存在該問題
4.在本地環境中new PDO(同一資料庫) 不存在該問題
...
請求大神解惑啊!!!謝謝
2016-01-28 09:32 更新:
測試代碼如下:
$t1=microtime(true);$dsn = "mysql:host=59.175.142.**;dbname=iqgame";$db = new PDO($dsn, '****', '****');s$t2=microtime(true);echo $t2-$t1; // 輸出4s多
1.web伺服器與資料庫伺服器均在外網,串連資料庫使用IP串連
2.這個問題是突然之間出現的,以前沒有這麼嚴重的連線時間
3.感謝大傢伙的熱心協助~
2016-01-28 10:11 再次更新:
感謝 @LakeChan 的提醒,我試著將web伺服器中的防火牆關閉,則瞬間解決問題!!!
然後我也不知道該怎麼配置防火牆才能屏蔽該問題,只能一條一條規則的嘗試,然後,待我重新開啟防火牆後發現問題居然沒有再出現了!!!
這種心情,感覺被狗[和諧]日了一樣!!!
總結,雖然不知道究竟發生了什麼!但是真心覺得還是Linux大法好啊!!!
最後,真誠的感謝各位同仁的熱心協助,祝各位年終獎翻倍!!!
回複內容:
今天發現網站開啟特別慢,然後分析原因,發現是資料庫查詢花費時間特別長,一個最簡單的查詢都至少4秒以上,然後分析最終發現原因是執行new PDO(...) 時間花費4秒以上,請問可能是因為什麼原因?
網站用的thinkphp架構,伺服器版本:windows serve 2008.
資料庫在另外一台伺服器上。
另:1.new PDO(localhost...) 不存在該問題
2.new PDO(另外一個windows上啟動並執行資料庫) 出現同樣問題
3.new PDO(另外一個linux上啟動並執行資料庫) 不存在該問題
4.在本地環境中new PDO(同一資料庫) 不存在該問題
...
請求大神解惑啊!!!謝謝
2016-01-28 09:32 更新:
測試代碼如下:
$t1=microtime(true);$dsn = "mysql:host=59.175.142.**;dbname=iqgame";$db = new PDO($dsn, '****', '****');s$t2=microtime(true);echo $t2-$t1; // 輸出4s多
1.web伺服器與資料庫伺服器均在外網,串連資料庫使用IP串連
2.這個問題是突然之間出現的,以前沒有這麼嚴重的連線時間
3.感謝大傢伙的熱心協助~
2016-01-28 10:11 再次更新:
感謝 @LakeChan 的提醒,我試著將web伺服器中的防火牆關閉,則瞬間解決問題!!!
然後我也不知道該怎麼配置防火牆才能屏蔽該問題,只能一條一條規則的嘗試,然後,待我重新開啟防火牆後發現問題居然沒有再出現了!!!
這種心情,感覺被狗[和諧]日了一樣!!!
總結,雖然不知道究竟發生了什麼!但是真心覺得還是Linux大法好啊!!!
最後,真誠的感謝各位同仁的熱心協助,祝各位年終獎翻倍!!!
1.使用IP而不是網域名稱,使用網域名稱會讓PDO在串連之前進行一次不必要的dns lookup,當DNS緩衝過於巨大的時候,這個問題可能會更嚴重。(即使是運行在本機,使用 127.0.0.1 而不是 localhost)
2.如果串連到內網的其他伺服器,內網的網路節點是否工作正常?是否會有防火牆處理串連過慢的問題?
網頁伺服器連資料庫伺服器是區域網路還是公網?
看不到代碼,難說。與資料庫是IP連的還是網域名稱連的也有關係
首先看看是不是因為IPV6的原因導致串連慢,其次看看Mysql配置是否合理。PHP不會出現串連慢的問題,問題肯定在mysql上
可能是mysql反向解析的問題,可以對比一下windows和linux伺服器的myslq的設定檔,看下是否有:
skip-name-resolve
另外,mysql日誌應該也會有相應的記錄。
樓主,php的pdo是C寫的擴充,效率是極高的,基本一個串連是毫秒級,所以不用懷疑擴充本身。
1、先看看是否代碼問題,單獨寫個demo用pdo串連下看,耗時多少
2、telnet一下web機跟sql機的耗時看看,是否網路問題(最常見)