Makale Özeti

Bu yazimda SQL Server 2005 ile hayatimiza giren performans adina ciddi anlamda katkida bulunan bölümlenmis tablo yapisini inceleyecegiz.

Makale

Bu yazimda SQL Server 2005 ile hayatimiza giren performans adina ciddi anlamda katkida bulunan bölümlenmis tablo yapisini inceleyecegiz.Partitioned table yapisi SQL Server'in daha önce ki versiyonlarinda karsimiza çikan ve buyuk tablolari partitioned view kullanarak performansa bir nebze de olsun katki da bulunan yapinin SQL Server 2005 içerisinde direk yarattigimiz tablo yapisinda kullanarak nasil performans kazanimi elde edildigini inceleyecegiz.
Partitioned table yapmanin bize saglayacagi performans katkisi birincisi tablolari yatay bölümlendirerek ve bölümlendirmenin herbirini farkli fiziksel yollara atarak I/O cost'u düsürerek SQL Server'dan performans elde edecegiz.Ayni zamanda table yapisini birkaç parçaya bölecegimiz için tablonun bakimini yapmak bizim için ayni zamanda kolay olacaktir.
Bölümleme sayesinde çok sayida bulunan kayitin sorgulanmasi esnasinda ve where sartinda sorguladigimiz ifade neresi ise ilgili fiziksel file durumdan etkilenecektir. simdi geldi sira örnek uygulamamizi yapmaya senaryomuz geregi YazilimUzmani isimli DB'mizde içerisinde Kisi isimli bir tablo olusturup Adi kolonuna göre bölümlendirme islemi yapacagiz.
Öncelikle bölümlendirme islemi gerçeklestirmemiz için bir partitioned function yazacagiz.Adi kolonuna girilen kayitlari sayi dogrusu seklinde range degeriyle verdigimiz degeri dahil ya da degil seklinde ayiriyoruz.Örnegimizde saga dogru eklenecek sekilde fonksiyonumuzu yaziyoruz.

create partition function pf_Ad(nvarchar(50))
as range right for values('F','M')
go

Yazmis oldugumuz bu fonksiyon kavramini partitioned scheme kavramiyla ilgili filegroup'lara dagitma islemini uyguluyoruz.

create partition scheme ps_Ad
as partition pf_Ad to (f1,f2,f3)
go

Daha önceden yani uygulamaya hazirlik olarak Database'imin Properties kismina girerek FileGroup tarafinda f1,f2 ve f3 adinda filegrouplarimizi olusturduk.Daha sonra Files tarafinda ise ilgili file'larini olusturarak filegrouplarini yarattigimiz kisimlari isaret ettik.
simdi sira geldi bu islemleri tamamladiktan hemen sonra ilgili tablomuzu olusturmaya

create table Kisi
(
KisiID int ,
Adi nvarchar(50),
Soyadi nvarchar(50),
Yas int
) on ps_Ad(Adi)

Gerçeklestirdigimiz bu islemde sonra sunu gözlemleyecegiz.Öncelikle tablomuza eklenen kayitlarda Adi kolonuna göre girilen degerlerde 'F' ve 'M' degerlerine göre tablomuzu F'den önceki 'F-M' arasi ve M'den sonra ki seklinde 3 adet partitiona bölecektir.
Tablomuzu yarattiktan hemen sonra tablomuzun içerisine kayitlari eklemeye geldi sira

insert into Kisi values(1,'Enes','Tekir',15)
insert into Kisi values(2,'Murat','Sari',35)
insert into Kisi values(3,'Alican','Zorlu',25)
insert into Kisi values(4,'Oguz','Kilicoglu',45)
insert into Kisi values(5,'Yagmur','Zöngür',65)
insert into Kisi values(6,'Suleyman','Muglaoglu',95)
insert into Kisi values(7,'Emre','SoyadiniHatirlamadim',5)
insert into Kisi values(8,'Kemal','Kemal',105)



Ardindan ekledigimiz kayitlarin hangi bölüme ait olduguna dair sorgumuzu yaziyoruz burada özel bir fonksiyon olan $Partition.pf_Ad(Adi) seklinde yazarak Adi kolonuna eklemis oldugumuz kayitlari listeleyecegiz.

Select Adi,Soyadi,Yas,$partition.pf_Ad(Adi) as Bolumu from Kisi