SevkiBilge

PHP'de PDO ile veritabanı bağlantısı sürekli zaman aşımına uğruyor

RecaiKocTech
· 3 gün önce · 1 görüntülenme
Arkadaşlar merhaba, son birkaç gündür başımı ağrıtan bir sorun var. Projemde PDO ile MySQL veritabanına bağlanıyorum, ama bağlantı sürekli olarak belirli bir süre sonra zaman aşımına (timeout) uğruyor. Özellikle uzun süren sorgular veya sayfa yenilemeleri arasında birkaç dakika geçince "PDOException: SQLSTATE[HY000] [2002] Connection timed out" hatası alıyorum. Bağlantıyı her sayfada yeniden kuruyorum, yoksa kalıcı bir bağlantı (persistent connection) kullanmıyorum. Ama yine de bu sorunla karşılaşıyorum. Sunucu ayarlarında bir sıkıntı mı var, yoksa benim kodumda mı bir hata yapıyorum, emin olamadım.

Bağlantı kodumu şöyle yazıyorum: try bloğu içinde new PDO(...) ile bağlantıyı kuruyorum, ardından setAttribute ile hata modunu exception olarak ayarlıyorum. Ama bağlantı kurulduktan sonra, diyelim ki 30 saniye işlem yapmazsam, ya da bir sorgu çok uzun sürerse (örneğin 10 saniyelik bir join sorgusu), bağlantı kopuyor. PHP tarafında default_socket_timeout veya mysql.connect_timeout gibi ayarları değiştirmeyi denedim, ama pek işe yaramadı. Belki de sunucu tarafında MySQL'in wait_timeout veya interactive_timeout değişkenleriyle ilgili bir durum var. Sizce bu ayarları kontrol etmeli miyim, yoksa PDO'nun kendi içinde bir yapılandırma mı kaçırıyorum?

Bir de şöyle bir şey fark ettim: localhost üzerinde çalışırken sorun yok, ama projeyi paylaşımlı hostinge yükleyince başladı. Hosting firmasıyla iletişime geçtim, "sorun yok, ayarlar standart" dediler. Ama ben hala aynı hatayı alıyorum. Acaba PDO bağlantı dizesine timeout değerini parametre olarak eklemek mümkün mü? Ya da try-catch içinde bağlantıyı tekrar denemek için bir döngü kursam, bu geçici bir çözüm olur mu? Sizler nasıl bir yol izliyorsunuz, benzer bir sorun yaşayan var mı? Yardımlarınızı bekliyorum.
2 yanıt
MuzeyyenSendilTech908
2 gün önce
Ben de aynı sorunu yaşamıştım, genelde PDO bağlantı ayarlarında timeout değerini düşük bırakıyorsun. options dizisine 'PDO::ATTR_TIMEOUT' => 30 eklemeyi dene, çoğu zaman işe yarıyor. Bir de host olarak localhost yerine 127.0.0.1 yazmayı dene.
TayyarTuncPlus
2 gün önce
Hocam bence sorun sadece timeout'ta değil, ya sunucu tarafında max_execution_time düşük kalmıştır ya da PDO bağlantısı kurulurken persistent connection açık bırakılmıştır, onu da kontrol et derim.

Yanıt yazmak için giriş yapın.