SQL POOLİNG
Sql pooling nedir?
Pooling bildiğimiz gibi havuz anlamındadır sql açısından da ilk bakışta bu anlamı taşır çünkü sql pooling connectionların tutulduğu bir havuz olarak düşünebiliriz.
Peki ne işe yara sql pooling? Connection pooling size var olan connectionları yeniden kullanmanıza olanak sağlar. Örnek olarak birbirinde farklı tipteki uygulamalar aynı bağlantıyı kullanabilirler güncelleme veri girişi gibi farklı işlemler gerçekleştirebilirler. İşte bu gibi durumlarda tekrar bağlantı oluşturarak kaybedilen zaman ve performansın pooling sayesinde önüne geçilmiş olur. Connection pools bu işlemleri süreçlere ayırarak gerçekleştirir. Uygulama alanı ve bağlantı cümlesi olarak.
Aşağıdaki kod parçası bizim bağlantı cümlemiz pooling default olarak true haldedir.
SqlConnectionStringBuilder ayar = new SqlConnectionStringBuilder();
ayar.DataSource = “.”;
ayar.InitialCatalog = “personel”;
ayar.IntegratedSecurity = true;
ayar.Pooling = false;
OleDb için de aynı şekilde pooling işlemi gerçekleştirilir. Pooling işleminin kendi içerisinde bazı keywordleri vardır bunları sırayla açıklayalım.
ConnectionReset= Bu özellik true olursa sql server bağlantının kesilmesi veya zayıflaması durumunda bağlantıyı resetler.
Enlist= Eğer bağlantınızı bir transaction un bir parçası olarak kullanacaksanız true olması gerekir.
Load Balance TimeOut= Bu özellik bellekten silinecek bir connection pool un silinmeden önce ne kadar süre minmum kalması gerektiğini gösterir.
MaxPoolSize= İzin verilen en fazla connection nesnesini belirtir. Server uygulamalarında kullanılabilir bir özellik.
MinPoolSize= İzin verilen en az connection nesnesini belirtir.
Şimdi gelelim oledb connection string için oledb servislerine
OLEDB SERVİSLERİ DEĞERİ
Bütün servileri aç ayar2.OleDbServices = -1;
Bütün servileri aç pooling ve transaction hariç ayar2.OleDbServices = -4;
Client cursor dışında bütün servisleri aç ayar2.OleDbServices = -5;
Bütün servisleri kapat ayar2.OleDbServices = 0;
Şimdi gelelim pooling açık ken ve kapalı iken aradaki performans farkını görmeye öncelikle aşağıdaki tasarımı oluşturuyoruz.
2 adet 10000 lik döngü kuruyoruz ve birinci butuna bastığımızda poling özelliği açık 2. Butona tıkladığımızda ise pooling kapalı olacak şekilde kodumuzu yazıyoruz döngüye girmeden önceki zamanı ve döngü sonundaki zamanı alıp timespan ile aradaki farkı yazdırıyoruz. Pooling açıkken bu işlemi 242 mili saniye de gerçekleştiriyor aynı işlemi pooling kapalı iken 17770 saniye gerçekleştiriyor bu da ardaki uçurumu ve zaman farkını ortaya çıkartıyor. Fakat bu işlemi çok kullanıcılı olmayan ve veritabanına fazla bağlantı gerekmeyen işlerde kullandığımızda ise tam tersi bir durum söz konusu pooling in açık olması bir dezavantaj oluyor.
SqlConnectionStringBuilder ayar = new SqlConnectionStringBuilder();
ayar.DataSource = ".";
ayar.InitialCatalog = "personel";
ayar.IntegratedSecurity = true;
ayar.Pooling = true;
SqlConnection con = new SqlConnection(ayar.ConnectionString);
DateTime dtBaslangic = DateTime.Now;
for (int i = 0; i < 10000; i++)
{
con.Open();
con.Close();
}
DateTime dtBitis = DateTime.Now;
TimeSpan tsGecerSure = dtBitis - dtBaslangic;
textBox3.Text = tsGecerSure.TotalMilliseconds.ToString()+" ms";

Sql server ın performans izleme paneli ile de aradaki farkı kolayca görebiliriz. Poolingin kapalı ve açık olduğu noktalar işaretlenmiş şekilde