Ayıkla MySQLs "çok fazla bağlantı"

4 Cevap php

Ben bir üretim sunucusuna var bir hata ayıklamak çalışıyorum. Bazen MySQL veriyor ve benim web uygulaması (ben "çok fazla bağlantı" hatası alıyorum) veritabanına bağlanamıyor. Sunucu bir kaç bin ziyaretçi bir gün vardır ve gece I (vb, 50 000 satırları döngüye sokulması ve çiftleri siler) bazen bazı ağır mysql iş gelmez bir kaç cron işleri koşuyorum

  • Sunucu aynı makinede apache ve mysql hem ishal
  • MySQL (max bağlantıları) oldukça standart tabanlı bir yapılandırma vardır
  • Web uygulaması PHP kullanıyor

Nasıl bu sorunu debug? Ben okumalısınız log dosyaları hangisi? Nasıl ben "kötü" senaryo buluyorsunuz? Garip bu ben MySQL sunucusunu yeniden başlatın eğer tekrar çalışmaya başlar olmasıdır.

Edit:

  • Farklı uygulamalar / script (çoğunlukla mysqli ama aynı Zend_Db) kendi veritabanına farklı bağlantıları kullanıyor

4 Cevap

İlk olarak, bağlantılarını izlemek için (bunun için Google'ı) innotop kullanın. Çoğunlukla InnoDB istatistiklerine yönelik, ama bir işlem bu değil dahil tüm bağlantıları göstermek için set bahse girebilirsiniz.

Aksi takdirde, aşağıdaki yararlı şunlardır: Web uygulamaları kullanın kalıcı bağlantıları / bağlantı havuzları. Lütfen maksimum bağlantıları artırın.

Mutlaka uzun süren bir SQL sorgu değil.

Bir sayfanın başında bir bağlantı açarsanız PHP script sonlanana kadar, o serbest olmayacak - hiçbir sorgu çalışıyor olsa bile.

Sen yavaş olanları öğrenmek için sayfalarınıza bazı istatistikleri eklemek, ve en hit olanları gerekir. Mümkünse erken bağlantıyı kapatmadan, yardımcı olacaktır.

(mysql_pconnect), sürekli MySQL bağlantıları açılış ve kapanış neden sunucu yükünü azaltmaya yardımcı olacak kalıcı bağlantıları kullanmayı deneyin.

Başlangıç ​​noktası mysqladmin processlist mysql sunucuda süreçlerin bir listesini almak için kullanmak muhtemelen. Bir sonraki adım ne bulmak bağlıdır.