
PgBouncer ile PostgreSQL Bağlantı Havuzu Yönetimi
PgBouncer kurulumu ve yapılandırması ile PostgreSQL bağlantı sayısını optimize edin, uygulama performansını artırın.
PgBouncer ile PostgreSQL Bağlantı Havuzu Yönetimi
PostgreSQL'in her bağlantı için ayrı bir işlem (process) oluşturması, yüksek trafikli uygulamalarda ciddi performans sorunlarına yol açar. PgBouncer, hafif bir bağlantı havuzu yöneticisi olarak bu sorunu çözer.
PgBouncer Neden Gerekli?
Bağlantısız:
Web Server (1000 istek) → PostgreSQL (1000 bağlantı = 1000 işlem)
Bellek: ~10MB × 1000 = 10GB! ❌
PgBouncer ile:
Web Server (1000 istek) → PgBouncer → PostgreSQL (50 bağlantı)
Bellek: ~10MB × 50 = 500MB ✓
Sağladığı faydalar:
- Bağlantı overhead'ini azaltır
- PostgreSQL max_connections limitini aşmadan ölçekleme
- Bağlantı kurulum süresini ortadan kaldırır
- SSL sonlandırma yapabilir
Kurulum
Ubuntu/Debian
sudo apt update
sudo apt install pgbouncer -y
# Versiyon kontrolü
pgbouncer --version
Kaynak Koddan Derleme (Yeni Sürüm)
# Bağımlılıklar
sudo apt install libevent-dev libssl-dev pkg-config make gcc -y
# İndir ve derle
wget https://www.pgbouncer.org/downloads/files/1.22.0/pgbouncer-1.22.0.tar.gz
tar xzf pgbouncer-1.22.0.tar.gz
cd pgbouncer-1.22.0
./configure --prefix=/usr/local
make
sudo make install
Yapılandırma
/etc/pgbouncer/pgbouncer.ini
[databases]
# Format: veritabani_adi = host=... port=... dbname=...
sitem_db = host=127.0.0.1 port=5432 dbname=sitem_production
blog_db = host=127.0.0.1 port=5432 dbname=blog_production
# Tüm veritabanlarını geçir (wildcard)
* = host=127.0.0.1 port=5432
[pgbouncer]
# Dinleme adresi
listen_addr = 127.0.0.1
listen_port = 6432
# Kimlik doğrulama
auth_type = md5
auth_file = /etc/pgbouncer/userlist.txt
# Havuz modu
pool_mode = transaction
# Bağlantı limitleri
max_client_conn = 1000 # Uygulamalardan maksimum bağlantı
default_pool_size = 25 # Her veritabanı/kullanıcı için PostgreSQL bağlantısı
max_db_connections = 100 # Toplam PostgreSQL bağlantısı
min_pool_size = 5 # Minimum aktif bağlantı
reserve_pool_size = 5 # Acil durum yedek bağlantıları
# Zaman aşımları (saniye)
server_idle_timeout = 600 # Boşta bağlantıyı kapat
client_idle_timeout = 0 # İstemci zaman aşımı (0=devre dışı)
server_connect_timeout = 15 # PostgreSQL bağlantı zaman aşımı
query_timeout = 0 # Sorgu zaman aşımı (0=devre dışı)
client_login_timeout = 60 # İstemci oturum açma zaman aşımı
# Sunucu tarafı koruma
server_reset_query = DISCARD ALL
server_check_delay = 30
server_check_query = select 1
# Loglama
log_connections = 1
log_disconnections = 1
log_pooler_errors = 1
stats_period = 60
# Admin arayüzü
admin_users = pgbouncer_admin
stats_users = pgbouncer_stats
# PID dosyası
pidfile = /var/run/pgbouncer/pgbouncer.pid
logfile = /var/log/pgbouncer/pgbouncer.log
Kullanıcı Listesi
# MD5 hash oluştur: "md5" + md5(parola + kullanici)
echo -n "sifrem123postgresql_user" | md5sum
# Çıktı: a1b2c3d4e5f6... (örnek)
# /etc/pgbouncer/userlist.txt
# Format: "kullanici_adi" "md5HASH"
nano /etc/pgbouncer/userlist.txt
"uygulama_user" "md5a1b2c3d4e5f6789012345678901234ab"
"pgbouncer_admin" "md5abc123def456789012345678901234cd"
# Doğru izinleri ayarla
sudo chown postgres:postgres /etc/pgbouncer/userlist.txt
sudo chmod 640 /etc/pgbouncer/userlist.txt
Pool Modları
Session Mode (varsayılan)
Her istemci → PostgreSQL bağlantısı (oturum boyunca)
Kullanım: SET, temporary tables, advisory locks kullanan uygulamalar
Performans artışı: Bağlantı kurulum overhead'i ortadan kalkar
Transaction Mode (önerilen)
Her transaction → PostgreSQL bağlantısı alır, biter bırakır
En yüksek performans artışı
Kısıtlama: SET, prepared statements*, LISTEN/NOTIFY kullanılamaz
* prepared_statement_cache_queries = 0 ile çözülebilir
Statement Mode
Her SQL ifadesi → PostgreSQL bağlantısı
Çok nadiren kullanılır
Multi-statement transaction desteklemez
Hangi Modu Seçmeli?
# Transaction mode için ek ayarlar
pool_mode = transaction
server_reset_query = # Transaction mode'da boş bırak
ignore_startup_parameters = extra_float_digits,options
Servis Yönetimi
# Servisi başlat
sudo systemctl start pgbouncer
sudo systemctl enable pgbouncer
# Durum kontrol
sudo systemctl status pgbouncer
# Yapılandırmayı yeniden yükle (servisi durdurmadan)
sudo systemctl reload pgbouncer
# veya
kill -HUP $(cat /var/run/pgbouncer/pgbouncer.pid)
Admin Console ile İzleme
# PgBouncer admin konsoluna bağlan
psql -h 127.0.0.1 -p 6432 -U pgbouncer_admin pgbouncer
-- Havuz durumunu göster
SHOW POOLS;
-- İstemci bağlantıları
SHOW CLIENTS;
-- Sunucu bağlantıları
SHOW SERVERS;
-- İstatistikler
SHOW STATS;
-- Bekleme süreleri
SHOW STATS_AVERAGES;
-- Tüm veritabanları
SHOW DATABASES;
-- Yapılandırmayı yeniden yükle
RELOAD;
-- Belirli bir veritabanını durdur/başlat
PAUSE sitem_db;
RESUME sitem_db;
Uygulama Entegrasyonu
Node.js (pg)
const { Pool } = require('pg');
const pool = new Pool({
host: '127.0.0.1',
port: 6432, // PostgreSQL değil, PgBouncer portu!
database: 'sitem_db',
user: 'uygulama_user',
password: 'sifre',
max: 10, // Uygulama tarafı bağlantı havuzu
idleTimeoutMillis: 30000,
});
Django
# settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'sitem_db',
'USER': 'uygulama_user',
'PASSWORD': 'sifre',
'HOST': '127.0.0.1',
'PORT': '6432', # PgBouncer portu
'CONN_MAX_AGE': 0, # Transaction mode için 0
}
}
Performans Testi
# pgbench ile test (PgBouncer üzerinden)
pgbench -h 127.0.0.1 -p 6432 -U uygulama_user -c 100 -j 4 -t 1000 sitem_db
# Karşılaştırma: Doğrudan PostgreSQL
pgbench -h 127.0.0.1 -p 5432 -U uygulama_user -c 100 -j 4 -t 1000 sitem_db
Güvenlik
# TLS/SSL zorunlu kıl
client_tls_sslmode = require
client_tls_key_file = /etc/ssl/private/pgbouncer.key
client_tls_cert_file = /etc/ssl/certs/pgbouncer.crt
# PostgreSQL'e de SSL ile bağlan
server_tls_sslmode = require
# Güvenlik duvarı: Sadece uygulama sunucusundan erişim
sudo ufw allow from 10.0.0.5 to any port 6432
sudo ufw deny 6432
PgBouncer kurulumu tamamlandıktan sonra uygulamanızın PostgreSQL bağlantı sayısının önemli ölçüde düştüğünü ve performansın arttığını göreceksiniz.
Buyukweb'in NVMe SSD tabanlı sunucuları veritabanı performansınız için idealdir. Hosting planlarımızı inceleyin.
Ilgili Buyukweb Hizmetleri:
- Windows hosting ile MSSQL destegi
- VDS sunucu ile veritabani yonetimi
- Tum hosting ve sunucu paketlerimiz
Veritabani Performans Optimizasyonu
Veritabani web uygulamalarinin kalbidir.
MySQL/MariaDB Tuning
innodb_buffer_pool_size'i RAM'in %60-70'ine ayarlayin. slow_query_log ile yavas sorgulari tespit edin. max_connections optimize edin.
Indeksleme
WHERE, JOIN, ORDER BY sutunlarina indeks ekleyin. EXPLAIN ile sorgu planlari analiz edin. Composite index kullanin.
Baglanti Havuzu
ProxySQL ile gelismis baglanti yonetimi. Connection pooling ile maliyet azaltma. Persistent connections kullanin.
Replikasyon
Master-Slave ile okuma yukunu dagitin. Galera Cluster ile multi-master yuksek erisilebilirlik. Semi-senkron replikasyon degerlendirin.
Yedekleme
mysqldump mantiksal, xtrabackup fiziksel yedek. Binary log ile point-in-time recovery. Incremental yedekleme ile tasarruf.
Sik Sorulan Sorular
MySQL mi PostgreSQL mi?
MySQL cogu web uygulamasi ile uyumlu. PostgreSQL gelismis veri tipleri ve JSON icin ideal. CMS'ler genelde MySQL kullanir.
Veritabanim buyudu ne yapmaliyim?
Gereksiz verileri temizleyin, tablo optimize edin, arsivleme yapin, partitioning kullanin.
Ne siklikla yedek almaliyim?
Kritik veritabanlari saatlik, standart siteler gunluk. Buyuk degisikliklerden once manuel yedek.
Sonuc
Veritabani optimizasyonu uygulama performansini dogrudan etkiler. Indeksleme, tuning ve yedekleme ile veri katmaninizi guclendirin.
Veritabani Boyut Yonetimi
Buyuk Tablolar icin Stratejiler
- Partitioning: Tarihe gore tablolari bolumlendirin. Sorgu performansi artar.
- Arsivleme: Eski verileri arsiv tablolarina tasiyin.
- Sikistirma: InnoDB sikistirmasi ile disk kullanimini %50-75 azaltin.
WordPress Veritabani Optimizasyonu
- wp_options autoload: Gereksiz autoload kayitlari temizleyin.
- Post revisions: wp-config.php'de WP_POST_REVISIONS sinirlayin.
- Transient veriler: Suresi dolmus verileri duzenli temizleyin.
- Spam yorumlar: Toplu silin.
Veritabani Guvenlik
- Varsayilan portu degistirin
- Uygulama bazli kullanici olusturun
- Minimum gerekli yetki verin
- SSL ile baglanti sifreleyin
- Duzenli guvenlik taramasi yapin
Turkiye'de Hosting Sektoru 2025-2026
Sektorel Trendler
Turkiye hosting pazari hizla buyumektedir. E-ticaretin genislemesi, dijitallesme calismalarI ve uzaktan calisma trendi hosting talebini artirmaktadir. NVMe SSD, HTTP/3 ve edge computing gibi teknolojiler hosting performansini yeni seviyelere tasimaktadir.
Dikkat Edilmesi Gerekenler
Hosting sektoru rekabetci bir pazardir. Dusuk fiyat vaat eden ancak altyapı kalitesinden odun veren firmalardan kacinin. Gizli maliyet, yenileme fiyat artisi ve yetersiz destek en sik karsilasilan sorunlardir.
Hosting Firmasi Secim Kriterleri
- Veri merkezi lokasyonu: Turkiye'de veri merkezi olan firmalari tercih edin
- Uptime garantisi: Minimum %99.5, ideal %99.8+
- Teknik destek: 7/24 Turkce destek zorunlu
- Guvenlik: DDoS korumasi, SSL, WAF dahil olmali
- Yedekleme: Gunluk otomatik yedekleme olmali
- Olceklenebilirlik: Ihtiyac artiginda kolayca yukseltme yapilabilmeli
- Musteri yorumlari: Gercek kullanici deneyimlerini arastirin
Buyukweb 2009'dan beri bu kriterlerin tumunu karsilayarak 5.200+ musteriye guvenilir hosting hizmeti sunmaktadir. Sorulariniz icin 0850 302 60 70 numarasini arayabilir veya destek@buyukweb.com adresine yazabilirsiniz.
Etiketler:

