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: 15232|Răspunde: 3

[Sursă] MySQL CPU soluție 100% high

[Copiază linkul]
Postat pe 11.10.2018 11:20:31 | | | |
Deschid managerul de sarcini al serverului și descoperă că procesul CPU a fost mereu la 99%, iar vizualizarea este ocupată de procesul mysql, care a fost ridicat.


Ieșirea comenzii proceslist arată ce fire rulează și poți verifica starea curentă a bazei de date.

1. Mergi la directorul mysql/bin și introduci lista de procese mysqladmin;
2. Pornește mysql și introdu afișarea listei proceselor.
Dacă ai permisiunea SUPER, poți vedea toate firele de discuție, altfel poți vedea doar firele de discuție ale contului tău.





Semnificația și scopul fiecărei coloane

id: Un identificator
user: afișează utilizatorul curent, dacă nu este root, această comandă va afișa doar instrucțiuni SQL în cadrul permisiunilor tale.
host: arată ce IP provine această instrucțiune de la ce port
db: Afișează baza de date la care procesul este conectat în prezent.
comandă: Afișează comenzile executate de conexiunea curentă, de obicei sleep, interogare și conectare.
timp: Timpul în care această stare durează, în secunde.
Starea: Afișează starea instrucțiunii sql care folosește conexiunea curentă, dar doar o anumită stare în execuția instrucțiunii, o instrucțiune sql, a fost interogată, de exemplu, poate fi nevoie să treacă prin copierea în tabelul tmp, sortarea rezultatului, trimiterea datelor etc
info: Afișează această afirmație SQL, deoarece lungimea este limitată, astfel încât instrucțiunea SQL lungă nu este afișată complet, dar reprezintă o bază importantă pentru evaluarea enunțului problemei.


S-a constatat că există două instrucțiuni de interogare SQL care durează cel mai mult timp și nu au fost executate mai mult de 1000 de secunde, iar instrucțiunile SQL copiate din câmpul info sunt o interogare comună, după cum urmează:

selectează cast(count(*) ca SEMNAT) ca col_0_0_ din ratedpasse0_ 'RatedPassenger', 'BaseInfoCompany' baseinfoco1_, 'OrderMatch' ordermatch2_ unde baseinfoco1_. CompanyId=ratedpasse0_. ID-ul companiei și ordermatch2_. OrderId=ratedpasse0_. OrderId

Eliminăm procesul acestor două instrucțiuni de interogare

După ce am așteptat 10 secunde, am observat că CPU-ul a scăzut mult, dar era încă foarte ridicat, și voi continua să pun întrebări despre motiv!



Pentru instrucțiunea de interogare joint join, adăugați un index în câmpul asociat sau modificați codul de interogare al programului.
Creează o instrucțiune SQL de index

Sfârșit





Precedent:C# autentifică-te pe Wordpress
Următor:Modificarea metodei de mapare a porturilor pentru containerele docker
 Proprietarul| Postat pe 11.10.2018 13:03:02 |
Cea mai critică a acestei comenzi este coloana state, iar stările listate în mysql sunt în principal următoarele:

