PostgreSQL BRIN indeksleri güncelleme aldıkça performans kaybediyor
Öne çıkanlar
- BRIN indeksi sıralı veride B-tree yapısından 4 bin 570 kat daha küçük boyuta ulaştı.
- Satırların yalnızca yüzde 5'i güncellendiğinde disk I/O işlemi 28 katına çıktı.
- pg_stats korelasyonu 0,921 seviyesindeyken dahi sorgu süreleri 23 kat uzadı.
DeepSQL bünyesinde çalışan eski Oracle sorgu motoru mühendisi Venkat Sakamuri, PostgreSQL'deki BRIN indekslerinin satır güncellemeleri karşısındaki performansını inceleyen bir analiz yayımladı. 10 milyon satırlık veri tabanı üzerinde yapılan testler, tablodaki satırların yalnızca yüzde 5'i güncellendiğinde indeksin blok budama veriminin 28 kat düştüğünü ve sorgu sürelerinin 23 kat uzadığını ortaya koydu.
Fiziksel olarak sıralı tablolarda BRIN indeksleri, standart B-tree yapısına kıyasla 4 bin 570 kat daha az yer kaplayarak 48 kilobayt seviyesinde kalıyor. Ancak PostgreSQL'in çok sürümlü eşzamanlılık denetimi mekanizması nedeniyle güncellenen satırlar boş alanlara taşındığında, ilgili sayfa aralıklarının minimum ve maksimum değer sınırları genişliyor. Bu durum, aralık dışındaki sorguların bile tüm veri bloklarını taramasına yol açıyor.
Sakamuri, pg_stats görünümündeki korelasyon metriğinin bu bozulmayı tespit etmede yetersiz kaldığını belirtti. Korelasyon değeri 0,921 gibi yüksek bir seviyede görünürken dahi indeks performansının çöktüğü görüldü. Sorunun çözümü için CLUSTER veya pg_repack araçlarıyla fiziksel sıralamanın yenilenmesi gerekiyor ancak bu işlem ek kilit ve kaynak maliyeti yaratıyor.
Bu özet yapay zekâ ile hazırlanmıştır; ayrıntılar ve doğrulama için orijinal kaynağa başvurun.