Connection pooling nedir? Pool boyutunu nasıl belirlersiniz?

Cevap

Connection pooling, veritabanı bağlantılarını her istekte açıp kapatmak yerine önceden açılmış bağlantılardan oluşan bir havuzda tutup yeniden kullanmaktır. Yeni bir bağlantı açmak TCP + TLS el sıkışması, kimlik doğrulama ve PostgreSQL'de yeni bir backend process demektir; bu milisaniyeler sürer ve DB kaynaklarını tüketir.

Nasıl çalışır?

  1. Uygulama havuzdan bağlantı ister (borrow).
  2. Sorguyu çalıştırır.
  3. Bağlantıyı kapatmaz, havuza geri verir.
  4. Boş bağlantı yoksa istek connectionTimeout süresince bekler, sonra hata alır.

Örnekler: Java'da HikariCP (Spring Boot varsayılanı), .NET'te ADO.NET'in yerleşik pool'u, Node.js'te pg.Pool, Python'da SQLAlchemy QueuePool. Veritabanı tarafında PgBouncer gibi harici pooler'lar da kullanılır.

spring:
  datasource:
    hikari:
      maximum-pool-size: 10
      minimum-idle: 10
      connection-timeout: 3000   # ms
      max-lifetime: 1800000      # DB/proxy timeout'undan kısa olmalı

Pool boyutu

"Daha büyük pool daha hızlıdır" yanlıştır. DB'nin aynı anda verimli işleyebileceği sorgu sayısı CPU ve disk ile sınırlıdır; fazlası context switch ve kilit çekişmesi yaratır. HikariCP'nin başlangıç formülü:

pool_size = (cpu_core_sayisi * 2) + efektif_disk_sayisi

Toplam bağlantı hesabı

Asıl sınır toplamdır: pod sayısı x pod başına pool DB'nin max_connections değerini aşmamalı. 20 pod x 20 bağlantı = 400 bağlantı, çoğu PostgreSQL kurulumu için fazladır. Bu durumda pod başına pool küçültülür veya PgBouncer (transaction mode) eklenir.

Sık sorunlar

  • Bağlantıyı geri vermemek (connection leak): try-with-resources / using kullanın; HikariCP leakDetectionThreshold ile tespit eder.
  • Transaction içinde uzun süren dış HTTP çağrıları bağlantıyı gereksiz tutar.
  1. INNER JOIN ile LEFT JOIN arasındaki fark nedir?KolayVeritabanı & SQLBackend
  2. Bir tablodaki ikinci en yüksek maaşı bulun.OrtaVeritabanı & SQLBackend
  3. Index nedir? Dezavantajları nelerdir?OrtaVeritabanı & SQLBackend
  4. ACID nedir?OrtaVeritabanı & SQLBackend
  5. Normalizasyon nedir? Ne zaman denormalizasyon yaparsınız?ZorVeritabanı & SQLBackend
  6. N+1 sorgu problemi nedir ve nasıl çözülür?OrtaVeritabanı & SQLBackend

Bu konuda başka bir soru biliyor musun?

Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.

Soru ekle