Bu hangi koşullarda karşımıza çıkar derseniz örneğin milyonlarca kayıt olan bir tabloyu arşivlemem gerekiyor, ve belirli tarihten öncesini silmek zorundayım. Bu oldukça sıkıntılı bir iştir.Tablo'da lock olma ihtimalinden, çok fazla io yapmaya kadar uzanan bir çile..
Eğer benim partition bir tablom olsaydı silinmek istenen tarih aralığını arşivdeki tablo'ya switch edip bu dertden kurtulabilirdim.
Kısa bir örnek ile neler yapabildiğimize bakalım. Öncelikle yeni bir tablo yaratıyorum.
Create Table members 
( id int,
  name char(20),
  surname char(20),
  startDate smalldatetime
)
Boş olan tabloya biraz data girelim.
Declare @x int
  
Declare @id int
  set @x=0
  set @id=1
 while @x < 100
 begin
  insert into members values (@id,'ilker','usta','20110101')
  set @x=@x+1
  set @id=@id+1
 end
Bakalım ne kadar yerimiz oldu
sp_spaceused 'members'
Şimdi tablomuzun özelliğine bakalım
   Gördüğümüz gibi tablo PRIMARY yani default file gurup üzerinde yaratıldı. Şimdi gelelim asıl sorunumuza. Tablomuzda herhangi bir index yok. (olsada birşey değişmez) tabloya partition scheme üzerinde yeni bir index yaratırsak tablo primary den çıkıp partition yapıya geçmiş olur.
   Not : Kullanılan Partition scheme ve function daha önce yaratılmış type olarak smalldatetime dır. (startDate columundan partitions yapıyoruz.)
CREATE CLUSTERED INDEX [CIX] ON [dbo].[Members] 
  
(
      [id] ASC
)WITH (SORT_IN_TEMPDB = ON, ONLINE = ON) 
ON [PS_MONTHLY_RANGE]([startDate])
GO
Şimdi tablomuzun özelliğine yeniden göz atalım
   Gördük ki tablomuz PS_MONTHLY_RANGE üzerine geçti. Artık tablomuza gelecek yeni kayıtlar startDate üzerinden aylık olarak faklı partitionlar da olucaktır......     Kolay gelsin :) 



 
 
Hiç yorum yok:
Yorum Gönder