mysql优化 - 一个关于 mysql_connect ,mysql_pconnect 连接时间的问题?
迷茫
迷茫 2017-04-17 13:14:39
0
1
763

1、mysql_connect 连接后,多长时间会自动释放 ?
2、mysql_pconnect呢,多长时间会自动释放 ?
3、如果使用pdo,是不是和上面情况一样的?
4、配置参数wait_timeout 和连接时间是什么关系?

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回覆(1)
PHPzhong

假設你用5個PHP-FPM工作行程跑PHP Web服務.

mysql_connect是短連線,也就是在PHP-FPM工作進程處理完成目前請求後,會自動釋放到MySQL的資料庫連線.

mysql_pconnect是持久連接,也就是每個PHP-FPM跟MySQL建立連接後,在處理完成當前請求後,並不會釋放數據庫連接,下一個請求能重用這個數據庫連接,從而避免不同請求重複建立資料庫連線帶來的開銷.

有5個PHP-FPM工作進程,就能保持5個到MySQL的持久連接,形成了一一對應的"數據庫連接池",但要注意PHP-FPM的進程數pm.max_children不要多於MySQL的最大連線數max_connections(預設151).

show global variables like '%timeout%'; 可見MySQL的wait_timeoutinteractive_timeout的預設值都是28800秒(8小時).PHP-FPM跟MySQL的持久連線,空閒時間超過wait_timeout後,頁面再次執行mysql_pconnect會回傳"MySQL server has gone away"的Warning訊息,這時會重新建立持久連線,並不會影響程式的正常運作,這時可以用@抑制Warning訊息的輸出.但編寫運作在命令列下的PHP CLI程式時,建議不要使用持久連接,建議每次使用時都重新開啟和關閉資料庫連線,避免資料庫連線遺失時導致CLI程式故障的問題.

提一下,mysql_系列函數在PHP7中已經不再支援,建議改用mysqli和pdo_mysql來操作MySQL資料庫,mysqli和pdo_mysql同樣支援建立持久連線.

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板