標籤:資料庫連接池
Mysql資料庫連接池知識分享
使用優點:
串連池最大的優點是效能。建立一個新的資料庫連接是一個耗時耗資源的一個過程。而使用了串連池之後,串連請求可以直接通過串連池來提供而不需要重新串連、認證。這樣就節省了時間。
使用缺點:
串連池中可能會存在著多個沒有被使用一直串連著的資料庫,這意味著資源的浪費。
基本原理:
串連池基本的思想是在系統初始化的時候,將資料庫連接作為Object Storage Service在記憶體中,當使用者調用資料庫操作類MySqlConnection的Open()方法時,並非建立一個新的串連,而是從串連池中取出一個已建立的空閑連線物件。使用完畢後,使用者也並非將串連關閉,而是將串連放回串連池中,等待下一次調用。而串連的建立、斷開是由串連池自身來管理的。同時,還可以設定串連池的一些參數來控制串連池中的初始串連數、串連的上限、下限以及每個串連的最大使用次數、最大空閑時間等等。也可以通過其自身的管理機制來監視資料庫連接的數量、使用方式等。
主要屬性說明:
1、串連池啟用(pooling=true|false)
表示是否啟用串連池,當pooling=true時啟用串連池,等於false的時候不啟用串連池,預設狀態是啟用串連池的。
如果啟用串連池,當資料庫操作類調用Close()方法的時候並不是真正的關閉串連,而是將串連放回串連池中等待下次使用;如果不啟用串連池,則當調用Close()方法的時候被調用的資料庫連接將被銷毀,當再次需要用到連線物件的時候需要重建立立新的串連。
2、逾時時間(ConnectionTimeout)
是指連線物件在串連池中拿到串連的最大時間,如果超過該時間,程式將會拋出一個系統異常。ConnectionTimeout=0表示永遠不逾時。
3、最小串連數(MinimumPoolSize)
是串連池最少保持的資料庫連接,如果應用程式對資料庫連接的使用量不大,將會有一些的資料庫連接資源被浪費。
4、最大串連數(MaximumPoolSize)
是串連池能申請的最大串連數,系統預設的串連數是100,如果資料庫連接請求超過此數,後面的資料庫連接請求將被加入到等待隊列中,這會影響之後的資料庫操作。
測試過程:
軟體:VS2012、Navicat Premium、WampServer
1、測試pooling,最小串連數,最大串連數以及逾時
A.啟用串連池:將最小串連數設為2,最大串連數設為4,逾時時間為5秒
650) this.width=650;" width="553" height="208" src="/e/u261/themes/default/images/spacer.gif" style="background:url("/e/u261/lang/zh-cn/images/localimage.png") no-repeat center;border:1px solid #ddd;" alt="spacer.gif" />
(圖1-1)
B.運行串連池測試程式,建立一個串連。
650) this.width=650;" width="367" height="189" src="/e/u261/themes/default/images/spacer.gif" style="background:url("/e/u261/lang/zh-cn/images/localimage.png") no-repeat center;border:1px solid #ddd;" alt="spacer.gif" />
(圖1-2)
運行NavicatPremium,建立串連後(過程略),執行showprocesslist命令。發現實際上已經建立了2個串連。結果如:(db為example的為我們的測試庫)
650) this.width=650;" width="381" height="200" src="/e/u261/themes/default/images/spacer.gif" style="background:url("/e/u261/lang/zh-cn/images/localimage.png") no-repeat center;border:1px solid #ddd;" alt="spacer.gif" />
(圖1-3)
由此可見,當設定了最小串連數,即使程式中只建立一個串連,資料庫端也會自動建立2個串連。
C.點擊第一個串連的“中斷連線”按鈕。串連狀態將會顯示為“未串連”;再次執行show processlist命令會發現串連池中依然存在兩個串連(圖形略)。
說明調用Close方法的時候實際上沒有關閉串連,只是將串連放回串連池中。
D.試圖建立5個串連,
650) this.width=650;" width="389" height="197" src="/e/u261/themes/default/images/spacer.gif" style="background:url("/e/u261/lang/zh-cn/images/localimage.png") no-repeat center;border:1px solid #ddd;" alt="spacer.gif" />
(圖1-4)
650) this.width=650;" width="375" height="219" src="/e/u261/themes/default/images/spacer.gif" style="background:url("/e/u261/lang/zh-cn/images/localimage.png") no-repeat center;border:1px solid #ddd;" alt="spacer.gif" />
(圖1-5)
點擊第5個串連5秒鐘後顯示第5個串連失敗。由此可見當前串連池只能容納4個串連,且逾時後程式會報出異常。
2、不啟用pooling
A.在資料庫連接字串中將pooling改為false
B.運行測試程式,建立一個串連,(圖1-1),執行showprocesslist命令,結果
650) this.width=650;" width="349" height="168" src="/e/u261/themes/default/images/spacer.gif" style="background:url("/e/u261/lang/zh-cn/images/localimage.png") no-repeat center;border:1px solid #ddd;" alt="spacer.gif" />
(圖2-1)
C.點擊第一個串連的“中斷連線”按鈕,再次執行show processlist,結果如:
650) this.width=650;" width="392" height="160" src="/e/u261/themes/default/images/spacer.gif" style="background:url("/e/u261/lang/zh-cn/images/localimage.png") no-repeat center;border:1px solid #ddd;" alt="spacer.gif" />
(圖2-2)
可見串連是真正的關閉了,並沒有儲存在串連池中。
Mysql資料庫連接池知識分享