2010-09-22 114 views
6

我的網站一直使用持久連接,基於我對它們的理解,沒有理由不這樣做。爲什麼關閉連接時可以重複使用?我有一個網站,總共訪問大約7個數據庫。這不是一個巨大的交通網站,但它足夠大。我應該使用它們,你持續堅持什麼?持久性與非持久性 - 我應該使用哪一種?

回答

9

隨着持續連接:

  • 您不能建立事務處理有效
  • 相同的連接
  • 應用上是不可能的用戶會話不可擴展。隨着時間的推移,您可能需要對其進行擴展,並且需要對持久連接進行管理/跟蹤
  • 如果腳本無論何種原因無法釋放表上的鎖,那麼以下任何腳本都將無限期阻塞,並且應該重新啓動db服務器。使用事務,事務塊也將傳遞到下一個腳本(使用相同的連接),如果腳本執行的事務塊結束之前結束,等

持久連接不帶任何東西,你可以用非持久性連接做。
那麼,爲什麼要使用它們呢?
唯一可能的原因是性能,在創建到SQL Server的鏈接開銷很高時使用它們。這取決於很多因素,如:

  • 數據庫類型
  • MySQL服務器是否在同一臺機器上,如果沒有,能走多遠?可能超出您的本地網絡/域名?
  • 的機器上的MySQL坐在

一個多少被其他進程超載總是可以替換非持久連接持久連接。它可能會改變腳本的性能,但不會改變它的行爲!

商業關係數據庫管理系統可能會被打開併發連接數進行許可,這裏的永久連接misserve

+0

+1討論MySQL不是免費用於商業用途的信息。我想知道有多少人沒有意識到這一點。雖然,支付許可證相當便宜。 – NotMe 2010-09-22 03:36:37

+0

廢話我不知道......我得看看,謝謝。 – Webnet 2010-09-22 13:34:26

+0

有沒有一種方法可以跟蹤建立/關閉連接的開銷?我得到的錯誤涉及太多的連接,所以我想知道是否持久是問題的一部分。當你說交易是什麼意思,只是查詢? – Webnet 2010-09-22 13:35:25

1

我對該領域的知識有限,所以我不能給你關於這個主題的許多細節,但據我所知,創建連接並將它們交給一個線程的過程確實會花費資源,所以我會如果我是你,就避免它。無論如何,我認爲這些決定大部分不能一概而論,取決於業務。

例如,如果您的應用程序與數據庫連續進行通信,並且只會在應用程序關閉時停止,那麼可能需要持續連接,因爲您避免了之前提到的過程。但是,如果您的應用程序只是偶爾與數據庫通信以獲取次要信息,那麼關閉連接可能會更加理智,因爲您不會在未使用的打開的連接上浪費資源。

此外還有一種稱爲「連接池」的技術,您可以在其中創建一系列連接並將其保留在其中以供其他應用程序使用。在這種情況下,連接對數據庫持久,但對應用程序不持久。

注意:MSSQL中的連接始終對數據庫持久,因爲連接池是默認行爲。