Mysql Problemi (Çok Fazla Bağlantı)
-
Merhabalar,
MySQL veritabanına bağlı masaüstü ve mobil uygulama hazırladık. Bunlar bir biri ile ortak çalışmaktadır. Fakat şöyle bir problemimiz var.
Masaüstü yazılım 15 saniyede bir sürekli bir alanı güncelliyor ve güncellediği alanlara göre tekrar sorgu atıyor.
Masaüstü yazılımda yaklaşık 30 - 40 kişi açtığında veritabanında işlemler bölümünde bir sürü işlem görülüyor ve Sleep modunda bekliyor. Birde mobil uygulamadan giriş yapıldığında iyice birikiyor bu işlemler.
Oysaki tüm bağlantılar dikkatle yazıldı ve her bağlantı kapatılıyor. Bu sleep modundaki işlemlerin tümü arttıkça bu sefer bağlantı problemi çıkıyor ve Too Many Connection hatası alıyoruz.
Ekstra birşey mi yapmamız gerekiyor bu hatayı almamamız için? Veya sleep modundaki tüm işlemleri sürekli sildirsek her bağlantı sonrasında, diğer bağlantı yapanlar problem yaşar mı?
Yada ekstra bir yazılım hazırlayıp 10 saniyede bir tüm sleepleri silse mi?
-
https://dev.mysql.com/doc/refman/5.5/en/too-many-connections.html
-
0x656e bunu yazdı
https://dev.mysql.com/doc/refman/5.5/en/too-many-connections.html
Oraya baktım, derdime çare olmadı hocam :)
-
nasıl bağlantı yapıyorsunuz bilmiyorum umarım uygulamalar direk olarak mysql e bağlanmıyordur öyle ise sorun biraz gıcık önerim api ile bağlatmak uygulamaları. Sorunun çözümü basit max connection ı yükseltirseniz ve connection timeout u daha aşağıda tutarsanız sorununuz bi nebze olsun azalır. Misal şuan kullandığımız projede anlık olarak 100 den fazla aktif connection var ama too many connection hatasına düşmüyoruz.
-
Web servis üzerinden mi haberleşiyorlar yoksa direk mysql servera connection mu açıyor uygulamalar?
-
Masaüstü yazılımda API yok, direkt MySQL Connection yaptık arkadaşlar. Yazılım elden ele veya internete düşecek bir yazılım değil.
Mobil uygulama tabi API üzerinden çalışıyor.
biri tarafından 23/Ara/16 13:31 tarihinde düzenlenmiştir -
tolgasen bunu yazdı
Masaüstü yazılımda API yok, direkt MySQL Connection yaptık arkadaşlar. Yazılım elden ele veya internete düşecek bir yazılım değil.
Mobil uygulama tabi API üzerinden çalışıyor.
Hocam şurda hata tespiti için bir yoldan bahsetmişler görmüşsündür belki ama yinede ekliyim. Belki gözden kaçmıştır. Birde network'u dinleyip açılan connectionları filan takip etmende fayda var. Belki client taraftadaki provider kaynaklı bir timeout vs. olabilir. Yada gözden kaçmış bir try-catch içinde birşeyler olabilir ve connection kapanmıyor olabilir. Birde timeout sonrasıda acaba bağlantı askıda kalıyor olabilirmi?
https://www.experts-exchange.com/questions/27921809/Finding-MySQL-queries-creating-Sleep-processes.html#a38590616
-
TeRRoR bunu yazdıtolgasen bunu yazdı
Masaüstü yazılımda API yok, direkt MySQL Connection yaptık arkadaşlar. Yazılım elden ele veya internete düşecek bir yazılım değil.
Mobil uygulama tabi API üzerinden çalışıyor.
Hocam şurda hata tespiti için bir yoldan bahsetmişler görmüşsündür belki ama yinede ekliyim. Belki gözden kaçmıştır. Birde network'u dinleyip açılan connectionları filan takip etmende fayda var. Belki client taraftadaki provider kaynaklı bir timeout vs. olabilir. Yada gözden kaçmış bir try-catch içinde birşeyler olabilir ve connection kapanmıyor olabilir. Birde timeout sonrasıda acaba bağlantı askıda kalıyor olabilirmi?
https://www.experts-exchange.com/questions/27921809/Finding-MySQL-queries-creating-Sleep-processes.html#a38590616
Aslında MySQL server tarafında hiç bir ayar yapmadık. Linkteki gibi bir kaç ayar ve wait_timeout, max_connection gibi süreleri değiştirmemiz fayda sağlayabilir.
Dediğiniz gibi bir yazılım hazırlayıp 10 saniyeden uzun süre açık kalanları temizlemeyi / kapatmayı düşünüyorum.
Bağlantıları genelde metodlar ile yaptım ve finally kısmında mutlaka .close yaptım. Ama nedense her defasında her bağlantıda 2 bağlantı sleep moda geçiyor. 1 dakika sonra siliniyor ama beklediği o 1 dakika dolmasına sebep oluyor.
-
Çıldırıcam ya program kapanınca hepsi siliniyor, açıkken silinmiyor.
Allah aşkına şu kodun neresinde problem var ya?
Dim Baglanti As New MySqlConnection() Try Baglanti.ConnectionString = Ayarlar.baglantiString Baglanti.Open Catch ex As MySqlException MsgBox(ex.Message) Finally Baglanti.Close() Baglanti = Nothing End Try -
MySqlConnection.ClearAllPools()
kodunu finally içerisine ekledim. Şimdi çıkmıyor. Performans kaybı olur mu bilmem ama en azından hata vermez :)
