PostgreSQL Bağlantı Havuzu: PgBouncer'ın Üç Modu, Hazırlıklı Deyim Tuzağı ve Çok Kiracılı Boyutlandırma
Oturum, işlem ve deyim modları arasında nasıl seçim yapılır, işlem modunda hangi özellikler bozulur, hazırlıklı deyim hatası neden yalnız yük altında çıkar ve kiracı başına veritabanı kullanan yapıda havuz nasıl sınırlanır.
PostgreSQL'de her istemci bağlantısı sunucu tarafında ayrı bir işletim sistemi sürecidir. Bağlantı açmak kimlik doğrulama, süreç çatallama ve önbellek ısıtma demektir; açık tutmak ise bağlantı başına birkaç megabayt bellek ve planlayıcı üzerinde yük demektir. Uygulama sunucusu sayısı arttıkça, her biri kendi havuzunda 20 bağlantı tutan 30 kopya veritabanına 600 bağlantı olarak yansır. Bunların büyük kısmı boşta bekler ama veritabanı yine de her birini taşır. Bağlantı havuzu bu farkı kapatır: istemciye bol bağlantı verir, veritabanına az bağlantı açar ve ikisini gerektiği anda eşler. Bu yazı PgBouncer'ın üç havuz modunu, hangisinin hangi iş yükünde çalıştığını, çok kiracılı yapıda boyutlandırmayı ve en çok can yakan tuzağı, hazırlıklı deyimleri ele alıyor.
Üç mod, tek karar
PgBouncer bir istemciye sunucu bağlantısını ne kadar süreyle tahsis edeceğine göre üç modda çalışır.
Oturum modu istemci bağlanınca bir sunucu bağlantısı verir ve istemci kopana kadar geri almaz. Sunucu tarafındaki her şey, oturum değişkenleri, hazırlıklı deyimler, geçici tablolar, kilitler, olduğu gibi çalışır. Kazanç yalnızca bağlantı açma maliyetinin önbelleklenmesidir; eşzamanlı istemci sayısı düşmez.
İşlem modu sunucu bağlantısını işlem başında verir, COMMIT ya da ROLLBACK ile geri alır. Ardışık iki işlem farklı sunucu bağlantılarında koşabilir. Bin istemcinin gerçekte aynı anda işlem yürüten 40 tanesi 40 sunucu bağlantısı ile idare eder. Havuzun asıl kazancı burada çıkar ve üretimde neredeyse her zaman istenen mod budur.
Deyim modu her deyimden sonra bağlantıyı geri alır; çok deyimli işlem yasaktır. Yalnızca otomatik commit ile çalışan, salt okuma trafiği gibi dar bir alanı vardır.
Karar şudur: işlem modunu hedefleyin, oturum durumuna dayanan her şeyi uygulamadan ayıklayın. Oturum modu geçiş dönemi için geçici bir çözümdür, kalıcı bir tercih değil.
İşlem modunda bozulan şeyler
İşlem modunda istemci, iki işlem arasında aynı sunucu bağlantısını göreceğini varsayamaz. Bu varsayıma dayanan her özellik ya hata verir ya da daha kötüsü sessizce yanlış çalışır:
SET ile yapılan oturum ayarları (SET search_path, SET timezone) bir sonraki işlemde kaybolur. Daha tehlikelisi, o ayar sunucu bağlantısında kalır ve o bağlantıyı alan başka bir istemciye sızar. İşlem içinde SET LOCAL kullanın; ayar commit ile birlikte söner.
LISTEN ve NOTIFY çalışmaz; bildirim, istemcinin artık elinde olmayan bir bağlantıya gelir.
Oturum seviyesi danışmanlık kilitleri (pg_advisory_lock) yanlış bağlantıda kalır. İşlem seviyesi olanları (pg_advisory_xact_lock) tercih edin.
Geçici tablolar ve WITH HOLD imleçler işlem bitince erişilmez olur.
Adlandırılmış hazırlıklı deyimler: aşağıda ayrı başlık.
Bu listeyi kod tabanında aramak, işlem moduna geçişin gerçek işidir. PgBouncer yapılandırması beş satırdır; kodun temizlenmesi haftalar sürebilir.
Hazırlıklı deyim tuzağı
Sürücülerin çoğu performans için sunucu tarafı hazırlıklı deyim kullanır: sorgu planı bir kez hazırlanır, bir adla saklanır, sonraki çağrılar yalnızca adı ve parametreleri gönderir. Bu ad sunucu bağlantısına aittir. İşlem modunda istemci bir sonraki işlemde başka bir sunucu bağlantısına düşer ve "prepared statement does not exist" hatası alır. Sinsi tarafı, hatanın yük altında ve rastgele çıkmasıdır; tek istemciyle yapılan testte havuz hep aynı bağlantıyı verdiği için görünmez.
İki çözüm yolu vardır. Birincisi sürücü tarafında sunucu hazırlıklı deyimlerini kapatmaktır:
Go pgx: bağlantı dizesine default_query_exec_mode=simple_protocol
Python psycopg 3: prepare_threshold=None
JDBC: prepareThreshold=0
Rails: prepared_statements: false
İkincisi PgBouncer'ın protokol seviyesi hazırlıklı deyimleri kendisinin izlemesidir. 1.21 sürümünden itibaren max_prepared_statements sıfırdan büyük bir değere ayarlanınca PgBouncer istemcinin hazırladığı deyimi hangi sunucu bağlantısına düşerse orada yeniden hazırlar. Bu yalnızca protokol seviyesi (sürücünün gönderdiği Parse mesajı) için geçerlidir; SQL ile yazılan PREPARE deyimini kapsamaz. Yeni kurulumda ikinci yolu seçin, sürücü tarafındaki optimizasyonu kaybetmezsiniz. Eski PgBouncer'a mahkûmsanız birinci yol tek seçenektir.
Temel yapılandırma
Aşağıdaki dosya işlem modunda çalışan, hazırlıklı deyimleri izleyen bir başlangıç noktasıdır:
Değerlerin anlamı: max_client_conn istemci tarafında kabul edilecek toplam bağlantı, default_pool_size her veritabanı ve kullanıcı çifti için açılacak sunucu bağlantısı sayısı. reserve_pool_size bir istemci reserve_pool_timeout saniyeden uzun beklerse devreye giren ek bağlantılar. query_wait_timeout havuzda bekleyen istemcinin ne kadar sonra hata alacağı; bunu sonsuz bırakırsanız veritabanı tıkandığında uygulama katmanı da sessizce yığılır ve zaman aşımı yerine kilitlenme görürsünüz.
ignore_startup_parameters satırı JDBC gibi bazı sürücülerin bağlantı açılışında gönderdiği ve PgBouncer'ın tanımadığı parametreleri yutmak içindir; bunu eklemeden JDBC istemcileri bağlanamaz.
Boyutlandırma
Sunucu bağlantı sayısını istemci sayısından türetmeyin; veritabanının kaç eşzamanlı sorguyu verimli yürütebildiğinden türetin. Yaygın başlangıç kuralı çekirdek sayısının iki katı artı disk sayısıdır. 8 çekirdekli bir sunucuda 20 civarı aktif bağlantı, 200 aktif bağlantıdan daha yüksek iş hacmi verir çünkü bağlam değiştirme ve kilit çekişmesi azalır. Bunun üzerine SHOW POOLS çıktısındaki iki sütunla ayar yapın: cl_waiting sürekli sıfırın üstündeyse ve maxwait büyüyorsa havuz dar; sv_idle hep yüksekse havuz geniş.
PgBouncer'ın havuzu veritabanı ve kullanıcı çifti başınadır. Çok kiracılı yapıda kiracı başına ayrı veritabanı kullanıyorsanız bu çarpım hızla patlar: 200 kiracı ve 20'lik havuz, veritabanına 4000 bağlantı potansiyeli demektir. Bu durumda max_db_connections ve max_user_connections ile üst sınır koyun, min_pool_size değerini sıfırda bırakın ki boş kiracılar bağlantı tutmasın, ve [databases] bölümünde tek tek kiracı yazmak yerine joker girdi kullanın:
Toplam üst sınır her koşulda PostgreSQL'in max_connections değerinin altında ve superuser_reserved_connections payını dışarıda bırakacak şekilde kalmalıdır.
Nereye koymalı
Uygulamanın yanına yan konteyner olarak ya da merkezi bir servis olarak. Yan konteyner her uygulama kopyasına ayrı havuz demektir; kopya sayısıyla çarpılan bağlantılar sorununu çözmez, yalnızca öteler. Merkezi kurulum bağlantıları gerçekten birleştirir ve varsayılan tercih olmalıdır. Tek zaafı PgBouncer'ın tek iş parçacıklı olmasıdır; çok yüksek istek hacminde tek süreç doyar. Bunun için aynı portu paylaşan birden fazla PgBouncer süreci çalıştırılabilir ya da çok iş parçacıklı bir alternatif (PgCat gibi) değerlendirilebilir. PgCat ayrıca okuma ve yazma ayrımı yapabilir; bu ihtiyaç yoksa PgBouncer'ın olgunluğu ve sadeliği ağır basar.
Uygulama tarafındaki havuzu (HikariCP, pgx pool) kapatmayın ama küçültün. Uygulama havuzu bağlantı kurma maliyetini, PgBouncer ise veritabanı tarafındaki toplam sayıyı yönetir; ikisi farklı işleri yapar.
Ne zaman kullanmamalı
Tek bir uygulama kopyasıyla çalışıyorsanız ve toplam bağlantı sayısı veritabanının rahat taşıdığı sınırın altındaysa PgBouncer yalnızca bir arıza noktası ekler. LISTEN/NOTIFY üzerine kurulu bir mimariniz varsa işlem modu sizin için kapalıdır; oturum modu da havuzun asıl kazancını vermez, bu durumda uygulama havuzu yeterlidir. Son olarak PgBouncer'ın yeniden başlatılması tüm istemci bağlantılarını düşürür; yapılandırma değişikliği için RELOAD, bakım için PAUSE ve RESUME yönetim komutlarını öğrenmeden üretime almayın.
1-5 tab geçiş ·
tab sonraki ·
esc geri al ·
↓ kaydır
> ls -lah ~/services/ --sort=tier
[OK] 25 records · 8 featured · 1 retainer · 16 standard
/02 hizmetler
services.tree
> note
· Fiyatlar USD cinsindendir. 6-12 günlük projelerde %7, 13+ günlük projelerde %14 hacim indirimi uygulanmaktadır. 100 adam-gün ve üzeri kapsamlı programlarda proje bazlı özel fiyatlandırma yapılır. Fiyatlar kapsam, aciliyet ve uzun dönem iş birliğine göre müzakere edilebilir.
> ls ~/products/ --open-source
[OK] 2 entries · 1 live · 1 pre-release
/03 ürünler
products.list
liveaçık kaynak · mit/prod/01
filex
her yere gömülebilen self-hosted dosya yöneticisi
tek go binary · vue/react/web-component embed · 5 storage sürücüsü · realtime collab · rbac · native multi-tenancy · ai ajanları için mcp server
Altyapıyı kurar, otomasyonu sağlar, sistemi ayakta tutar.
BRF Teknoloji, Bursa merkezli bir DevSecOps ve yazılım danışmanlık firmasıdır. Kubernetes cluster yönetiminden serverless platform kurulumuna, CI/CD pipeline tasarımından AI agent geliştirmeye kadar 25 farklı hizmet alanında çalışıyoruz.
İşimizin özü basit: sisteminizi ayağa kaldırır, otomatize eder ve gece 3'te sizi uyandırmayacak hale getiririz. Terraform ile altyapınızı kodlar, ArgoCD ile deploy sürecinizi GitOps'a taşır, Prometheus ile her şeyi izleriz. Bir şey bozulursa — biz bozulmadan önce müdahale ederiz.
Vendor lock-in'e karşıyız. Açık kaynak araçlarla, self-hosted çözümlerle ve endüstri standardı teknolojilerle çalışırız. Knative üzerinde kendi serverless platformunuzu kurarız, Kata Containers ile izole ederiz, Vault ile secret'larınızı yönetiriz. Her projeyi net kapsam, net süre, net fiyatla teslim ederiz.
DevSecOps & CI/CD
Kubernetes & Serverless
Infrastructure as Code
AI & Agent (MCP/ACP)
Güvenlik & Sıfır Güven
Full-Stack Geliştirme
Self-Hosted Çözümler
> grep -i question ~/faq.md
[OK] 3 entries · click to expand
[?]BRF Teknoloji'nin DevOps çözümleri hangi hizmetleri içerir?▾
CI/CD pipeline kurulumu, Kubernetes cluster yönetimi, container migrasyonu, Terraform ile altyapı otomasyonu, monitoring & alerting, şirket içi teknoloji kurulumları ve DevOps danışmanlık hizmetleri sunuyoruz.
[?]Yazılım geliştirme hizmetleriniz nelerdir?▾
MVP geliştirme, mevcut yazılım performans optimizasyonu, backend API geliştirme (Node.js, Go, Python) ve tam stack uygulama geliştirme hizmetleri sunuyoruz. Her projede teknik borç minimumda tutularak teslim edilir.
[?]Hangi DevOps araçlarıyla çalışıyorsunuz?▾
Kubernetes ve Docker’dan Talos Linux’a, Terraform ve OpenTofu’dan Ansible’a, Jenkins, GitLab CI/CD, GitHub Actions, ArgoCD, Flux, Helm ve Rancher’a kadar endüstri standardı araçlarla çalışıyoruz. İzleme ve hata takibinde Prometheus, Grafana, Loki, Tempo, OpenTelemetry ve GlitchTip; ağ katmanında Cilium ve Envoy; test otomasyonunda Playwright, Cypress, k6, Locust, Testcontainers ve Trivy kullanıyoruz. Projenizin ihtiyacına göre en uygun araç setini birlikte belirliyoruz.
brf.sh / 2026
·bursa/tr·
timezone utc+3·
tüm sistemler nominal
> ./connect --target=brf.sh
/05 iletişim
contact.txt
> cat contact.txt
[email][email protected] [phone]+90 530 871 2248 [location] Üçevler Mah. İzmir Yolu Cad 241D 16120 Nilüfer/Bursa [hours] Hafta içi 09:00 — 18:00 UTC+3 [eta] <24s iş günü
[OK] handshake ready
· turnstile enabled
· yanıt süresi: <24s · saat dilimi UTC+3 / bursa
CI/CD Pipeline Kurulumu
GitHub Actions, GitLab CI/CD ile otomatik build, test ve deploy süreçleri.
Mevcut ya da sıfırdan bir repo için otomatik build, test ve deploy pipeline'ı kurulur. GitHub Actions, GitLab CI/CD veya tercih edilen araç kullanılır. Staging + production ortamları için ayrı akışlar tanımlanır.
Mevcut uygulamaların container mimarisine taşınması.
Mevcut uygulamaların container mimarisine taşınması. Docker image tasarımı, Compose yapılandırması ve Kubernetes manifest'lerine dönüştürme. İleri düzey izolasyon için Kata Containers / gVisor dahil edilebilir.
Prometheus, Grafana, Loki ile altyapı ve servis izleme.
Prometheus + Grafana stack kurulumu, servis ve altyapı metrikleri için dashboard'lar, kritik eşikler için alert tanımları. İsteğe bağlı: Zabbix, Loki log aggregation.
GitLab, Nextcloud, VPN, mail sunucusu gibi şirket içi araçlar.
GitLab, Mattermost, Nextcloud, mail sunucusu, VPN, iç monitoring gibi araçların şirket sunucularında kurulumu. Docker Compose veya Kubernetes üzerinde deploy edilir.
MCP/ACP agent'lar, RAG pipeline, multi-agent orchestration, model serving.
LLM entegrasyonu (OpenAI, Claude, Gemini, lokal modeller), MCP (Model Context Protocol) ve ACP (Agent Communication Protocol) ile tool-augmented AI agent'lar. RAG pipeline, multi-agent orchestration, model serving (vLLM/Ollama). Mevcut iş süreçlerine yapay zeka katmanı.
Apache Kafka, RabbitMQ, NATS ile event-driven data pipeline. Apache Airflow ile ETL/ELT orkestrasyon, real-time data akışı, CDC (Change Data Capture). Data lake/warehouse tasarımı, schema registry, dead letter queue yönetimi.
Paketler
Kafka/RabbitMQ kurulumu + temel producer/consumer
$3,500
5–7 adam/gün
ETL pipeline (Airflow + source → warehouse)
$5,200
8–12 adam/gün
Tam event-driven architecture (CDC + streaming + DLQ)
ELK Stack veya Loki + Grafana ile merkezi log yönetimi. OpenTelemetry ile distributed tracing, Jaeger/Tempo entegrasyonu. Log retention politikası, structured logging standartları, anomaly detection. Tüm servislerde uçtan uca observability.
Playwright, Cypress ile E2E test otomasyonu, k6/Gatling ile yük testi. CI/CD pipeline'a entegre pre-deploy quality gate, test coverage raporlama, visual regression testing. AI-assisted test generation ile test yazım süresini %60'a kadar düşürme.
Backstage veya Port ile internal developer portal kurulumu. Self-service ortam oluşturma, golden path template'leri, service catalog, TechDocs entegrasyonu. Developer experience (DX) metrikleri, DORA metrics takibi, cognitive load azaltma.
Paketler
Backstage/Port kurulumu + service catalog
$3,900
6–8 adam/gün
Golden path templates + self-service ortam
$6,500
10–14 adam/gün
Tam platform (portal + templates + DORA + DX metrikleri)
Toplanan Kişisel Verileriniz, Toplanma Yöntemi ve Hukuki Sebebi
Kimliğinizi belirli ya da belirlenebilir kılan her türlü bilgi "kişisel veri" olarak kabul edilmektedir. Web sitemizi ziyaret ettiğinizde veya hizmetlerimizi kullandığınızda; ad, soyad, e-posta adresi, telefon numarası gibi iletişim bilgileriniz, IP adresiniz ve tarayıcı çerez verileri otomatik ya da yarı-otomatik yollarla toplanabilir. Bu veriler, 6698 sayılı Kişisel Verilerin Korunması Kanunu'nun 5. maddesinde belirtilen "bir sözleşmenin kurulması veya ifasıyla doğrudan doğruya ilgili olması" ve "ilgili kişinin temel hak ve özgürlüklerine zarar vermemek kaydıyla, veri sorumlusunun meşru menfaatleri için veri işlenmesinin zorunlu olması" hukuki sebeplerine dayanılarak işlenmektedir.
Kişisel Verilerinizin İşlenme Amacı
Toplanan kişisel verileriniz; hizmetlerimizin sunulması ve iyileştirilmesi, müşteri taleplerinin karşılanması, yasal yükümlülüklerin yerine getirilmesi, bilgi güvenliği süreçlerinin yürütülmesi ve iletişim faaliyetlerinin yönetilmesi amaçlarıyla işlenmektedir. Verileriniz, belirtilen amaçlarla sınırlı ve ölçülü olarak işlenir; amacın ortadan kalkması halinde silinir, yok edilir veya anonim hale getirilir.
Toplanan Kişisel Verilerin Kimlere ve Hangi Amaçlarla Aktarılabileceği
Kişisel verileriniz; yasal düzenlemelerin gerektirdiği hallerde kamu kurum ve kuruluşlarına, hizmetlerin sunulması amacıyla iş ortaklarımıza ve teknik altyapı sağlayıcılarına, hukuki uyuşmazlıklarda avukatlar ve danışmanlara aktarılabilir. Aktarım, Kanun'un 8. ve 9. maddelerine uygun olarak, gerekli teknik ve idari tedbirler alınarak gerçekleştirilir.
Kişisel Verileri İşlenen Kişi Olarak Haklarınız
6698 sayılı Kanun'un 11. maddesi uyarınca; kişisel verilerinizin işlenip işlenmediğini öğrenme, işlenmişse bilgi talep etme, işlenme amacını ve amacına uygun kullanılıp kullanılmadığını öğrenme, yurt içinde veya yurt dışında aktarıldığı üçüncü kişileri bilme, eksik veya yanlış işlenmişse düzeltilmesini isteme, Kanun'un 7. maddesindeki şartlar çerçevesinde silinmesini veya yok edilmesini isteme, yapılan işlemlerin aktarıldığı üçüncü kişilere bildirilmesini isteme, münhasıran otomatik sistemler vasıtasıyla analiz edilmesi suretiyle aleyhinize bir sonucun ortaya çıkmasına itiraz etme ve kanuna aykırı işleme sebebiyle zarara uğramanız halinde zararın giderilmesini talep etme haklarına sahipsiniz. Bu haklarınızı kullanmak için web sitemizdeki iletişim kanalları aracılığıyla bize başvurabilirsiniz.
Şartlar ve Koşullar
Şartlar ve Koşullar
1. Hizmet Kapsamı ve Değişiklikler
BRF Teknoloji, sunduğu yazılım geliştirme, DevOps danışmanlık, altyapı kurulumu ve teknik destek hizmetlerini bu şartlar ve koşullar çerçevesinde yürütür. Hizmet kapsamı, her proje için ayrıca belirlenir ve karşılıklı mutabakat ile kesinleştirilir. BRF Teknoloji, sunduğu hizmetlerin kapsamını, fiyatlandırmasını ve teknik detaylarını önceden bildirmek kaydıyla güncelleme hakkını saklı tutar.
2. Gizlilik Politikası
Hizmetlerimiz kapsamında toplanan kişisel veriler, Gizlilik Politikamız çerçevesinde işlenir. Detaylı bilgi için Gizlilik Politikası sayfamızı inceleyebilirsiniz.
3. Hizmet Kullanımı ve Sorumluluklar
Müşteriler, sunulan hizmetleri yalnızca yasal ve etik çerçevede kullanmayı kabul eder. Hizmetlerin kötüye kullanılması, üçüncü taraf haklarının ihlali veya yasa dışı faaliyetler için kullanılması durumunda BRF Teknoloji hizmeti askıya alma veya sonlandırma hakkına sahiptir. Müşteri, proje kapsamında sağladığı bilgilerin doğruluğundan ve güncelliğinden sorumludur.
4. Ödeme Şartları
Ödeme koşulları proje bazında belirlenir ve proje başlangıcında karşılıklı mutabakat ile kesinleştirilir. Aksi belirtilmedikçe, faturalar proje tesliminden itibaren 15 gün içinde ödenir. Geciken ödemelerde aylık %2 gecikme faizi uygulanabilir.
5. İptal ve İade Politikası
İptal talepleri, hizmetin başlangıç tarihinden en az 7 gün önce yazılı olarak bildirilmelidir. Başlamış projelerde, tamamlanan iş oranına göre ücretlendirme yapılır. Proje kapsamında özel olarak geliştirilen yazılım ve altyapı bileşenleri için iade yapılmaz.