Connection pooling, veritabanina yapilan baglantilarin sonraki baglantilar için de sifirdan olusturma maliyetine gerek kalmaksizin tekrar kullanilabilir olmasi amaciyla bellekte (sunucuda hani hostta) tutulan bir tür saklayicidir. Veritabanina yapilan baglanti isleminin sifirdan olusturulmasinin çalisma zamani maliyeti düsünüldügünde bir baglanti havuzunun açik ve tekrar kullanilabilir baglantilari barindirmasinin getirecegi kolaylik da daha netlesmis olur. Bu çerçevede connection pooling ile ilgili bazi özellik ve kurallari vurgulayalim.
1- Öncelikle bir soru ile baslayalim. Connection pooling islemini kim yönetir? Cevabi Connection Pool Manager. ADO.NET uygulamalari için de ADO.NET Connection Pool Manager olarak genisletelim.
2- Her bir baglanti cümlesi için (connection string) ayri bir Connection Pool açilir ve her biri uygulamaya özeldir(application specific)
3- ADO.NET içinde Connection Pooling varsayilan olarak açiktir. Kapatmak için baglanti cümlesinde pooling = false ifadesi kullanilmalidir.
4- Her bir connection pool için min pool size ve max pool size özellikleri verilir. Bu degerlerin varsayilan degerleri sirasiyla 1 ve 100'dür. Yani varsayilan degerler birakilirsa connection pool 100 adede kadar aktif baglanti tutar. Veritabanina yeni bir baglanti talebi gelirse, havuzda bosta baglanti varsa hemen verilir. (Max Pool sayisi, ihtiyaca göre degisir. Pool kapasitesini artirirsaniz daha çok talebe hizli cevap verebilirsiniz fakat bir yandan da bellekte daha fazla
yer kaplamaya baslayacaginizdan, bu noktada ince ayar yapilarak optimal degerler bulunmalidir.)
5- Connection Pool, veritabanina ilk baglanmaya çalisildiginda açilir. Sunucu üzerinde bellekte tutulmaya baslanir. Uygulama (application) unload edilir, iisreset ve türevi komutlar çalistirilirsa bellekten kaldirilir. Ilgili baglantiya belli bir süre talep gelmedigi zaman da (inactive period) pool, bellekten kaldirilir.
6- Uygulama içinde conn.Open(), conn.Close() ve conn.Dispose() metodlarinin kullanimi pooling açisindan önemli anlardir. Veritabani baglantilari için her zaman tavsiye edilen durum, "mümkün oldugunda geç baglan, erken çik"tir. Yani kaynaklari mümkün mertebe az kullanma esasina dayanir. Baglantiyi Open() metodu ile saglama talebi gönderdigimizde eger havuzda bosta bir baglanti varsa hizli bir sekilde baglaniriz. Close() metodu aktif baglantiyi kapatir ve Connection Pool için bosa alir. Yani yeni bir baglanti nesnesi bizim bu kullanip biraktigimiz baglantiyi alabilir durumda olacaktir. Dispose() metodu ise Close() metodundan bir adim öteye giderek baglantinin durum bilgisini ve baglantinin bazi özelliklerini de temizler. Eger conn = Nothing kullanilirsa Garbage Collection'i çagirarak baglantinizin unpool edilmesine neden olursunuz. Bu bilgilerden sonra tavsiye nedir derseniz, Dispose() kullanmak en dogrusu, Close() da benzer bir islevi gördügünden idare eder bir kullanimdir denilebilir.
Baglanti havuzu seçenekli Web.Config dosyasindaki bir Baglanti Dizesi:
<connectionStrings>
<add name="sqlConnectionString" connectionString="Data Source=mySQLServer;Initial Catalog=myDatabase;Integrated Security=True;Connection Timeout=15;Connection Lifetime=0;Min Pool Size=0;Max Pool Size=100;Pooling=true;"/>
</connectionStrings>
SQL Server baglanti dizesi havuzu özniteliklerine bakacak olursak eger;
Connection Lifetime: Yaratildiktan sonraki saniye cinsinden süresi, ardindan bir baglanti yok edilir. Varsayilan deger, baglantida maksimum zamanasimi olacagini belirten 0'dir.
Connection Reset: Havuzdan çikarildiginda baglanti sifirlansin mi diye belirtir. Varsayilan deger true'dur.
Enlist: Baglanti, islem içerigi varsa, olusturma is parçaciginin geçerli hareket içeriginde otomatik olarak listelenip listelenmeyecegini belirtir. Varsayilan deger true'dur.
Load Balance Timeout: Baglanti kaldirilmadan önce baglanti havuzunda bosta kalabilecek süreyi saniyeler olarak.
Max Pool Size: Havuzda izin verilen azami baglanti sayisi. Varsayilan deger 100'dür.
Min Pool Size: Havuzda tutulan minimum baglanti sayisi. Varsayilan deger 0'dir.
Pooling: True oldugunda, baglanti uygun havuzdan çekilir veya gerekirse olusturulur ve uygun havuza eklenir. Varsayilan deger true'dur.