2010-08-02 116 views
3

我正在運行由PHP/MySQL驅動的Web服務,並且最近發現了一個奇怪的問題。PHP,MySQL和「睡眠」連接

當我運行「顯示完整進程列表」;通過SSH終端SQL命令,我注意到一些「沉睡」連接:

| Id  | User | Host  | db  | Command | Time | State | Info     | 
+-----------+---------+-----------+---------+---------+------+-------+-----------------------+ 
| 218121282 | test_user | localhost | test_db | Sleep | 0 | NULL | NULL     | 

難道這些「沉睡」的連接發生,因爲在劇本到底要不要使用mysql_close()的?

如果這是原因,我可以通過使用「register_shutdown_function」PHP函數並在回調函數上運行mysql_close()來解決此問題嗎?

感謝您的建議。

+0

「難道這些‘沉睡’的連接,因爲在年底不使用mysql_close()的發生腳本?」不會。這是針對非持久性連接自動完成的。 – NullUserException 2010-08-02 07:33:19

回答

0

你使用持久連接(mysql_pconnect())嗎?如果配置不當,他們有這種習慣無限期待在身邊。

+0

嗨,不,我沒有在我的代碼的任何地方使用mysql_pconnect()。還有什麼建議?謝謝。 – TamTam 2010-08-02 08:13:54

2

由於在腳本末尾沒有使用mysql_close()會發生這些「睡眠」連接嗎?

號的MySQL連接都在腳本的末尾反正關閉,除非他們是持久的。

這些睡眠連接意味着您要麼使用持久連接,要麼導致您的MySQL連接長時間保持打開狀態,這是因爲PHP腳本運行時間很長或其他原因。

如果你不知道你是否需要持續連接,關閉它可能是一個好主意。與流行的建議相反,在很多情況下,它們實際上可能會產生比解決問題更多的問題,例如導致您更快地耗盡資源。然而,在某些特定的情況下,他們需要它們,但是你需要知道你在做什麼以及不該做什麼,以避免你可能會打開並且讓數百個連接長時間處於睡眠狀態等

+0

嗨, 感謝您的答案,我的代碼不使用持久連接。一旦腳本結束後,MySQL連接可能會在一段時間後自動關閉。可能嗎? – TamTam 2010-08-02 08:13:37

0

變化wait_timeoutinteractive_timeout變量值較小

在my.cnf文件有變化,在CentOS的