| 特性 | mysql_connect() | mysql_pconnect() |
|---|---|---|
| 連線生命週期 | 請求建立 → 請求結束自動關閉 | 請求建立 → 請求結束**不關閉**,放入連線池複用 |
| 適用場景 | 低頻、輕量頁面 | 高頻、高併發頁面 |
| 資源消耗 | 頻繁建立/銷毀開銷大 | 複用連線,減少開銷,但長期佔用資源 |
| 配置需求 | 無特殊調整 | 需調整 MySQL max_connections、Apache 執行緒/進程數、超時設定 |
p = persistent(永久)。max_connections ≥ Apache 最大執行緒/進程數。wait_timeout、interactive_timeout 清理空閒連線。MaxClients/ThreadsPerChild(Windows)或 ServerLimit/MaxRequestWorkers(Linux)需與資料庫連線上限匹配。ThreadsPerChild 500)。pconnect 頁面 → 500 條持久連線常駐。max_connections < 500 → 新請求連線失敗。ServerLimit、MaxRequestWorkers 與 MySQL max_connections 一致。pconnect,但**必須**完成全鏈路容量規劃(Web 伺服器執行緒數 = 資料庫最大連線數)。connect/pconnect 易導致連線洩漏與難以除錯。持久連線**不提供**: - 用戶會話綁定(Session 綁定) - 事務跨請求保持 - 任何非持久連線無法提供的特殊功能
本質只是「不關閉 TCP 連線」,應用層邏輯完全相同。
除非你完全掌控全棧容量規劃並接受運維複雜度,生產環境強烈建議使用 mysql_connect()(或 PDO/mysqli 短連線)配合應用層連線池。持久連線是雙面刃,用不好會刺傷自己。