Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 33231|Răspunde: 6

[Sursă] MySQL analizează utilizarea ridicată a procesorului în situații de concurență mare

[Copiază linkul]
Postat pe 05.09.2017 20:23:59 | | | |


Recent, din anumite motive, numărul vizitelor pe site-uri a crescut semnificativ, iar din cifră se poate observa că numărul conexiunilor simultane depășește 1.200

Pentru că configurația serverului este foarte scăzută, cu 1 nucleu și memorie 2G, iar site-ul este foarte lent de accesat când sunt mulți oameni


Folosim comanda top pentru a verifica, mysql ocupă mult CPU și memorie, iar alte procese sunt php-fpm care consumă CPU și memorie, ceea ce nu este foarte ridicat

Dacă mysql rulează normal, este vorba că unele instrucțiuni SQL în PHP cauzează descoperirea problemelor, iar utilizatorul root intră în managementul mysql
mysql -u root -p
Introduceți parola, apoi introduceți următoarea comandă




Cu această comandă, putem vedea că baza de date execută constant operațiuni de ștergere cu condiții where.



pre_k_spider acest tabel este un tabel care înregistrează accesurile spider, probabil cauzate de un plugin instalat

Putem vedea că tabelul pre_k_spider are peste 100.000 de înregistrări, iar interogarea durează 33 de secunde



Golește decisiv acest tabel, apoi intră în fundalul de management pentru a închide plug-in-urile relevante ale tabelului și a-l readuce la normal!









Precedent:Serviciul de verificare a codurilor Alibaba Cloud Cloud Marketplace
Următor:mysql 5.6.21 pentru a vizualiza fișierul de configurare my.cnf
 Proprietarul| Postat pe 06.09.2017 09:32:56 |


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:




Postat pe 06.09.2017 11:15:15 |
Trebuie să iau un server master-slave
 Proprietarul| Postat pe 06.09.2017 11:15:49 |
vrchary a postat pe 2017-9-6 11:15
Trebuie să iau un server master-slave

Motivul configurației serverului Configurația este scăzută   
 Proprietarul| Postat pe 06.09.2017 13:47:56 |
Am rezolvat problema cu "mysql-bin.000001" care ocupa mult spațiu
http://www.itsvse.com/thread-2694-1-1.html
(Sursa: Arhitect)

După ce am instalat MySQL cu porturi, după un timp am constatat că spațiul /var era insuficient, am verificat și am constatat că mysql-bin.000001, mysql-bin.000002 și alte fișiere ocupau spațiu, deci la ce folosesc aceste fișiere? Acesta este jurnalul de operațiuni al bazei de date, cum ar fi UPDATE un tabel sau DELETE unele date, chiar dacă instrucțiunea nu corespunde datelor, această comandă va fi stocată în fișierul de jurnal, inclusiv timpul de execuție al fiecărei instrucțiuni, care va fi de asemenea înregistrat.

Acest lucru se face în principal pentru următoarele două scopuri:
1: Recuperarea datelor
Dacă baza ta de date are o problemă și ai avut un backup înainte, poți verifica fișierul de jurnal pentru a afla care comandă a cauzat problema bazei de date și să găsești o modalitate de a recupera pierderea.
2: Sincronizarea datelor între serverele master-slave
Toate operațiunile de pe serverul principal sunt înregistrate într-un jurnal pe care serverul slave îl poate folosi pentru a se asigura că ambele sunt sincronizate.

Doar închide jurnalul


 Proprietarul| Postat pe 09.10.2017 14:33:30 |
mysqld este prea mult CPU care ocupă Windows dedesubt



Soluție: Optimizarea instrucțiunii SQL
Postat pe 30.12.2021 23:15:36 |
Susțineți-l!!!!!!!!!!!!!!!!
Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com