SQL Server Partition Table ile Milyarlık Tablolarda Performans
Merhaba,
SQL Server'da büyük tablolar kaçınılmazdır. Yıllar geçtikçe tablolar onlarca, yüzlerce milyar satıra ulaşabiliyor. Partition Table (tablo bölümleme) bu devasa tabloları yönetilebilir parçalara bölerek hem sorgular hem de bakım operasyonları için ciddi performans kazanımı sağlıyor. Gelin inceleyelim arkadaşlar.
Partition Table Nedir?
Partition Table, fiziksel olarak birden fazla filegroup'a bölünmüş ama mantıksal olarak tek tablo gibi görünen bir SQL Server nesnesidir. Bölümleme genellikle tarih sütununa göre yapılır: her ay veya her yıl ayrı bir partition.
Ne Zaman Kullanmalı?
Her büyük tablo için partition gerekmez. Şu kriterlere bakın:
- Tablo 10 milyon satırın üzerinde ve büyümeye devam ediyor
- Sorguların büyük çoğunluğu belirli bir zaman aralığını hedefliyor
- Eski veri arşivlenmesi veya silinmesi operasyonel zorluk yaratıyor
- Bakım penceresi (index rebuild) tüm tablo için yetersiz kalıyor
Partition Elimination: Temel Performans Kazanımı
Partition'ın en büyük faydası elimination. WHERE tarih BETWEEN '2024-01-01' AND '2024-03-31' sorgusu tüm tabloyu değil sadece ilgili partitionları tarıyor. 10 yıllık data varsa sorgu 1/40 oranında daha az veri işliyor. Plan'da "Seek Predicate" içinde partition ID görünüyorsa elimination çalışıyor demektir.
Partition Function ve Scheme
Partition Table oluşturmak için iki nesne gerekiyor: Partition Function (hangi değer hangi partition'a gider) ve Partition Scheme (hangi partition hangi filegroup'ta). Tarih bazlı aylık bölümleme en yaygın kurumsal senaryo.
Sliding Window: Eski Veriyi Arşivleme
Partition Table'ın en güçlü kullanımı Sliding Window pattern. Eski partition'ı arşiv tablosuna SWITCH komutuyla saniyeler içinde taşımak mümkün. SWITCH metadata işlemi olduğu için lock almaz, downtime gerektirmez. Milyarlarca satırı silmek yerine bir partition'ı switch etmek hem çok hızlı hem de log space açısından çok daha verimli.
Partitioned Index'ler
Aligned index (partition sütununu içeren) ve non-aligned index (farklı yapıda) seçimi önemli. Aligned index partition elimination'dan yararlanır. Non-aligned index bakım operasyonlarını karmaşıklaştırır ama bazı query pattern'leri için gerekli olabilir.
Dikkat Edilmesi Gerekenler
- Partition key sütunu değiştirilemez (UPDATE ile taşıma ciddi I/O yükü yaratır)
- Foreign key constraint partition'lı tablolarda desteklenmiyor
- En fazla 15.000 partition (SQL Server 2012+)
- Statisticler partition bazında da tutulabiliyor daha doğru query plan
Sonuç
Partition Table doğru uygulandığında büyük tablo yönetimini kökten değiştiriyor. Sliding Window ile arşivleme ve partition elimination ile sorgu performansı iki güçlü kazanım bir arada :)
İyi Günler Dilerim,
Bu yazıyı paylaş: