Sliding Window-Switch Partition-Split Range-Merge Range

12 May by NURULLAH ÇAKIR

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.

Loading

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir