RSS
 

Archive for the ‘Sql Server’ Category

Sql pooling nedir?

06 Nis

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

 

Sql server ajanı kullanmadan veritabanı yedeği alma

07 Ara
sql server ajanı kullanmadan veritabanı yedeği alma
sql server 2000 in ajanını kullanarak veritabanını yedeğini otomatik olarak aldırabiliyorduk fakat Vista Windows 7 gibi işletim sistemlerinde bazen uyum sorunu çıkartabiliyor bizde kendi programımızla basit bir şekilde istediğimiz veri birimine yedeğimizi kaydedebiliriz.
öncelikle t-sql cümlesini yazalım;
BACKUP DATABASE Northwind
TO DISK=’c:\yedek.bak’,
DISK=’d:\yedek.bak’,
DISK=’f:\yedek.bak’
WITH FORMAT,
MEDIANAME = ‘AdventureWorksStripedSet0′,
MEDIADESCRIPTION = ‘Striped media set for Northwind database’;
GO
bu kodu query analayser a yazdığımızda c,d ve f diskimize veritabanının yedeğini aldı ayrıca
yedeğin boyutu gibi ayrıntıları da gösterir şimdi bunu store procedure yapacağız ve c# da bir program yapacağız.
Şimdi kodumuzu yazıyoruz
CREATE PROCEDURE yedek AS
BACKUP DATABASE Northwind
TO DISK=’c:\AdventureWorks1.bak’,
DISK=’d:\AdventureWorks2.bak’,
DISK=’f:\AdventureWorks3.bak’
WITH FORMAT,
MEDIANAME = ‘AdventureWorksStripedSet0′,
MEDIADESCRIPTION = ‘Striped media set for Northwind database’;
GO

Sql server ajanı kullanmadan veritabanı yedeği alma

sql server 2000 in ajanını kullanarak veritabanını yedeğini otomatik olarak aldırabiliyorduk fakat Vista Windows 7 gibi işletim sistemlerinde bazen uyum sorunu çıkartabiliyor bizde kendi programımızla basit bir şekilde istediğimiz veri birimine yedeğimizi kaydedebiliriz.

öncelikle t-sql cümlesini yazalım;

BACKUP DATABASE Northwind

TO DISK=’c:\yedek.bak’,

DISK=’d:\yedek.bak’,

DISK=’f:\yedek.bak’

WITH FORMAT,

MEDIANAME = ‘AdventureWorksStripedSet0′,

MEDIADESCRIPTION = ‘Striped media set for Northwind database’;

GO

bu kodu query analayser a yazdığımızda c,d ve f diskimize veritabanının yedeğini aldı ayrıca

yedeğin boyutu gibi ayrıntıları da gösterir şimdi bunu store procedure yapacağız ve c# da bir program yapacağız.

Şimdi kodumuzu yazıyoruz

CREATE PROCEDURE yedek AS

BACKUP DATABASE Northwind

TO DISK=’c:\AdventureWorks1.bak’,

DISK=’d:\AdventureWorks2.bak’,

DISK=’f:\AdventureWorks3.bak’

WITH FORMAT,

MEDIANAME = ‘AdventureWorksStripedSet0′,

MEDIADESCRIPTION = ‘Striped media set for Northwind database’;

GO

C# ta yaptıgım SQL yedek alma programı:

Kodu incelemek isteyen arkadaşlar için kodunu gösterelim;

Store Procedure üst kısımda oluşturmuştuk

private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
  {
    SqlConnection bağlantı = new SqlConnection("Data Source=SERDAR-PC\\SQLEXPRESS;Initial Catalog=yeni;Integrated Security=True;Pooling=False");
    SqlCommand komut = new SqlCommand("yedek", bağlantı);
    komut.CommandType = CommandType.StoredProcedure;
    komut.Connection.Open();
    komut.ExecuteNonQuery();
    komut.Connection.Close();
    MessageBox.Show("Veritabanın Yedeği Diske Yazıldı...");
   }

UYGULAMAYI İNDİR