Astăzi site-ul este din nou blocat și se găsește un număr mare de somn
Cauzele somnului:
1 Programul client nu a apelat mysql_close() înainte de a ieși.
2 Clientul a dormit mai mult de wait_timeout sau interactive_timeout de secunde fără să emită nicio cerere către server.
3 Programul client s-a încheiat brusc în mijlocul unui transfer de date
Dacă numărul proceselor de repaus în aceeași perioadă este prea mare, iar numărul total de conexiuni în alte stări depășește valoarea max_connection, atunci MySQL nu mai poate procesa nicio cerere în afară de utilizatorul rădăcină, nu poate stabili o conexiune cu nicio cerere sau se blochează direct
Soluție:
1. În primul rând, verifică dacă programul tău folosește metoda pconnect și, în al doilea rând, verifică dacă mysql_close() este apelat la timp înainte ca pagina să fie executată. Încearcă să nu folosești metoda pconnect, adică să folosești mysql_connect. Când programul este executat, mysql_close trebuie invocate explicit
2. Adaugă wait_timeout și interactive_timeout la my.cnf, setează valoarea mai mică, implicit valoarea wait_timeout este 8 ore, poți schimba la 1 oră sau jumătate de oră. Astfel, mysql va opri conexiunile moarte mai repede. Preveniți ca numărul total de conexiuni să depășească valoarea max_connection.
wait_timeout prea mare va determina eliberarea unui număr mare de procese SLEEP în MySQL în timp, ceea ce va scădea performanța sistemului, dar dacă setările sunt prea mici, poți întâmpina probleme de genul "MySQL a dispărut"
Setează valoarea max_connection la o valoare mai mare, dar evident că nu este potrivit, cu cât ai mai multe conexiuni, cu atât mai mult stres se pune pe serverul tău. De fapt, aceste conexiuni sunt redundante, iar eliminarea lor cât mai curând posibil este cea mai bună politică.
3. Analizați interogarea SQL a sistemului pas cu pas, găsiți SQL-ul prea lent și optimizați-l
1)interactive_timeout: Semnificația parametrului: Numărul de secunde în care serverul așteaptă o activitate înainte de a opri conexiunea interactivă. Un client interactiv este definit ca un client care folosește CLIENT_INTERACTIVE opțiune din mysql_real_connect(). Parametru implicit: 28800 secunde (8 ore)
(2)wait_timeout: Semnificația parametrului: Numărul de secunde în care serverul așteaptă activitatea înainte de a închide conexiunea neinteractivă. Când thread-ul începe, valoarea wait_timeout sesiunii este inițializată pe baza valorii globale wait_timeout sau globală a interactive_timeout, în funcție de tipul clientului (definit CLIENT_INTERACTIVE opțiunile de conexiune ale mysql_real_connect()). Parametru implicit: 28800 secunde (8 ore)
Există o limită superioară a numărului maxim de conexiuni pe care MySQL Server le poate suporta, deoarece fiecare conexiune este stabilită și consumă memorie, așa că ne așteptăm ca clienții să se deconecteze și să elibereze memoria ocupată după conectarea la MySQL Server pentru a gestiona operația corespunzătoare. Dacă MySQL Server are un număr mare de conexiuni inactive, nu doar că vor consuma memorie în zadar, dar dacă conexiunile continuă să se acumuleze și să se deschidă, vor ajunge în cele din urmă la numărul maxim de conexiuni în MySQL Server, ceea ce va raporta eroarea "prea multe conexiuni". Stabilirea valorii wait_timeout trebuie judecată în funcție de funcționarea sistemului. După ce sistemul a funcționat o perioadă de timp, poți verifica starea conexiunii sistemului curent prin comanda show processlist; dacă găsești un număr mare de procese conectate în stare de repaus, înseamnă că setarea parametrilor este prea mare și poți face ajustări corespunzătoare pentru a face ajustări mai mici.
Comandă SQL:
Această metodă de modificare este înDupă repornirea serviciului mysql, acesta va deveni invalid, deci cel mai bine este să configurezi aceste două proprietăți în fișierul de configurare mysql.
Modifică fișierul my.cnf sub Linux:
|