Karar: Hangi partition stratejisi?
Partition (bölümleme), büyük bir tabloyu tek bir mantıksal isim altında birden çok fiziksel parçaya bölerek eski veriyi kolayca atmayı ve sorgunun yalnızca ilgili parçalara bakmasını (partition pruning) sağlar. Ama küçük tablolarda sadece karmaşıklık ekler. Bu ağaç önce partition'a gerçekten ihtiyaç olup olmadığını sorgular, sonra erişim ve dağıtım biçimine göre Range, List, Hash ve Composite arasında yönlendirir.
Tablo gerçekten partition gerektirecek kadar büyük mü?
Partition bir performans sihiri değil, ölçek ve bakım (yaşam döngüsü) aracıdır. Tablo yeterince büyük değilse veya sorgular index ile zaten iyi çalışıyorsa, partition sadece plan karmaşıklığı ve yönetim yükü getirir. Tablon on milyonlarca+ satıra/yüzlerce GB'a mı ulaşıyor, yoksa hala küçük/orta mı?
- Evet, çok büyük ve/veya eski veriyi toplu silmek/arşivlemek gerekiyor
- Hayır, küçük/orta tablo veya emin değilim
Veriye nasıl erişiyorsun ve nasıl bölünmeli?
Partition anahtarı, sorguların çoğunun filtrelediği kolon olmalı; ancak böyle pruning devreye girer. Erişimin ağırlıklı biçimi ne? Tarih/sıralı aralıklarla mı (son 30 gün), belirli kategori/bölge değerleriyle mi, yoksa belirgin bir filtre yok ama yükü eşit dağıtmak mı istiyorsun?
- Tarih/sıra numarası gibi sıralı aralıklar (son X gün, ay bazında)
- Ayrık kategori/bölge/kiracı gibi belirli değer kümeleri
- Belirgin aralık/kategori yok; amaç yükü eşit dağıtmak
- Hem tarih hem yüksek hacim; iki boyutta bölmek gerekiyor
Öneri: Partition kullanma (henüz)
Küçük/orta tablolarda partition fayda getirmez; iyi seçilmiş index'ler ve normal bakım yeterlidir. Erken bölümleme, sorgu planlarını karmaşıklaştırır, yanlış anahtarla pruning'i kaçırır ve operasyon yükü ekler.
Öneri: Range (aralık) partition
Range partition, satırları bir kolonun sıralı aralıklarına göre böler (ör. tarih aralıkları: her ay/çeyrek bir partition). Zaman serisi ve sürekli büyüyen tablolarda en yaygın ve en güçlü stratejidir.
Öneri: List (liste) partition
List partition, satırları bir kolonun ayrık ve bilinen değerlerine göre gruplar (ör. bölge = 'TR','EU','US' veya kiracı kimliği). Doğal, sonlu kategoriler varken erişim ve yönetimi netleştirir.
Öneri: Hash partition (eşit dağıtım)
Hash partition, anahtar kolonun hash'ine göre satırları önceden belirlenmiş sayıda partition'a görece eşit dağıtır. Doğal bir aralık/kategori yokken hotspot'u önlemek ve yükü dengelemek için kullanılır.
Öneri: Composite (çok seviyeli) partition
Composite partition, iki stratejiyi birleştirir: önce üst seviyede böler, sonra her partition'ı alt-partition'lara ayırır (ör. Range-by-Hash veya Range-by-List). Hem zaman bazlı yaşam döngüsü hem de eşit dağıtım/kategori ayrımı aynı anda gerektiğinde kullanılır.