mysql_connect v/s mysql_pconnect,mysqlpconnect
原文:mysql_connect v/s mysql_pconnect
譯文:mysql_connect v/s mysql_pconnect
譯者:dwqs
當需要使用PHP串連MySQL資料庫的時候,會發現有兩種資料庫連接函數:mysql_connect()和mysql_pconnect()。
1、mysql_connect()
在指令碼開始的時候,mysql_connect()會建立一個新的串連,指令碼結束的時候就會關閉串連。指令碼每一次執行,它都會建立一個新的串連。
2、mysql_pconnect()
當使用mysql_pconnect()串連資料庫時,它首先會判斷是否已經存在了資料庫連接,如果存在,就會利用先用的資源ID,反之,就會建立一個新的串連。
在建立串連之後,函數返回資源ID(如果有)。當指令碼再次調用的時候,它並不會建立新的串連。當然,指令碼結束的時候,也不會關閉串連。這稱之為持久串連。
但是,使用mysql_pconnect()時,需要對伺服器配置做一下微調,譬如限制串連數,逾時串連,以及處理空串連等。
3、怎麼使用這兩個函數
如果你的應用有很大流量,應該使用mysql_pconnect()函數,反之考慮mysql_connect()函數。
如果PHP和MySQL在同一台伺服器上或者在本網,串連次數是可以忽略的,因為無論在哪種情況之下,持久串連都沒有優勢可言。
4、使用mysql_pconnect()應該留意的事
一般來說,當你鎖定一個表時,串連關閉之後是就自動解鎖了。但由於持久串連不關閉,任何你不小心鎖定的表仍然會保持鎖定的狀態,唯一解鎖的辦法就是等待連線逾時或者手動殺死進程。在進行事物處理時也會造成這個問題。
同樣,暫存資料表在串連關閉之後也會被刪除。但由於持久串連不關閉,暫存資料表就不再是暫存資料表了。如果你完成需求後不刪除暫存資料表,它將作為一個新的用戶端串連,並且是對於同一個串連。在設定Session變數的時候,會造成同樣的問題。
在Apache上使用持久串連的效果並不會很好。當Apache收到用戶端的一個請求時,會開啟一個新的資料庫連接,而不是利用已經存在持久串連去開啟資料庫,這將導致很多空閑進程、浪費資源,當達到最大串連數時,還是造成未知錯誤。
原文首發:http://www.ido321.com/1312.html
下一篇:DOM筆記(一):HTMLDocument介面