我知道(通過這裏讀上無數的帖子在SO和其他網站)持久連接是不是絕大多數的開發者非常喜愛(如果該腳本終止突然,連接沒有得到封閉,你可能最終留下一些表格鎖定等),但它真的很糟糕?PHP&PDO - 是否有任何方法可以實現'安全'持續連接?
在我的機器(T3400雙核CPU,內存4 GB的和5400RPM硬盤),頁面加載時間非常不同取決於我是否使用永久或非永久連接。非持久連接與2.09s非常不同,對於持續連接(大致)爲68ms。以下是您可以看到的兩個示例屏幕截圖:non-persistent與persistent。
我理解的持久連接的風險(我真的不使用它們每天的基礎上,雖然我覺得這個概念有趣,我想探索的話),但不存在任何檢測非法 - 關閉連接?
就像例如,相當於mysqli的change_user
,但是對於PDO或某種PHP腳本,服務器每隔X秒運行一次cron作業以檢查剩餘的並隨後關閉它們?我正在閱讀register_shutdown_function
,但是如果我理解正確,腳本完成後就會調用它,實際上,這可能意味着每次腳本結束時它都會結束持久連接。或者我錯了?
編輯
我忘了說我的軟件堆棧,爲準確起見,所以讓我修改的那個。我目前的堆棧由以下元素:Windows 7 (x86) SP1
作爲操作系統,Apache 2.4.3
,PHP 5.4.9
和MySQL 5.5.28
(我總是用最新版本的工作)。運行堆棧爲localhost
(我可能將其遷移到專用機器,但現在,它仍然是這樣)。
我覺得很奇怪,在本地機器上建立MySQL連接的代價是2秒。這裏有什麼可疑的東西,你確定這是持續性還是非持久性,導致了性能的劇烈變化?使用持續連接可能不是治癒的問題,但問題仍然存在,我會尋找罪魁禍首,而不是用潛在危險的事物來糾正問題。 –
對不起,就像我剛纔評論@ hek2mgl的答案一樣,我正在創建兩個持久連接。一個用於核心應用程序數據庫(我想要存儲客戶賬單信息和幾件事情),另一個用於客戶數據庫(所有應用程序模塊將存儲他們的數據,例如報價單,訂單,發票,交貨單等等上)。我的實際代碼測試看起來像'$ sql ['core'] = $ database-> addConnection(「core」); $ sql ['client'] = $ database-> addConnection(「client」);'。因此那兩秒鐘。每個連接一秒鐘。 –
1秒仍然太多。在沒有負載且有足夠RAM可用的機器上,db連接的時間不應超過幾毫秒。 –