SQL SERVER PARTITION SPLIT-MERGE

Partitioning Nedir? SQL Server’da partitioning (bölümleme), büyük veritabanlarını yönetilebilir parçalara ayırmak amacıyla kullanılan bir tekniktir. Bu sayede büyük veri setlerinin yönetimi daha verimli hale gelir. Tabloyu veya indeksleri birden fazla bölüme ayırarak, her bölümün ayrı bir veri dosyasında saklanmasını sağlarsınız. Bu, sorgu performansını artırabilir ve bakım işlemlerini kolaylaştırabilir. Partition Range Split ve Merge: Range Split: Partitioning aralığını (range) bölme işlemi, mevcut bir partition’un iki ayrı bölüme ayrılması anlamına gelir. Bu, veri büyüdükçe daha ince kontrol sağlamak için yapılabilir. Merge: Partition’ları birleştirme işlemi, veritabanı yapısını sadeleştirmek veya daha büyük veri kümelerini tek bir partition içinde toplamak için kullanılır. Partition split ve merge işlemleri yaparken kullanılan partition tipi çok önemlidir. Range RIGHT ve Range LEFT arasında bazı önemli temel farklar bulunmaktadır. Bu farklar var olan partition yapınızı güncellemek,yeni bir bölümlemeye sahip olmak istediğinizde hali hazırda kullanımda olan partition bölümlemenizin bozulmasına sebebiyet verebilir. Peki nedir bu Farklar; Tablonuzda Range LEFT olan bir partition […]

SQL SERVER PARTITION SPLIT-MERGE
  • Partitioning Nedir?
    • SQL Server’da partitioning (bölümleme), büyük veritabanlarını yönetilebilir parçalara ayırmak amacıyla kullanılan bir tekniktir. Bu sayede büyük veri setlerinin yönetimi daha verimli hale gelir.
    • Tabloyu veya indeksleri birden fazla bölüme ayırarak, her bölümün ayrı bir veri dosyasında saklanmasını sağlarsınız. Bu, sorgu performansını artırabilir ve bakım işlemlerini kolaylaştırabilir.
  • Partition Range Split ve Merge:
    • Range Split: Partitioning aralığını (range) bölme işlemi, mevcut bir partition’un iki ayrı bölüme ayrılması anlamına gelir. Bu, veri büyüdükçe daha ince kontrol sağlamak için yapılabilir.
    • Merge: Partition’ları birleştirme işlemi, veritabanı yapısını sadeleştirmek veya daha büyük veri kümelerini tek bir partition içinde toplamak için kullanılır.

Partition split ve merge işlemleri yaparken kullanılan partition tipi çok önemlidir. Range RIGHT ve Range LEFT arasında bazı önemli temel farklar bulunmaktadır. Bu farklar var olan partition yapınızı güncellemek,yeni bir bölümlemeye sahip olmak istediğinizde hali hazırda kullanımda olan partition bölümlemenizin bozulmasına sebebiyet verebilir.

Peki nedir bu Farklar;

  • Tablonuzda Range LEFT olan bir partition function bulunuyorsa yeni bir function ve scheme eklemek istediğinizde var olan son filegrouptan bir öncesine eklemektedir.

Örnek vermek gerekirse yıllara ait bir partition yapımız olduğunu düşünelim(2022-2023-2024). Bu scheme içerisine 2025’i dahil etmek istediğinizde LEFT partitionda sıralama şu şekilde olur (2022-2023-2025-2024)

  • Tablonuzda Range RIGHT olan bir partition function bulunuyorsa yeni bir function ve scheme eklemek istediğinizde var olan son filegrouptan sonrası için ekleme yapar

Örnek vermek gerekirse yıllara ait bir partition yapımız olduğunu düşünelim(2022-2023-2024). Bu scheme içerisine 2025’i dahil etmek istediğimizde RIGHT partitionda sıralama şu şekilde olur (2022-2023-2024-2025)

NOT: Eğer partition bölümlemenizde son partition içerisinde veri bulunuyorsa birazdan anlatacağım işlemlerde son partitionda bulunan verilerin yeni eklemiş olduğumuz file ve filegroup içerlerine taşınması anlamına gelmektedir. Eğer aktif transaction içeren bir yapı içerisinde bu işlemleri yapacaksanız son partitiondaki kayıt sayısını ve sistemde oluşabilecek anlık kesintileri göz önünde bulundurmanız gerekmektedir.

