اليوم في ٠٥:٣٦
صاحب الموضوع
PostgreSQL’de yüksek trafikli uygulamalarda, özellikle zamanlanmış veya tekrarlayan işleri yönetirken, aynı işi birden fazla örneğin aynı anda çalışmasını engellemek önemli hale gelir. Bu noktada Advisory Lock (İkaz Kilidi) mekanizması, veritabanı seviyesinde esnek ve performanslı bir çözüm sunar.
Advisory Lock’lar, özellikle uygulama mantığıyla doğrudan ilişkili kilitlerdir ve “lock” tablosu veya objeleri yerine, uygulama kodu içinde belirli anahtarlar kullanılarak kontrol sağlar. Bu sayede, örneğin belirli bir job’un sadece bir örneğinin çalışmasını garanti altına almak istediğinizde, kilitler kullanışlı olur.
Kullanım örneği olarak, belirli bir job’un çalışmasını başlatmadan önce,
pg_advisory_lock() fonksiyonunu çağırırsınız. Bu fonksiyon, kilit alınmışsa bloklar ve kilidi alır, alınamazsa ya da timeout ayarlanmışsa uygun hatayı döner. İş tamamlandığında ise
pg_advisory_unlock() ile kilidi serbest bırakırsınız.
İşte temel bir örnek:
1234567-- Kilidi al
SELECT pg_advisory_lock(12345);
-- İşlem kodları burada
-- Kilidi serbest bırak
SELECT pg_advisory_unlock(12345);
Burada
12345 sabit bir anahtar veya işinizle bağlantılı anlamlı bir sayı olmalı. Daha gelişmiş kullanımlarda, iki veya daha fazla parametre kullanarak daha karmaşık anahtarlar da oluşturabilirsiniz.
Avantajları arasında şunlar sayılabilir:
- İşlemleri veritabanı seviyesinde güvenli biçimde kontrol eder.
- Çoklu uygulama veya sunucu ortamında bile tutarlı bir şekilde job kilitleme sağlar.
- Ölçeklenebilirlik ve performans açısından yükü minimal tutar.
Ancak dikkat edilmesi gereken noktalar da var:
- Kilitlerin zaman aşımı veya hata durumlarında düzgün serbest bırakılması gerekir, aksi takdirde kilitler sürekli kalabilir.
- Uygulama seviyesinde iyi planlanmalı; yanlış anahtar kullanımı veya çakışma sorunlara yol açabilir.
- Kilitlerin tutarlılığı, uygulama mantığınızla ve transaction yönetimi ile uyumlu olmalı.
PostgreSQL Advisory Lock’lar, job yönetiminde doğru kullanıldığında, yüksek güvenilirlik ve esneklik sağlar. Siz, bu kilitleri nasıl kullanıyorsunuz veya karşılaştığınız sorunlar nelerdir? Düşüncelerinizi ve deneyimlerinizi paylaşır mısınız?