2012-11-28 50 views
0

我在一臺裝有MySQL的Linux機器上同時運行100個PHP腳本。 我正在使用PDO,ATTR_PERSISTENT參數設置爲false。進程通常執行一些SQL命令並休眠30秒。使用PDO對象運行多個PHP進程的最佳實踐?

採用頂級進程列表看,我看到了很多的mysqld進程,每次取的內存大量空間。

我明白這個問題可以通過重新設計來解決,用隊列和\或共享連接,但是我正在尋找一個臨時的解決辦法,直到我準備好了一個更好的設置。

什麼是處理這種設置的最佳補救措施? 我應該在進程休眠時銷燬並重新創建每個PDO對象嗎? 我是否在PDO或MySQL中丟失了一些基本的配置選項?

回答

0

在PDO和睡眠方面,如果你不重新使用該連接計劃,早,你可以殺了它。原因在於,雖然它正在休眠(無效),但MySQL上的工作線程仍然存在。

如果你是不是會浪費睡眠過程,我建議去持久連接,並在PHP進程之間分享它。然而,這卻打開了一堆新的蠕蟲:僵局。

關閉連接,最好的辦法是消滅PDO對象 - 即$yourPDOOBject = null

+0

我該如何去分享連接,避免死鎖? –

+0

只需將PDO :: ATTR_PERSISTENT參數設置爲true即可。從那裏,假設您使用完全相同的憑證進行連接,則PDO將爲連接共享執行其餘的操作。對於死鎖,您需要了解MySQL如何鎖定行/表,具體取決於正在運行的內容。爲您的表格使用的引擎查找「MySQL鎖定」,因爲它們以不同的方式執行。 –

相關問題