Veri tabanımızda halihazırda  bulunan filegroup’lar ve file’lar aşağıdaki gibidir.

Şimdi ben bu veri tabanımı 2025 ve 2026 yılına kadar uzatmak istiyorum. Öncelikle veri tabanıma FG2025 ve FG2026 adında iki tane filegroup ve file ekliyorum.

USE [master]
GO
ALTER DATABASE PartitionTest ADD FILEGROUP [FG2025]
GO
ALTER DATABASE PartitionTest ADD FILE ( NAME = N'PartitionTest6',
FILENAME = N'D:\Data4\Data\PartitionTest6.ndf',
SIZE = 51200KB , FILEGROWTH = 65536KB ) 
TO FILEGROUP [FG2025]
GO

USE [master]
GO
ALTER DATABASE PartitionTest ADD FILEGROUP [FG2026]
GO
ALTER DATABASE PartitionTest ADD FILE( NAME = N'PartitionTest7',
FILENAME = N'D:\Data4\Data\PartitionTest7.ndf',
SIZE = 51200KB , FILEGROWTH = 65536KB ) 
TO FILEGROUP [FG2026]
GO

Öncelikle RANGE LEFT olarak partition yapılmış tablomuzdan başlıyorum.

Eklemek istediğim filegroup ve bu filegroup içerisine hangi aralıkta verilerin yazılacağını tanımlıyorum

ALTER PARTITION SCHEME [PS_SatisTarihi_Left] NEXT USED FG2025
ALTER PARTITION FUNCTION [PF_SatisTarihi_Left]()
SPLIT RANGE ('2025-12-31T23:59:59.997')

var olan partition yapımızı kontrol ettiğimizde RANGE LEFT olduğu için son partition scheme’dan öncesine eklediğini ve 100 adet verimi taşıdığını görebiliriz.

USE [PartitionTest]
GO
CREATE PARTITION SCHEME [PS_SatisTarihi_Left] AS PARTITION [PF_SatisTarihi_Left] 
TO ([FGOncesi], [FG2020], [FG2021], [FG2022], [FG2023], [FG2024], [FG2025], [FGSonrasi])
GO


USE [PartitionTest]
GO
CREATE PARTITION FUNCTION [PF_SatisTarihi_Left](datetime) AS RANGE LEFT FOR VALUES 
(N'2019-12-31T23:59:59.997', N'2020-12-31T23:59:59.997', 
 N'2021-12-31T23:59:59.997', N'2022-12-31T23:59:59.997', 
 N'2023-12-31T23:59:59.997', N'2024-12-31T23:59:59.997',
 N'2025-12-31T23:59:59.997')
GO

Şimdi aynı örneğimizi RANGE RIGHT olan tablomuzda test edelim. Var olan tablomuzda 2025 yılı ve sonrası veriler FGSonrasi filegroup içerisinde tutulmakta eğer biz buraya yeni bir tane 2025 partition’ı eklersek yukarıda anlatmış olduğum senaryodaki gibi son partition scheme’dan sonra FG2025’i ekleyecek bu sebepten dolayı partition yapımız bozulacak bunun önüne geçebilmek adına ilk önce Partition MERGE yapmamız gerekmekte.

  • Tam olarak burada Partition MERGE işleminde RANGE LEFT ve RANGE RIGHT arasındaki dikkat edilmesi gereken farkı sizlere anlatacağım…

RANGE RIGHT ve RANGE LEFT olan iki farklı partitionda MERGE işlemi yapmak istediğimizde temel fark şudur;

  • RANGE RIGHT olan bir bölümlendirmede merge işlemi yaparsanız belirlemiş olduğunuz değer aralığını kendinden bir önceki scheme ile birleştirir ve belirlemiş olduğunuz scheme kaldırılır
  • RANGE LEFT olan bir bölümlendirmede merge işlemi yaparsanız belirlemiş olduğunuz değer aralığından önceki scheme’ yı belirlediğiniz şemaya birleştirip belirlemiş olduğunuz schemedan bir öncekini kaldırır.

