爬了好多文,反而越看越 confuse
想直接請教什麼時候適合用哪種
相簿型的網站會一直看照片,也就是說換頁動作應該會很繁複
是不是比較適合 pconnect?
$conn = mysql_connect($host, $user, $password, true);
mysq_close($conn);
跟換頁應該沒直接關係吧?(也不是沒有)
mysql_connect會在程式執行完畢後關閉,或是在呼叫mysql_close()時關閉connection。
mysql_pconnect的connection不會關閉,即使呼叫mysql_close()也一樣。反之,在呼叫mysql_pconnect時,他會先找有沒有可用的connection(未被其他php或程式使用),有的話就使用它,沒有的話才建立新的。
建立connection需要時間及資源,所以一般來說,使用mysql_pconnect是比較有效率的,但是因為connection在使用過後不會關閉,所以平均來說會使用較多的資源。(這個方式,就是Connection Pool,你在使用Java的Application伺服器應該就會聽到這個名詞)
換頁,除非你是使用AJAX而不是變動網址,那對PHP來說應該會結束一個程式,然後啟動另一個程式。即使你不是把相片存在mysql中,也沒有呼叫mysql_close()等等,如果使用的是mysql_connect的話,php的mysql模組還是會幫你做mysql_close()。使用mysql_pconnect比較沒有這樣的顧慮。
建議你看一下:
http://www.php.net/manual/en/features.persistent-connections.php
http://www.php.net/manual/en/function.mysql-pconnect.php
http://www.php.net/manual/en/function.mysql-connect.php
如果懷疑你的mysql設定不夠好,至少:
http://blog.wu-boy.com/2009/11/mysql-%E5%BF%85%E8%A6%81%E4%BF%AE%E6%AD%A3%E4%B8%80%E4%BA%9B%E9%A0%90%E8%A8%AD%E5%80%BC-performance-tunning/ <--要改這裡面提到的這四個設定,雖然有點囧。
tsung的blog上有很多他管理mysql伺服器的心得,有空的話不妨去逛逛:
http://blog.longwin.com.tw/
使用 mysql_connect 必須自己用 mysql_close 關閉,好處是可以確保沒有閒置浪費的 connection;壞處是每次得重新連線,效率較不好,而且萬一沒有用 mysql_close 關閉,那麼那個連線會一直浪費著,無法被 reuse,直到 wait_timeout 到了之後,才會被回收。
使用 mysql_pconnect 好處是不必用 mysql_close 關閉,而且沒有重新連線的成本 (除非已過了 wait_timeout 時間), 只要同一 user 持續在使用,那麼這個連線就一直被 reuse。
我的建議是,如果你是設計 Windows AP / Linux AP,那麼使用 mysql_connect,自己掌握連線與斷線。因為這類軟體有 exception/error handler 可以捕捉異常,避免連線沒 close 而浪費。
如果你是設計 Web AP,那麼建議使用 mysql_pconnect,並且在 MySQL 的設定中,把 wait_timeout 縮短,它預設是閒置 24 小時後才會回收,你可以調整成比如 wait_timeout = 600,即閒置 10 分鐘就回收。這樣就不必擔心會浪費連線數了。