Table Partitioning’in ana amacı görece büyük bir tablo içerisinde yer alan verilerin belirli bir kritere göre ayrı ayrı fiziksel alanlarda saklanarak verilere erişim hızını ve disk kapasitesini optimum kullanmak, ölçeklenebilir ve daha kolay bakımı sağlanabilir kılmaktır.Böyle bir yapıda kurmak isediğimiz bir tablodaki verilerin belli bir tarihten eski olanlarını bir partitionda, bu tarihten yeni kayıtları da farklı bir partitionda tutmak isteyebiliriz. Sık kullandığımız veriler elbetteki daha yakın tarihteki veriler olacaktır.Buradaki avantajımız şudur; tarihe dayalı bir sorgu yaptığımızda zaten tarihe göre veriler bir arada olduğundan her iki partitionda değil de uygun olan partition üzerinde verilere erişim söz konusu olacaktır. Buradaki hız index tanımlamalarından bağımsız olarak doğrudan disk IO’su ile alakalıdır. Erişim hızının farklılığı bölünmüş dosyaların bulunduğu fiziksel disklerin farklı olması ile birebir alakalıdır. Böyle bir durumdaki partition yapısını aşağıdaki şekilde oluşturabiliriz;Önce FILEGROUP’ları oluşturalım;USE TablePartitionTestALTER DATABASE TablePartitionTestADD FILEGROUP FileGroup1ALTER DATABASE TablePartitionTestADD FILEGROUP FileGroup2ALTER DATABASE TablePartitionTestADD FILE ( NAME = DataFile1,FILENAME = ‘D:MSSQLDataTablePartitionTestDataFile1.ndf’)TO FILEGROUP FileGroup1ALTER DATABASE TablePartitionTestADD FILE ( NAME = DataFile2,FILENAME = ‘C:MSSQLDataTablePartitionTestDataFile2.ndf’)TO FILEGROUP FileGroup2
Şimdi kriterimizi tanımlıyoruz.CREATE PARTITION FUNCTION RecordDatePartition (DATETIME)AS RANGE RIGHT FOR VALUES (‘20080101’)
01.01.2008 tarihine göre bir kriter oluşturduk. Bu tarihten büyük tarihli veriler bir partitionda küçük tarihliler başka partitionda saklanacaktır. (‘20080101’, ‘20090101’) şeklinde tanımlanarak ikiden fazla partitionda saklanabilirdi. bu durumda FILEGROUP’ları da uygun şekilde tanımlamamız gereklidir.Bu partition kriterinin hangi scheme’de ve hangi FILEGROUP’larda saklanacağını belirtiyoruzCREATE PARTITION SCHEME RecordDateSchemeAS PARTITION RecordDatePartition TO (FileGroup1, FileGroup2)
Tablomuzu oluşturuyoruzCREATE TABLE dbo.TestTable(ID int,RECORD_DATE datetime NULL,INFORMATION varchar(255) NULL) ON RecordDateScheme (RECORD_DATE)
Test için veri girelim ve sonuçlara bakalımINSERT INTO dbo.TestTable(ID, RECORD_DATE, INFORMATION)VALUES (1, ‘20080201’, ‘Test Data 1’)INSERT INTO dbo.TestTable(ID, RECORD_DATE, INFORMATION)VALUES (1, ‘20070101’, ‘Test Data 2’)INSERT INTO dbo.TestTable(ID, RECORD_DATE, INFORMATION)VALUES (1, ‘20090101’, ‘Test Data 3’)INSERT INTO dbo.TestTable(ID, RECORD_DATE, INFORMATION)VALUES (1, ‘20040401’, ‘Test Data 4’)INSERT INTO dbo.TestTable(ID, RECORD_DATE, INFORMATION)VALUES (1, ‘20050801’, ‘Test Data 5’)– Doğrudan SELECT işlemiSELECT ID, RECORD_DATE, INFORMATIONFROM dbo.TestTableORDER BY RECORD_DATE– Saklanan verilerin hangi partition’da olduğunu görmeSELECT ID, RECORD_DATE, INFORMATION,$PARTITION.RecordDatePartition(RECORD_DATE) PARTITIONFROM dbo.TestTableORDER BY RECORD_DATE
Olşturduğumuz bu tanımlamaları silmek istersekDROP TABLE dbo.TestTableDROP PARTITION SCHEME RecordDateSchemeDROP PARTITION FUNCTION RecordDatePartitionALTER DATABASE TablePartitionTest REMOVE FILE DataFile1ALTER DATABASE TablePartitionTest REMOVE FILE DataFile2ALTER DATABASE TablePartitionTest REMOVE FILEGROUP FileGroup1ALTER DATABASE TablePartitionTest REMOVE FILEGROUP FileGroup2
İşinize yaraması dileğiyle.