O zaman biz kendi tablomuzda yeni scheme eklemeden önce FGSonrasi Scheme’mızı kaldırmalıyız çünkü biliyoruz ki yenisini eklediğimizde sağına ekleyecek ama biz soluna eklemesini istiyoruz.

ALTER PARTITION FUNCTION [PF_SatisTarihi_Rights]() MERGE RANGE ('2025-01-01T00:00:00.000')

Merge işlemi sonrası kontrol ettiğimizde gördüğünüz gibi FGSonrasi Filegroup’um kaldırıldı ve içerisindeki veriler FG2024 filegroup içerisine taşındı.

Şimdi 2025 ve 2026 yılını ekleyebiliriz.

ALTER PARTITION SCHEME [PS_SatisTarihi_Rights] NEXT USED FG2025
ALTER PARTITION FUNCTION [PF_SatisTarihi_Rights]() 
SPLIT RANGE ('2025-01-01 00:00:00.000')


ALTER PARTITION SCHEME [PS_SatisTarihi_Rights] NEXT USED FG2026
ALTER PARTITION FUNCTION [PF_SatisTarihi_Rights]() 
SPLIT RANGE ('2026-01-01 00:00:00.000')

Var olan partition yapımızı kontrol ettiğimizde RANGE RIGHT olduğu için son partition scheme’dan sonrasına eklediğini görebiliriz.

USE [PartitionTest]
GO
CREATE PARTITION SCHEME [PS_SatisTarihi_Left] AS PARTITION [PF_SatisTarihi_Left] TO ([FG2020Oncesi], [FG2020], [FG2021], [FG2022], [FG2023], [FG2024], [FG2025], [FG2026])
GO

Kısaca Özet geçmek gerekirse Partition RANGE RIGHT ve RANGE LEFT arasında temel farklılıklar şunlardır.

  1. Oluşturmuş olduğunuz partition function’da örnek olarak “2024-01-01” tarihi var ise tam olarak bu tarihte gelen bir veriyi RANGE RIGHT yaparsanız sağdaki scheme içerisine yaz RANGE LEFT yaparsanız soldaki scheme içerisine yaz demektir.
  2. Partition MERGE işlemi sırasında oluşturmuş olduğunuz partition function RANGE LEFT ise birleştirmek istediğiniz scheme ile kendinden bir önceki scheme’yı birleştirip belirlediğiniz scheme’yı tutar kendinden bir önceki scheme kaldırılır. RANGE RIGHT ise birleştirmek istediğiniz scheme ile kendinden bir önceki scheme’yı birleştirip belirlediğiniz scheme’yı kaldırır.
  3. Partition SPLIT işlemi sırasında Function LEFT olarak oluşturulmuşsa en son ekleme schemedan öncesine yeni scheme ekler. Function RIGHT olarak oluşturulmuşsa var olan son schemedan sonrasına yeni scheme ekler.

Umarım faydalı bilgiler verebilmişimdir. Herkese iyi çalışmalar dilerim… 

 

 

 

Benzer Yazılar

SQL Server DMV ve DMF – 6

SQL Server 3 hafta önce

Bu yazımızda DMV ve DMF Serimizin 6.sına devam edeceğiz. Bir önceki seride Memory’ye ilişkin DMV ve DMF’leri ele almıştık. Bu yazıda Memory konusunda devam edeceğiz. SQL server’da Memory kavramı en önemli kavramlardan biridir. Özellikle tüm transaction işlemlerinin önce Buffer sonra disk üzerinden devam ettiğini düşünürsek buffer’ın oynadığı kritik rolü daha iyi anlayabiliriz. Bu yazıda Memory’nin durumunu ve monitör edilmesine bakacağız. Özellikle Performans sorunlarında memory konusunda sorun yaşandığı durumda nasıl okumak gerektiği önemli rol oynamaktadır. Hangi database’de, hangi tablo’da sorun yaşandığına ilişkin bilgilere bu paylaşım sonrasında görebileceğiz. SQL Server’ın Memory kullanım durumunu incelediğimde; select physical_memory_in_use_kb/1048576.0 AS ‘physical_memory_in_use (GB)’, locked_page_allocations_kb/1048576.0 AS ‘locked_page_allocations (GB)’, virtual_address_space_committed_kb/1048576.0 AS ‘virtual_address_space_committed (GB)’, available_commit_limit_kb/1048576.0 AS ‘available_commit_limit (GB)’, page_fault_count as ‘page_fault_count’ from  sys.dm_os_process_memory; Görsel – 1   Physical_memory_in_use: Kullanımda olan Fiziksel Memory miktarını gösterir. locked_page_allocations: Memory’de lock’lanmış olan Page’lerin miktarını belirtir. virtual_address_space_contained: SQL Server VAS(Virtual Adress Space) için ayrılan miktarı belirtir. available_commit_limit: SQL Server tarafından kullanılabilecek Memory Miktarını gösterir. […]

