VDS (Sanal Özel Sunucu) kiralayan geliştiriciler ve sistem yöneticileri, web uygulamalarında veritabanı bağlantı sorunuyla karşılaşırlar. Özellikle yüksek trafiğe sahip siteler veya çok sayıda kullanıcıyı destekleyen uygulamalarda, her istek için yeni bir veritabanı bağlantısı açmak, sunucu kaynaklarını hızla tüketir. Bu noktada connection pooling, bağlantıları yönetmenin en etkili yöntemidir.
Veritabanı Bağlantı Pooling Nedir?
Connection pooling, önceden açılmış ve bekleme durumunda olan veritabanı bağlantılarının bir havuzundan, gelen isteklerin bu bağlantıları kullanmasını sağlayan bir tekniktir. Her yeni HTTP isteği için ayrı bir MySQL bağlantısı açıp kapatmak yerine, havuzda bulunan boş bir bağlantıyı yeniden kullanır.
Örneğin, 100 eşzamanlı kullanıcının olduğu bir e-ticaret sitesinde, pooling olmadan 100 ayrı veritabanı bağlantısı gerekir. Pooling ile ise 10-20 bağlantı yeterli olabilir ve her bağlantı sırayla farklı isteklere hizmet eder.
VDS'de Connection Pooling Neden Gereklidir?
VDS sunucularında RAM ve CPU kaynakları sınırlıdır. Her veritabanı bağlantısı, bellek tüketir ve işlemci gücü gerektirir. Connection pooling olmadığında:
- Yüksek trafikte MySQL sunucusu "too many connections" hatası verir
- Boş bağlantılar açık kalır ve RAM israf edilir
- Bağlantı açma-kapama maliyeti her istek için tekrarlanır
- Veritabanı sunucusu istekleri yetiştirmekte zorlanır
Pooling kullanıldığında bu sorunlar büyük ölçüde ortadan kalkar ve sunucu daha fazla eşzamanlı kullanıcıyı destekleyebilir.
PHP ile Connection Pooling: PgBouncer ve ProxySQL
ProxySQL, MySQL bağlantı yönetimi için en yaygın tercih edilen araçtır. VDS üzerinde ProxySQL'i kurmak, uygulamanız (PHP, Python, Node.js) ile veritabanı arasında bir ara katman oluşturur.
Kurulum adımları basittir:
apt install proxysqlile ProxySQL'i kurun/etc/proxysql.cnfdosyasında bağlantı havuzu boyutunu tanımlayın (örn.max_connections=1000)- Uygulamanızın bağlantı dizesini
localhost:6032yerine ProxySQL portuna yönlendirin systemctl restart proxysqlile başlatın
PgBouncer ise PostgreSQL kullanıcıları için benzer işlevi görür. Lightweight ve hafiftir.
Uygulama Düzeyinde Pooling: MySQL'i Doğru Yapılandırmak
ProxySQL kurması gereken kaynakları yoksa, PHP tarafında da pooling sağlayabilirsiniz. mysqli veya PDO kullanırken, bağlantı nesnelerini yeniden kullanın:
- Singleton pattern ile global bağlantı nesnesi oluşturun
- Bağlantı pool kütüphanesi kullanın (örn.
php-mysql-pool) max_connectionsparametresini VDS'nin RAM'i ile orantılı ayarlayın (varsayılan 151, genelde 200-300 yeterlidir)wait_timeoutdeğerini düşük tutun (300-600 saniye) boş bağlantılar kapanırken
VDS'de Connection Pooling İzleme ve Tuning
Kurulum sonrası, bağlantı durumunu düzenli kontrol etmek gerekir:
SHOW STATUS WHERE variable_name LIKE 'Threads%';komutuyla aktif bağlantıları görünSHOW PROCESSLIST;ile hangi sorguların ne kadar sürdüğünü izleyin- Slow query log'u etkinleştirerek, uzun süren sorguları tespit edin
- ProxySQL üzerinde
STATSkomutları ile havuz istatistiklerini kontrol edin
Eğer bağlantılar havuzda beklemede çok zaman geçirse, havuz boyutunu artırın. Tersine, kaynak israfı görürseniz boyutu azaltın.
Pratik Örnek: WordPress Sitesinde Pooling
WordPress ile yüksek trafikli blog çalıştırıyorsanız, wp-config.php içinde bağlantı yönetimini optimize edebilirsiniz. ProxySQL'i kurarak, WordPress'in bağlantı dizesini ProxySQL portuna yönlendirmek, eklenti yüklemesine gerek olmadan performans artışı sağlar.
WooCommerce tabanlı e-ticaret sitelerinde bu, ödeme işlemleri sırasında veritabanı zaman aşımı hatalarını büyük ölçüde azaltır.
VDS üzerinde connection pooling uygulamak, küçük bir çabayla sunucu kapasitesini %30-50 artırabilir. Özellikle 4GB-8GB RAM'li VDS kullanıyorsanız, bu yatırım hemen geri döner. Bogahost'un yönetimli VDS hizmetleri, ProxySQL ve diğer performans optimizasyonları için hazır altyapı sağlar; bu konuda destek almak istiyorsanız, sunucu ekibimize başvurabilirsiniz.
Yorumlar (0)
Henüz yorum yapılmamış. İlk yorumu siz yapın!
Yorum Yap