Tabel de verificare  
  Verificarea fișei tehnice (asta este automat).  
  Tabelele de închidere  
  Datele modificate în tabel sunt spălate pe disc, iar tabelul care a fost folosit este închis. Aceasta este o operațiune rapidă, dacă nu, ar trebui să verifici dacă spațiul pe disc este ocupat sau dacă discul este sub încărcare.  
  Conectează-te  
  Serverul sclav de replicare se conectează la serverul principal.  
  Copierea pe tabelul tmp pe disc  
  Deoarece setul temporar de rezultate este mai mare decât tmp_table_size, tabelul temporar este convertit din memorie în stocare pe disc pentru a economisi memorie.  
  Crearea tabelului tmp  
  Se creează un tabel temporar pentru a stoca unele dintre rezultatele interogărilor.  
  Ștergerea din tabelul principal  
  Serverul efectuează prima parte a unei ștergeri multi-tabel și tocmai a șters primul tabel.  
  Ștergerea din tabelele de referință  
  Serverul efectuează a doua parte a ștergerii multi-tabelelor, adică ștergerea înregistrărilor din alte tabele.  
  Tabele de aruncare  
  Fac FLUSH TABLES, așteptând ca alte fire să închidă datatable-ul.  
  Ucis  
  Dacă o cerere de ucidere este trimisă către un fir de discuție, firul va verifica steagul de ucidere și va abandona următoarea cerere de ucidere. MySQL verifică semnale de oprire în fiecare buclă principală, deși în unele cazuri firul poate muri pentru o perioadă scurtă de timp. Dacă firul este blocat de un alt fir, cererea de eliminare va intra în vigoare imediat ce blocarea este eliberată.  
  Blocat  
  Blocat de alte interogări.  
  Trimiterea datelor  
  Înregistrarea interogării SELECT este procesată în timp ce rezultatele sunt trimise către client.  
  Sortarea pe grup  
  Sortez pentru GRUPARE DUPĂ.  
  Sortarea după ordine  
  Se face sortare pentru ORDER BY.  
  Tabele de deschidere  
  Acest proces ar trebui să fie rapid, cu excepția cazului în care este interferat de alți factori. De exemplu, un tabel de date nu poate fi deschis de un alt fir de execuție până când instrucțiunile ALTER TABLE sau LOCK TABLE nu sunt executate. Încerc să deschid o masă.  
  Eliminarea duplicatelor  
  Se execută o interogare SELECT DISTINCT, dar MySQL nu poate optimiza înregistrările duplicate din etapa anterioară. Prin urmare, MySQL trebuie să elimine din nou înregistrările duplicate înainte de a trimite rezultatele către client.  
  Redeschiderea mesei  
  Se obține un blocaj pe o masă, dar trebuie modificat după ce structura tabelului este modificată. Am eliberat deja blocarea, am închis fișa tehnică și încearcă să redeschidă tabelul de date.  
  Repararea prin sortare  
  Instrucțiunea de fixare este sortarea pentru a crea un index.  
  Repararea cu keycache  
  Directiva fix folosește cache-ul indexului pentru a crea indici noi unul câte unul. Va fi mai lent decât Repararea prin sortare.  
  Căutând rânduri pentru actualizări  
  Înregistrările eligibile sunt identificate pentru actualizări. Trebuie făcut înainte ca UPDATE să modifice înregistrarea relevantă.  
  Somnul  
  Aștept ca clientul să trimită o nouă cerere.  
  Blocarea sistemului  
  Aștept să obțin un blocaj extern de sistem. Dacă nu există servere mysqld care rulează simultan și solicită același tabel, blocările externe ale sistemului pot fi interzise prin adăugarea parametrului –skip-external-lock.  
  Modernizarea încuietorilor  
  INSERT DELAYED încearcă să obțină un tabel de încuietori pentru a introduce o înregistrare nouă.  
  Actualizări  
  Căutarea înregistrărilor corespunzătoare și modificarea lor.  
  Blocarea utilizatorului  
  așteaptă GET_LOCK().  
  Așteptând mesele  
  Firul a fost notificat că structura fișei tehnice fusese modificată și trebuia redeschisă pentru a primi noua structură. Apoi, pentru a redeschide tabelul de date, trebuie să aștepți până când toate celelalte fire se închid tabelul. Această notificare apare în următoarele cazuri: FLUSH TABLES tbl_name, ALTER TABLE, RENAME TABLE, REPAIR TABLE, ANALYZE TABLE sau OPTIMIZE TABLE.  
  Așteptând inserția handlerului  
  INSERT DELAYED a procesat toate inserțiile în așteptare și așteaptă o nouă cerere.  
  Majoritatea stărilor corespund operațiunilor rapide, atâta timp cât un fir de fir rămâne în aceeași stare câteva secunde, poate exista o problemă care trebuie verificată.
 Proprietarul| Postat pe 01.03.2019 10:26:49 |
 Proprietarul| Postat pe 01.03.2019 10:34:13 |


Durează 10 secunde să interoghezi o dată.
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