Sliding Window-Switch Partition-Split Range-Merge Range
Bu makaleyi okumadan önce partition kavramının ne olduğunu ve nasıl partition oluşturulduğunu bilmeniz gerekir. Bu konularda detaylı bilgi almak için “Partition Oluşturmak” isimli makalemi okumak isteyebilirsiniz.
Sliding Windows senaryosu partition olan tabloda sürekli aynı sayıda partition’ın bulunmasını sağlamaktır. Örneğin sadece son 2 yılın verisini her yıl bir partition olacak şekilde tutmak istiyorsunuz. Ve her yılın sonunda ya da başında(sizin tercihinize göre) yeni bir partition oluşturup en eski partition’ı switch yaparak başka bir tabloya aktarıyorsunuz. Bu şekilde partition yapılmış tablonuzun boyutunun artmasını önleyebilirsiniz. Örneğimizi yapabilmek için “Partition Oluşturmak” isimli makalemdeki örneği gerçekleştirmeniz gerekmektedir.
Örneğimizde 2007’den önceki veriler bir partition’da, 2007 ve 2008 arasındaki veriler başka bir partition’da, 2008 ve sonrasındaki veriler ise başka bir partition’da tutuluyor. Biz sadece son 3 partition’ın olmasını istiyoruz. Yani partition function’a 2009’un eklendiği anda 2007 öncesine ait partition’ın arşivlenmesi gerekiyor. Arşivlenmesi gereken partition’ı böyle bir durumda başka bir tabloya switch edeceğiz. Bu switch işlemi çok kısa süren bir işlem. Çünkü switch yapacağımız tablo, switch yapacağımız partition ile aynı file group’ta olmak zorunda. Switch yapacağımız geçici tabloya aşağıdaki script yardımıyla oluşturalım. Tabi partition yaptığımız tablo ile aynı yapıda olmalı.(identity eklemiyoruz çünkü bu değerler partition yapılmış tablodan gelecek)
CREATE TABLE [dbo].[PartitionArsivOrnek]( [ID] [int] NOT NULL, [AdSoyad] [varchar](250) NULL, [KayitZamani] [datetime] NULL ) ON FileGroup1
Partition yapılmış tablodaki son partition’ı switch yapacağımız tabloyu FileGroup1 üzerinde oluşturduk. Çünkü switch yapacağımız partition Filegroup1 üzerinde.
Aşağıdaki script yardımıyla yeni bir filegroup oluşturup bu filegroup üzerinde bir tane file oluşturuyoruz.
ALTER DATABASE Test ADD FILEGROUP FileGroup4 ALTER DATABASE Test ADD FILE ( NAME = DataFile4, FILENAME = 'C:\MSSQL\TestDataFile4.ndf')
2009 ve sonrası için verilerin bu yeni oluşturduğumuz filegroup’ta olması için aşağıdaki gibi partition schema ve partition function’ı güncelliyoruz.
ALTER TABLE dbo.PartitionOrnek SWITCH PARTITION 1 TO dbo.PartitionArsivOrnek ALTER PARTITION FUNCTION [KayitZamaniPartition]() MERGE RANGE ('2007-01-01') ALTER PARTITION SCHEME [KayitZamaniScheme ] NEXT USED [FileGroup4] GO ALTER PARTITION FUNCTION [KayitZamaniPartition]() SPLIT RANGE ('2009-01-01')
Yukarıdaki script ile;
- 2007 öncesindeki verilerin bulunduğu en son partition’ı PartitionArsivOrnek tablosuna switch ediyoruz.
- Partition function’ı 2007 öncesini içermeyecek şekilde güncelliyoruz.
- Partition function için sonraki kullanılacak filegroup’u belirtiyoruz.
- Partition function’ı 2009 sonrasını bir önceki adımda belirlediğimiz filegroup’u kullanacak şekilde güncelliyoruz.
Veritabanının çok büyümemesi için archieve tablosunuda bu işlemlerden sonra aşağıdaki script ile başka bir veritabanına taşımanızı tavsiye ederim.
BEGIN TRANSACTION INSERT INTO TestArsivDB.dbo.PartitionArsivOrnek SELECT * FROM Test.dbo.PartitionArsivOrnek TRUNCATE TABLE Test.dbo.PartitionArsivOrnek COMMIT TRANSACTION
Yukarda yaptığımız işlemleri bir stored procedure hazırlayıp parametreleri dışardan girecek şekilde ayarlayarak otomatik hale de getirebilirsiniz.