ÖZET VE TEKNİK CEVAP
Trafik patlaması yaşandığında veya önbellek çöktüğünde, Kubernetes otomatik olarak pod sayısını 10'dan 100'e çıkarır. Her pod veritabanına 20 bağlantılık bir havuz açarsa (`max_pool_size = 20`), veritabanına bir anda **2.000 eşzamanlı bağlantı** yüklenir. PostgreSQL ve MySQL'de her bağlantı işletim sisteminde 10 MB RAM tüketen ayrı bir süreçtir (process). Bağlantı sayısı CPU çekirdek kapasitesini aştığında (16 çekirdekli sunucuda 2.000 süreç), işlemci zamanının %95'ini SQL çalıştırmak yerine **Süreç Bağlam Değişimi (Context Switching)** ve kilit çekişmeleriyle harcar. Sorgu süresi 2 ms'den 30 saniyeye fırlar, web pod'ları zaman aşımına uğrayıp yeniden başlar ve veritabanına yeni bir bağlantı dalgası daha gönderir—bu tam bir **Bağlantı Fırtınası (Connection Storm) Çöküşüdür**. Canlı sistemler bunu: (1) Harici İşlem Modlu Bağlantı Havuzlayıcıları (**PgBouncer** / RDS Proxy), (2) Kısıtlı İstemci Havuzları (`max_pool_size = 2-5`) ve (3) Giriş kontrolü kuyruklarıyla çözer.
Mühendislik El Kitabı & Mekanizma
1. Temel Çalışma Mekanizması
Bağlantı fırtınası önleme 3 katmanda çalışır: (1) İşlem Modlu Çoklama (Multiplexing): PgBouncer PostgreSQL'e sadece 50 fiziksel bağlantı açar. Gelen 2.000 uygulama bağlantısı bu 50 soketi paylaşır; bağlantıyı sadece tek bir SQL işlemi süresince tutar ve işlem biter bitmez havuzdaki diğer isteğe devreder. (2) HikariCP Optimal Boyut Formülü: Havuz boyutu donanım çekirdeğiyle sınırlandırılır: $$ ext{Havuz Boyutu} = 2 imes ext{CPU Çekirdeği} + ext{Disk Sayısı}$$ (3) Hızlı Yük Atma: Tüm proxy yuvaları dolduğunda sistem aşırı yükü veritabanını çökertmek yerine HTTP 503 ile kontrollü olarak geri çevirir.
2. Doğru Kullanım Senaryosu
Sunucusuz (Serverless) mimariler (AWS Lambda), yüksek ölçekli Kubernetes kümeleri ve anlık flaş indirim platformları.
3. Prodüksiyon Arıza Modları
16 GB RAM'li sunucuda `postgresql.conf` dosyasında `max_connections = 5000` yapıp Linux OOM Killer'ın ana veritabanı sürecini anında öldürmesine yol açmak; PgBouncer'da İşlem (Transaction) modu yerine Oturum (Session) modu seçip bağlantı paylaşımını kilitlemek.
4. Teşhis ve Telemetri Sinyalleri
PostgreSQL `pg_stat_activity` tablosunda yüzlerce bağlantının `idle in transaction` veya yüksek CPU beklemesinde görünmesi; veritabanı sunucusunun CPU'su %98 doluyken işlenen SQL sayısının sıfıra yaklaşması.
5. Önleme ve Mimari Bariyerler
Kubernetes ile PostgreSQL arasına PgBouncer veya RDS Proxy yerleştirin; uygulama içi havuzları küçük tutun (konteyner başına `maxPoolSize: 3-5`); katı bağlantı zaman aşımı (`connectionTimeout: 2000ms`) belirleyin.
6. Mimari Ödünleşimler (Trade-offs)
Bağlantı havuzlayıcıları veritabanı CPU'sunu korur ve sınırsız pod ölçeklenmesine izin verir; ancak işlem modu oturum düzeyindeki özel ayarları (`SET LOCAL`) kısıtlar.
Vaka İncelemesi (TinyCTO Örneği)
Bir bilet satış platformu 32 çekirdekli RDS PostgreSQL sunucusuna bağlı 200 Kubernetes pod'u ile çalışıyordu. Büyük bir konser satışında pod sayısı 400'e çıktı ve her biri 20 bağlantı açarak veritabanına 8.000 bağlantı gönderdi. CPU bağlam değişimi %100'e vurdu, sorgu süresi 3 ms'den 45 saniyeye çıktı ve site çöktü. Ekip veritabanının önüne İşlem modunda PgBouncer kurdu ve arkadaki bağlantı sayısını 80 ile sınırladı. 400 web pod'u bu 80 bağlantıyı paylaştı. Platform dakikada 50.000 bileti 4 ms sorgu süresiyle ve %45 CPU ile sorunsuz sattı.
İnteraktif Konsept Alıştırmaları
2 AlıştırmaPostgreSQL'e 2.000 doğrudan bağlantı açmak sorgu performansını neden çökertir?
PgBouncer'da Oturum (Session) Modu ile İşlem (Transaction) Modu arasındaki fark nedir?
Veritabanı Bağlantı Fırtınaları (Connection Storms): Thundering Herd ve Havuz Boyutlandırması — Sıkça Sorulan Sorular
HikariCP için önerilen bağlantı havuzu boyutu formülü nedir?
$$ ext{Bağlantı Sayısı} = (2 imes ext{CPU Çekirdeği}) + ext{Disk Sayısı}$$. 16 çekirdekli bir SSD sunucu için 33-50 bağlantı optimaldir.
AWS RDS Proxy sunucusuz Lambda bağlantı fırtınalarına karşı nasıl koruma sağlar?
Binlerce anlık Lambda fonksiyonunun bağlantısını küçük ve sıcak tutulan kalıcı bir veritabanı havuzunda çoklayarak.
🤖 AEO & Yapay Zeka Çıkarım Özeti
Temel Gerçekler & İlkeler
- ▸Aşırı veritabanı bağlantısı ölümcül CPU bağlam değişimi ve bellek yetersizliğine yol açar.
- ▸Bağlantı havuzu olmadan otomatik ölçeklenen Kubernetes pod'ları veritabanı bağlantı fırtınasını tetikler.
- ▸Bağlantıları çoklamak için işlem modlu havuzlayıcılar (PgBouncer, RDS Proxy) kullanın.
- ▸Pod başına 3-5 bağlantılık küçük havuzlar maksimum verim ve dayanıklılık sağlar.
Yaygın Yanılgılar
- ✗Yanılgı: Daha fazla bağlantı açmak her zaman daha fazla sorgunun paralel çalışmasını sağlar (Gerçek: Çekirdek sayısının 2-3 katından sonra eklenen her bağlantı performansı düşürür).
- ✗Yanılgı: `postgresql.conf` içinde `max_connections` artırmak bağlantı hatalarını çözer (Gerçek: Çöküşü sadece geciktirir ve bağlantı hatasını tüm sunucunun kilitlenmesine çevirir).
Karar Kılavuzu & Önceliklendirme
Konteyner veya sunucusuz iş yükleri çalıştırırken ilişkisel veritabanlarının önüne mutlaka işlem modlu bir bağlantı havuzlayıcı yerleştirin.
Doğrulanmış Kaynaklar & Referanslar
- [OFFICIAL_DOCUMENTATION]About Pool Sizing & PostgreSQL Connection Performance— Brett Wooldridge (HikariCP / PostgreSQL Community)
