Forum PHP & Laravel PHP 8.x ile Yüksek Trafikli Sitelerde PDO ve Bağla...
PHP & Laravel

PHP 8.x ile Yüksek Trafikli Sitelerde PDO ve Bağlantı Havuzu Yönetimi

Furkan Demir
4 ay önce • 311 görüntülenme

MySQL Bağlantı Hataları (Too Many Connections) ve Optimizasyon

Forumlar gibi anlık yüzlerce kullanıcının sorgu yaptığı sistemlerde, PHP tarafında veritabanı bağlantılarının doğru yönetilmemesi sistemin kilitlenmesine neden olur. Geleneksel PHP her sayfa yenilemesinde veritabanına yeni bir TCP bağlantısı açıp kapatır ve bu işlem çok maliyetlidir.

PDO Persistent Connections (Kalıcı Bağlantılar)

Bağlantıların her sayfa yüklendiğinde yeniden kurulması yerine, açık bırakılan bağlantıların bir havuzda tutulup tekrar kullanılması (Connection Pooling) sağlanabilir. PDO başlatırken PDO::ATTR_PERSISTENT => true parametresini kullanmak veritabanı el sıkışma (handshake) sürelerini ortadan kaldırır. Ancak dikkat: Kalıcı bağlantılar, doğru kapatılmayan transaction'lar (işlemler) yüzünden tablolarda lock (kilitlenme) yaratabilir!

Bağlantı Sayısını Düşürmek İçin Caching (Önbellekleme)

Veritabanı sunucusuna binen yükü asıl çözen şey, aynı sorguyu defalarca veritabanına göndermemektir:

Redis veya Memcached Entegrasyonu: Özellikle "Son 10 Konu" veya "Aktif Kullanıcılar" gibi saniyede bir değişmeyen verileri RAM üzerinde çalışan Redis'e alıp, veritabanı sorgusunu baypas edin.

Opcache Aktif Etmek: PHP 8 ile gelen JIT (Just-In-Time) derleyicisi ve Opcache sayesinde PHP dosyalarınızın derlenmiş halleri RAM'de tutulur, böylece disk I/O işlemleri minimuma iner.

Kendi forum/web sitenizde MySQL tarafında max_connections ayarını kaçta tutuyorsunuz ve hangi önbellek sistemini tercih ediyorsunuz?

Beğen 0
Kabul Edilmiş Cevap
Bilgi İşlem Uzmanı 2

Kalıcı bağlantılar (Persistent connections) güzel ama düzgün kapatılmayan transaction'lar tabloyu kilitleyebiliyor. Redis cache her zaman daha güvenli.

Beğen 4

Cevap yazmak için giriş yapmalısınız.

Giriş Yap