PostgreSQL 18 indeks kilit sınırını genişleterek işlemci darboğazını hafifletiyor
Öne çıkanlar
- PostgreSQL 17'ye kadar hızlı yol kilit tablosu 16 yuva ile sınırlı kalıyor ve taşan kilitler paylaşılan bellekte çakışma yaratıyor.
- Hazırlanmış ifadeler sorgu planını önbelleğe alarak ilişki kilit sayısını düşürüyor ancak bağlantı havuzlarında kısıtlamalara yol açıyor.
- PostgreSQL 18 sürümü, varsayılan 64 kilit desteğiyle hızlı yol yuva sayısını dinamik hale getirerek darboğazı azaltıyor.
PostgreSQL sorgu planlayıcısı, bir tablodaki sorgulanan alanlarla doğrudan ilgili olmasa bile o tabloya bağlı tüm indeksleri incelemek için her birine AccessShareLock kilidi uyguluyor. İndeks sayısı 15'i aşan tablolarda bu durum, PostgreSQL 17 sürümüne kadar sabit olan 16 yuvalı hızlı yol (fast-path) kilit sınırının taşmasına yol açıyor. Sınır aşıldığında sistem paylaşılan bellek tablosundaki LWLock mekanizmasını kullanmaya başlıyor. Yüksek sorgu hacmine sahip ortamlarda yüzlerce işlem biriminin bu kilit tablosunda çakışması, doğrudan işlemci darboğazına ve pg_stat_activity izlemelerinde yüksek bekleme sürelerine neden oluyor.
Yapılan teknik analizler, hazırlanmış ifadelerin (prepared statements) genel sorgu planını önbelleğe alarak bu sorunu geçici olarak çözebildiğini gösteriyor. Altıncı çalıştırmadan sonra planlama aşaması atlandığı için yalnızca sorgunun fiilen kullandığı bağıntılar kilitleniyor ve toplam kilit sayısı ikiye kadar düşüyor. Ancak bu yöntem connection pooler mekanizmalarıyla her zaman tam uyumlu çalışmıyor. Örneğin PgBouncer eski sürümlerde protokol düzeyinde destek sunmazken AWS RDS Proxy tarafında oturum sabitleme (pinning) sorunu ortaya çıkarak bağlantı havuzunun ana işlevini etkisiz kılıyor.
PostgreSQL 18 sürümü, Tomas Vondra tarafından geliştirilen optimizasyonla bu 16 yuvalık sabit sınırı tamamen kaldırıyor. Yeni mimaride hızlı yol kilit yuvası sayısı sunucu açılışında max_locks_per_transaction ayarına bağlanıyor ve varsayılan 64 değeriyle her arka uç işlemine 64 hızlı yol yuvası sunuluyor. Böylece 20'den fazla indekse sahip tablolar bile paylaşılan bellek tablosuna taşmadan çalışabiliyor. Mühendisler yine de temel sorunun aşırı indeksleme olduğuna işaret ederek gereksiz indekslerin silinmesini tavsiye ediyor.
Bu özet yapay zekâ ile hazırlanmıştır; ayrıntılar ve doğrulama için orijinal kaynağa başvurun.