首頁  >  問答  >  主體

mysql优化 - 一个关于 mysql_connect ,mysql_pconnect 连接时间的问题?

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

迷茫迷茫2743 天前709

全部回覆(1)我來回復

  • PHPz

    PHPz2017-04-17 13:16:39

    假設你用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同樣支援建立持久連線.

    回覆
    0
  • 取消回覆