Bağlantı havuzu: veritabanı bağlantılarını yeniden kullanmak
Sözlük

Bağlantı havuzu: veritabanı bağlantılarını yeniden kullanmak

Hazırlayan: Mindset Institute EditörlüğüGüncellendi: 3 dk okuma

Bağlantı havuzu, veritabanı bağlantılarını her istekte yeniden açmak yerine hazır tutup tekrar kullanma yöntemidir. Nasıl çalışır, örnek ve yaygın hatalar.

Bağlantı havuzu nedir?

Bağlantı havuzu (connection pool), uygulamanın veritabanıyla kurduğu bağlantıların önceden açılıp hazır tutulduğu ve ihtiyaç duyulduğunda ödünç alınıp iş bitince geri bırakıldığı bir yapıdır. Her istekte yeni bir bağlantı açıp kapatmak yerine mevcut bağlantılar tekrar tekrar kullanılır.

Bu yaklaşımın nedeni maliyettir. Veritabanına yeni bağlantı kurmak ağ el sıkışması, kimlik doğrulama ve sunucu tarafında kaynak ayırma gibi adımlar içerir; yoğun bir uygulamada bu iş her istekte tekrarlanırsa hem uygulama yavaşlar hem de veritabanı sunucusu gereksiz yüklenir.

Nasıl çalışır?

Havuz, uygulama başlarken ya da ilk ihtiyaçta bir miktar bağlantı açar ve bunları boşta bekletir. Akış şöyle işler:

  • Uygulama bir sorgu çalıştıracağında havuzdan boşta bir bağlantı ister.
  • Boşta bağlantı varsa hemen verilir; yoksa ve izin verilen üst sınıra ulaşılmamışsa yeni bağlantı açılır.
  • Üst sınıra ulaşılmışsa istek, bir bağlantı boşalana kadar sırada bekler ya da zaman aşımına uğrar.
  • Sorgu bitince bağlantı kapatılmaz, havuza geri bırakılır.
  • Uzun süre kullanılmayan ya da bozulan bağlantılar havuz tarafından temizlenir ve gerekirse yenilenir.

Bu mantık sayesinde bağlantı sayısı kontrol altında kalır ve bağlantı açma gecikmesi büyük ölçüde ortadan kalkar.

Küçük bir örnek

Örneğin bir e-ticaret sitesinde kampanya başladığında çok sayıda kullanıcı aynı anda ürün listesini açıyor. Havuz olmasaydı her sayfa isteği veritabanında yeni bir oturum başlatırdı; sunucu aynı anda izin verilenden fazla bağlantı kabul etmek zorunda kalır ve bir noktada yeni isteklere hata döndürmeye başlardı.

Havuz varsa uygulama belirli sayıda bağlantıyı paylaşır. Sorguları kısa süren istekler bağlantıyı hemen geri bıraktığı için sınırlı bağlantı çok sayıda kullanıcıya yeter. Yoğunluk havuzun kapasitesini aşarsa bazı istekler kısa süre bekler; ama veritabanı çökmez.

Uygulama içi havuz ve harici havuz

Bağlantı havuzu farklı katmanlarda kurulabilir. Çoğu programlama dili ve çerçevesi uygulamanın içinde çalışan bir havuz kitaplığı sunar; her uygulama örneği kendi havuzunu yönetir. Uygulama örnekleri çoğaldığında toplam bağlantı sayısı da çoğalır ve veritabanı sınırlarını zorlayabilir.

Bu durumda uygulama ile veritabanı arasına ayrı bir havuz katmanı yerleştirilir. PostgreSQL dünyasında PgBouncer gibi araçlar bu işi görür: Birçok uygulama bağlantısını az sayıda gerçek veritabanı bağlantısına indirger. Harici havuzlarda bağlantının ne zaman paylaşıldığını belirleyen modlar (oturum, işlem bazlı gibi) vardır ve bazı oturum özellikleri bu modlarda kısıtlanabilir; bu yüzden seçim, uygulamanın veritabanı kullanımına göre yapılmalıdır.

Sık yapılan hatalar ve ayar ipuçları

En yaygın hata bağlantıyı havuza geri vermeyi unutmaktır. Hata durumunda bile bağlantının serbest bırakıldığından emin olunmazsa havuz zamanla tükenir ve uygulama beklemeye başlar. Diğer bir hata havuz boyutunu gereksiz büyük tutmaktır; çok bağlantı, veritabanını daha hızlı yapmaz, aksine bellek ve işlemci rekabeti yaratır. Uzun işlemleri havuz bağlantısı üzerinde bekletmek de kapasiteyi eritir.

İyi uygulama; havuz boyutunu veritabanı kapasitesine ve beklenen eşzamanlı işe göre belirlemek, bekleme süresine sınır koymak ve havuz doluluğunu izlemektir.

Bu konuda gelişmek isteyen veritabanı yöneticileri ve arka uç geliştiricileri için Mindset'te 'PostgreSQL İleri Seviye: Performans ve Yönetim' programında yapılandırma ve kaynak ayarı ile performans izleme modülleri, 'PostgreSQL ile Veritabanı Yönetimi' ve 'Veritabanı Yönetim Sistemleri ve Uygulamaları' programlarında ise yönetim ve optimizasyon başlıkları yer alır.

İlgili Mindset programı

PostgreSQL İleri Seviye: Performans ve Yönetim

Sık sorulanlar

Sık sorulan sorular

Bağlantı havuzu boyutu nasıl belirlenir?

Tek bir doğru sayı yoktur; veritabanı sunucusunun kapasitesine, sorguların süresine ve uygulama örneklerinin sayısına bağlıdır. Küçük başlayıp havuz doluluğu ve bekleme sürelerini izleyerek ayarlamak, baştan büyük bir değer seçmekten daha güvenlidir.

Bağlantı havuzu her uygulamada gerekli midir?

Çok az sorgu yapan betikler ve araçlarda gerekmeyebilir. Eşzamanlı kullanıcısı olan web ve servis uygulamalarında ise neredeyse her zaman faydalıdır. Çoğu çerçeve zaten varsayılan bir havuzla gelir; asıl iş, onu doğru yapılandırmaktır.

Havuz dolduğunda ne olur?

Yeni istek, bağlantı boşalana kadar sırada bekler ve bekleme süresi dolarsa zaman aşımı hatası alır. Kullanıcı açısından bu, sayfanın yavaşlaması ya da hata vermesi demektir. Bu durum genellikle bağlantıların geri bırakılmadığını, sorguların çok uzun sürdüğünü ya da havuzun trafik için küçük kaldığını gösterir.

Bağlantı havuzu performansı her zaman artırır mı?

Bağlantı açma maliyetini azalttığı için genellikle artırır; ancak yavaş sorguları hızlandırmaz. Asıl darboğaz sorguların kendisiyse havuz tek başına çözüm olmaz, çünkü yavaş sorgu bağlantıyı daha uzun süre meşgul eder. Bu durumda indeksleme ve sorgu optimizasyonu gibi yöntemler gerekir.

Bağlantı Havuzu (Connection Pool) Nedir?