簡體   English   中英

關閉mysql連接重要嗎?

[英]Is closing the mysql connection important?

明智地關閉mysql連接是否至關重要,還是在php文件運行后自動關閉?

文檔

注意:一旦腳本執行結束,到服務器的鏈接將立即關閉,除非它提前通過顯式調用 mysql_close() 關閉。

如果您的腳本在獲取結果后需要執行大量處理並檢索到完整的結果集,則您絕對應該關閉連接。 如果不這樣做,當 Web 服務器使用量很大時,MySQL 服務器可能會達到它的連接限制。 如果您在腳本接近尾聲之前無法關閉 MySQL 連接,盡管沒有必要明確這樣做,但它會更清晰。

我不確定 fastcgi 如何影響事情。 一個頁面聲稱支持 fastcgi 的 PHP 版本將創建持久連接,即使是 mysql_connect。 這與文檔相矛盾,因為連接在進程而不是腳本結束時關閉。 與其進行測試,不如推薦使用 mysql_close()。 實際上,我建議使用PDO (如果可用)。

關鍵嗎? 沒那么多

遵循它是否被認為是一個好習慣? 是的。

我不明白你為什么不想關閉它。

使用 cgi 之類的東西時,完全沒有必要關閉 mysql 連接,因為它們會在腳本執行結束時自動關閉。 當使用諸如 mod_perl 和其他持久性技術來維護請求之間的連接時,跟蹤連接、全局變量等很重要。

基本上,對於持久數據,請自行清理。 對於瑣碎的、非持久性的數據,不管怎樣,當請求完成時它都會消失。 無論哪種方式,最佳做法是始終關閉您的連接。

腳本完成執行后立即關閉。 除非您打開了持久連接。 理想情況下,您應該在完成后立即釋放資源(此處為連接)。 除非您很有可能在執行過程中很快再次需要它。

如果您在單個數據庫服務器后面,連接池或使用持久連接(如果這就是您的意思)是一個好主意。 但是,如果有更多服務器並且您正在負載平衡,則可能會影響工作分配。 通常,一些客戶端運行大量查詢,而其他客戶端運行較輕的查詢。 因此,如果在 n 次以上使用相同的連接,則某些服務器將承受沉重的負載,而其他服務器則未得到充分利用。 考慮使用較小的 ttls 和可變連接池大小。

大多數CMS在請求結束時關閉MySQL連接,這確實沒有意義,因為無論如何PHP都會這樣做。

但是,如果您有一個不再需要連接的腳本,比如在腳本中間,然后發生其他繁重的活動,那么明確關閉連接是個好主意。 這將釋放一些資源。

現在,關於關閉連接的好處已經說了很多,但幾乎沒有說不關閉連接的好處。 本質上,如果您沒有在腳本結束時關閉連接,那么您確實是在節省一些資源。 想象一個 Web 應用程序(或任何應用程序)每秒接收 100 次瀏覽量。 因此,每一秒,你都需要調用mysqli_close 100 次——這意味着每一秒,你有 100 次不必要的往返數據庫服務器來關閉打開的連接。 從性能的角度來看,這是純粹的開銷,因為 PHP 將在腳本完成時檢查打開的連接並關閉這些連接,並且可能是因為一切發生得太快,PHP 沒有看到您有關閉這些連接並將嘗試再次關閉它們。

注意:上面的答案假設您沒有使用持久連接(在任何主要 CMS 中都沒有使用持久連接)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM