pillinetwork hesabınızla giriş yapın.

SQL Server Table Partitioning

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;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
USE TablePartitionTest
ALTER DATABASE TablePartitionTest
ADD FILEGROUP FileGroup1
ALTER DATABASE TablePartitionTest
ADD FILEGROUP FileGroup2
ALTER DATABASE TablePartitionTest
ADD FILE ( NAME = DataFile1,
FILENAME = 'D:\MSSQLData\TablePartitionTestDataFile1.ndf')
TO FILEGROUP FileGroup1
ALTER DATABASE TablePartitionTest
ADD FILE ( NAME = DataFile2,
FILENAME = 'C:\MSSQLData\TablePartitionTestDataFile2.ndf')
TO FILEGROUP FileGroup2

Şimdi kriterimizi tanımlıyoruz.

1
2
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ı belirtiyoruz

1
2
CREATE PARTITION SCHEME RecordDateScheme
AS PARTITION RecordDatePartition TO (FileGroup1, FileGroup2)

Tablomuzu oluşturuyoruz

1
2
3
4
5
CREATE 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ım

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
INSERT 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şlemi
SELECT ID, RECORD_DATE, INFORMATION
FROM dbo.TestTable
ORDER BY RECORD_DATE
-- Saklanan verilerin hangi partition'da olduğunu görme
SELECT ID, RECORD_DATE, INFORMATION,
$PARTITION.RecordDatePartition(RECORD_DATE) PARTITION
FROM dbo.TestTable
ORDER BY RECORD_DATE

Olşturduğumuz bu tanımlamaları silmek istersek

1
2
3
4
5
6
7
DROP TABLE dbo.TestTable
DROP PARTITION SCHEME RecordDateScheme
DROP PARTITION FUNCTION RecordDatePartition
ALTER DATABASE TablePartitionTest REMOVE FILE DataFile1
ALTER DATABASE TablePartitionTest REMOVE FILE DataFile2
ALTER DATABASE TablePartitionTest REMOVE FILEGROUP FileGroup1
ALTER DATABASE TablePartitionTest REMOVE FILEGROUP FileGroup2

İşinize yaraması dileğiyle.

/* Etiketler: , , , */
/* absconder yazdı. 23 Kasım 2009 12:38. 2 yorum var */

Yorumlar

Merhabalar, yazi gerçekten başarili,
Bununla alakali birde benim eklemek istedigim önemli bir nokta var arkadaşımız gözden kaçirmis, veya söylemeyi unutmus,

Sql Serverde tutulan verileri koca bir ambarda tutulan verilere benzetebilriiz,
Bu ambara bir sorgu geldiginde Sql Server tek bir kanal acarak ilgili sorgu sonucunu getirmeye calisir tabiki buda ambar büyüklügüne göre, sorgu süresini uzatir veya kısaltir,

Partition Tabledeki en önemli avantaj, yazimin basinda söylemiş oldugum büyük ambar'i kücük kücük ambarlar haline bölmektir, Böylece Sql Sunucu almis oldugu Select sorgusunu kücük parcalara bölünmüş ambarlara ayri ayri kanallar açarak aramasıdır,

Güncel hayat örneginden yola çıkarsak daha net olacaktir,

Ornegin 10 000 metreKare bir depomuz war ve bu depodan sorumlu 1 adet güvenlik görevlimiz war,

Bu güvenlik görevlisinin bu kadar büyüklükte olan bir depoyu aramasi ile,

1000 er metrekarelik 10 adet ambari 10 güvenlik görevlisinin araması arasinda oldukca büyük farklar olacaktir,

Teşekkürler
Netron Teknoloji
Emrah ELiş

üye olunpillinetwork sitelerine yorum ekleyebilmek ve daha fazlası için, üye olun ya da giriş yapın.

Bu yazıyı rapor et. Kural dışı içeriğe rastladığınızda editörlerimize rapor ederek müdahale edilmesini sağlayabilirsiniz. (Hangi durumlarda rapor edebilirim?)

Bu site

Nokta ve pilli ortak yapımı olan kodaman.org hep birlikte içerik üretip gelirini yazarları ile paylaştığımız kolektif bir kod yazarları blogudur. Siz de katılabilirsiniz.

pilliilan

son yorumlar

arama

pillinetwork