頻繁開啟資料庫連接是否影響效能的疑惑

來源:互聯網
上載者:User

     之前寫了很多資料庫開發方面的程式,有的時候需要連續操作資料庫,就在想這麼密 集去操作資料庫會不會大量消耗資源,因為記憶體回收機制並不是馬上執行。於是,特意瞭解了一下情況。

    其實,資料庫連接並不是託管資源,所以記憶體回收管不到它。另外Stream (檔案流),COM (組件),Socket等這些都是非託管的資源。

    正統的資料庫Oracle,Sql Server,MySql等,都提供了一中串連池的機制來處理這種狀況。下面就來瞭解一下這個神秘的串連池。 

    串連到資料庫伺服器通常由幾個需要很長時間的步驟組成。必須建立物理通道(例如通訊端或具名管道),必須與伺服器進行初次握手,必須分析連接字串資訊,必須由伺服器對串連進行身分識別驗證,必須運行檢查以便在當前事務中登記,等等。

    實際上,大多數應用程式僅使用一個或幾個不同的串連配置。這意味著在執行應用程式期間,許多相同的串連將反覆地開啟和關閉。為了使開啟串連花費的系統開銷最小,ADO.NET
使用稱為串連池的最佳化方法。

    串連池使新串連必須開啟的次數得以減少。池進程保持物理串連的所有權。通過為每個給定的串連配置保留一組活動串連來管理串連。每當使用者在串連上調用Open
時,池進程就會尋找池中可用的串連。如果某個池串連可用,會將該串連返回給調用者,而不是開啟新串連。應用程式在該串連上調用Close 時,池進程會將串連返回到活動串連池集中,而不是關閉串連。串連返回到池中之後,即可在下一個Open
調用中重複使用。

    只有配置相同的串連可以建立池串連。ADO.NET 同時保留多個池,每種配置各一個。在使用整合的安全性時,串連按照連接字串以及
Windows 標識分到多個池中。還根據串連是否已在事務中登記來建立池串連。

    池串連可以顯著提高應用程式的效能和可縮放性。預設情況下,在 ADO.NET 中啟用串連池。除非顯式禁用,否則,在應用程式中開啟和關閉串連時,池進程會對串連進行最佳化。還可以提供幾個連接字串修飾符來控制串連池的行為。有關更多資訊,請參見本主題後面的“使用連接字串關鍵字控制串連池”。

    ------------------------------------------------------------------------------------------

    在初次開啟串連時,將根據完全符合演算法建立串連池,該演算法將池與串連中的連接字串關聯。每個串連池都與一個不同的連接字串相關聯。開啟新串連時,如果連接字串並非與現有池完全符合,將建立一個新池。按進程、應用程式定義域、連接字串以及
Windows 標識(在使用整合的安全性時)來建立池串連。連接字串還必須是完全符合的;按不同順序為同一串連提供的關鍵字將分到單獨的池中。

在以下 C# 樣本中建立了三個新的SqlConnection 對象,但是管理時只需要兩個串連池。注意,根據為Initial
Catalog 分配的值,第一個和第二個連接字串有所不同。

 

            using (SqlConnection connection = new SqlConnection("Integrated Security=SSPI;Initial Catalog=Northwind"))
            {
                connection.Open();
                // 建立串連池A
            }

            using (SqlConnection connection = new SqlConnection("Integrated Security=SSPI;Initial Catalog=pubs"))
            {
                connection.Open();
                // 建立串連池B,因為連接字串不同
            }

            using (SqlConnection connection = new SqlConnection("Integrated Security=SSPI;Initial Catalog=Northwind"))
            {
                connection.Open();
                // 使用串連池A,因為連接字串與串連池A相同
            }

    如果 MinPoolSize 在連接字串中未指定或指定為零,池中的串連將在一段時間不活動後關閉。但是,如果指定的MinPoolSize 大於零,在AppDomain 被卸載並且進程結束之前,串連池不會被破壞。非活動或空池的維護只需要最少的系統開銷。

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.