摘要:[Oracle] 查看Oracle Connection Pool
前言
在正常的使用SQL時,在SQL執行完畢的時候應該都要執行 Close 或 Dispose 將資料庫的連線關閉,如果不將連線關閉則會殘留多餘的連線於 Connection Pool 中降低資料庫效能,看了一些 Connection Pool 的說明後,為了加深印象以下則實作一次測試,接下來實際去觀察資料庫中 Connection Pool 的運作情形,在 MSSQL 中可以使用 Microsoft SQL Server Managerment Studio 管理工作的 "活動監視器" 觀察。
測試範例
在Oracle中使用以下語法觀察 " select * from v$session "
既然已經找到可以觀察的地方了,接下來就是必須寫個程式去執行來觀察,建立一個測試頁並放入兩個按鈕。
測試頁 ASPX
測試頁 .VB
Web.Config設定
從上面的圖片可以看出來,兩個按鈕各是連結MSSQL與Oracle資料庫,首先先來看一下 如果不將資料庫連線 Close 或 Dispose 掉的話會有甚麼情形?
先將Code的 25,26,35,36行註解
接下來去網頁上將兩個按鈕都點擊一次
之後去資料庫觀察 Connection Pool 的連線
這邊會發現 Connection Pool 的連線各增加了一個,也就是我剛剛點擊產生的連線,但是因為我並沒有Close連線,所以我現在繼續點擊按鈕多次則會變成以下情形:
這邊會看到針對資料庫的連線增加了很多個,是的,原因就是因為連線沒有關閉導致在建立新連線時並不會去使用已建立過的連線,接下來將Code的25,26,35,36行的註解拿掉後,將IIS重新啟動 (將IIS重新啟動或修改Web.Config檔時會將Connection Pool中的連線回收)
這時再去執行網頁上的按鈕,各點擊多次後再返回觀看 Connection Pool 的狀態
這時候會發現連線只會有一個,因為當程式執行完Close後會將原本使用的連線移至Connection Pool中,等待如有需要時再拿出來使用,而在 Connection Pool中 的連線,如無使用的話大約6分鐘左右就會被系統資源回收而消失,但是在持續的使用下 還是可能造成連線數量過多的問題,所以也可以選擇停用 Connection Pool。
接下來在 Web.Config 中加入一個設定 Pooling=false;
pooling=false 也就是不使用的意思,預設是 true
接下來回到網頁後,一樣去點擊多次按鈕,再去觀察Connection Pool狀態
這時會發現,上面並沒有留有使用過的連線,因為停用了 Connection Pool 所以連線使用完後並不會存在於 Connection Pool 中,以上為在測試Connection Pool狀態的紀錄,還有很多細節沒去查看,如有錯誤請指教。
以上文章敘述如有錯誤及觀念不正確,請不吝嗇指教
如有侵權內容也請您與我反應~謝謝您 :)