SQL SERVER’DA LINKED SERVER KULLANIMI – 2

SQL Server 2 ay önce

SQL Server’da Linked Server Kullanımı makalemizin ikinci bölümünde uygulamamıza göre ayarlamaları yapabilmeyi ve sorgu çalıştırma yöntemlerini anlatmaya çalışacağız. Birinci bölüme ulaşmak için SQL SERVER’DE LINKED SERVER KULLANIMI – 1 linkine tıklayabilirsiniz.İçindekilerSERVER OPTIONS1. OPENQUERY2. Köşeli Parantez SERVER OPTIONS Collation Compatible: Linked server’da “collation compatible” seçeneği, iki veritabanı arasındaki metin karşılaştırmalarında ve sıralamalarında uyumluluğu belirler. Bu seçenek, bir linked server’a bağlanırken, yerel veritabanının ve linked server’daki veritabanının collation ayarlarının uyumlu olup olmadığını kontrol eder. True: Karşılaştırma ve sıralama işlemlerinin sorunsuz bir şekilde yapılacağı anlamına gelir. Örneğin, karakter setleri ve sıralama kuralları arasında tutarsızlık olmadığında, bu ayar kullanışlıdır. False: Metin karşılaştırmalarında ve sıralamalarında sorunlar çıkabilir. Örneğin, veritabanları farklı diller için ayarlanmışsa, bir sorgu doğru sonuçlar vermeyebilir. Data Access: Linked server’da “data access” seçeneği, linked server üzerinden veritabanına veri erişiminin etkin olup olmadığını belirler. Bu seçenek, linked server ile iletişim kurarken veri okuma, yazma ve güncelleme işlemlerinin yapılabilip yapılmayacağını kontrol eder. True: Sorguların, veri […]

SQL SERVER’DA LINKED SERVER KULLANIMI – 1

SQL Server 2 ay önce

İçindekilerSQL Server’da Linked Server KullanımıLinked Server Nedir?GENERALSECURITYA. Not be made:B. Be made without using a security context:C. Be made using the login’s current security contextD. Be Made Using This Security ContextSQL Server’da Linked Server Kullanımı SQL Server, farklı veri kaynakları arasında veri entegrasyonunu kolaylaştıran bir dizi özellik sunar. Bunlardan biri de “Linked Server” (bağlantılı sunucu) özelliğidir. Linked Server, SQL Server’ın birden fazla veritabanı sunucusuyla iletişim kurmasına ve bu sunuculardaki verilere erişmesine olanak tanır. Bu makalede, SQL Server’da Linked Server özelliğinin nasıl yapılandırılacağı, kullanımı ve yönetimi hakkında bilgi aktarmaya çalışacağım. Makalenin içeriği detaylı ve uzun olacağı için sizleri de okurken sıkmaması adına iki parçaya bölerek anlatmaya çalışacağım. İlk bölümde Linked Server’in ne işe yaradığını ve kurulumunda kullanılan 4 farklı seçeneği inceleyeceğiz Linked Server Nedir? Linked server, SQL Server’a başka bir SQL Server instance’ı ya da başka bir veri kaynağı (örneğin, Oracle, Excel, Access gibi) ile bağlantı kurma yeteneği kazandıran bir yapıdır. […]

1 Yorum

Yorum Yaz

Rastgele