[筆記] PHP 連向 MySQL 會有莫名的延遲感



其實這症狀好一陣子了,我老覺得網站主機明明不慢,但是部落格系統 WordPress 就是覺得要等一下才會出現畫面。我曾經不斷的升級軟體元件,像是把陳年的 PHP 從 x86 版換成 x64 版,MySQL 也是一路從 4.x 升級到 5.6 x64 版,但是都沒有什麼改善。為了找出到底是哪一行程式拖慢了速度,我就拿 WordPress 裡面內附的 timer_stop() 這個功能,一段一段的往 WordPress 的執行程式中加下去,讓程式執行時間毫無羞恥心的直接秀在瀏覽器裡面看到底是在哪一行會出現大量延遲。

PHP-Mysql

終於讓我發現是 mysql_connect… 噗… 為什麼 PHP 向 MySQL 建立連線時會需要約 1 秒鐘的時間?十幾年前 PHP 與 MySQL 之間不就是因為高強度的合作關係與效率而讓這個組合在開源軟體界竄起?

然後從國外的文章中找到了解答,如果 php 連向 MySQL 時都是在同一台主機上,且使用 localhost 當作連線位置時,若作業系統為 Windows NT 6.1 以上,則預設 localhost 會解析成 IPV6 位置,但因為 MySQL 通常不會安裝成支援 IPV6,這會導致約 1 秒鐘的連線 timeout,然後才轉為使用 localhost 的 IPV4 位置也就是常見的 127.0.0.1 去連線。

你問我 Windows NT 6.1 是啥(其實沒有人問),因為我覺得這樣講比較文青(最好是…),其實就是指 Windows 7 或 Windows Server 2008 R2 這兩種作業系統。

知道原因以後就有幾種解法了…

  1. 修改 %windows%\system32\drivers\etc\hosts 這個檔案,把裡面那個 IPV6 表示法的 localhost 給刪除,留下 127.0.0.1 那個。
  2. mysql_connect 連線位置不要用 localhost,改用 127.0.0.1。
  3. 取消作業系統支援 IPV6,這不是網路卡那邊不勾選 IPV6 就好,我看手續好麻煩懶得學也懶得寫上來。
  4. 升級 MySQL 去支援 IPV6。
  5. 把 MySQL 裝到另外一台機器上去…

我自己是選擇就用 127.0.0.1 去連線就好,改法簡單,系統速度也快。

歷史上的今天...

Facebook留言

個留言

您可能也會喜歡…