Jurnal de interogări Mysql. Profilarea interogărilor MySQL

Jurnal de interogări Mysql. Profilarea interogărilor MySQL

Profilarea interogărilor MySQL este o metodă utilă pentru analiza productivității generale a programelor bazate pe baze de date. La dezvoltarea aditivilor medii și mari, de regulă, sunt distribuite sute de solicitări per bază excelentă cod, iar baza de date procesează un număr de interogări pentru o secundă. Fără profilare, devine și mai important să identificăm cauzele și cauzele oraș universitar suplimente. Acest manual descrie câteva metode de bază pentru profilarea interogărilor folosind instrumente suplimentare MySQL.

Jurnal de interogări MySQL

Jurnalul de interogări profunde MySQL (sau jurnalul de interogări lent) - un jurnal în care MySQL caută interogări mari și potențial problematice.

Această funcție vine cu MySQL, dar este dezactivată. MySQL înseamnă că interogările trebuie introduse în jurnal, cu ajutorul unor modificări speciale care vă permit să profilați interogări în funcție de productivitatea programului. Solicitați jurnalului să introducă intrări care durează mai mult de o oră pentru procesare sau intrări care conțin indecși incorecți.

Profiluri diverse

Opțiunile de bază ale serverului pentru ajustarea jurnalului de interogări MySQL sunt:

slow_query_log este global
slow_query_log_file este global
long_query_time global/session
log_queries_not_using_indexes este global
min_examined_row_limit global/session

slow_query_log – o modificare logică pentru a activa și dezactiva jurnalul de interogări lungi.

slow_query_log_file - calea absolută către fișierul jurnal de interogare. Directorul de fișiere este supus drepturilor de acces mysqld pentru citire și scriere. Daemonul mysql, care funcționează pentru orice, va fi lansat ca mysql, dar pentru a trece la el, rulați comanda în terminalul Linux:

ps-ef | grep bin/mysqld cut -d" "-f1

Visnovok va afișa în linie koristuvach și koristuvach mysqld.

cd /var/log
mkdir mysql
chmod 755 mysql
chown mysql:mysql mysql

  • long_query_time – oră în secunde pentru a verifica ultima dată când am întrebat. Cu o valoare de 5, vița înregistrează toate cererile care durează mai mult de 5 secunde pentru procesare.
  • log_queries_not_using_indexes – aceasta este o valoare logică, ceea ce înseamnă că trebuie să înregistrezi interogări în loc să folosești indecși. În timpul analizei, astfel de întrebări sunt importante.
  • min_examined_row_limit – indică numărul minim de rânduri pentru analiză. Cu valori de 1000, toate intrările care analizează mai puțin de 1000 de rânduri vor fi ignorate.

Serverele MySQL de înlocuire pot fi instalate în fișierul de configurare MySQL sau dinamic cu ajutor suplimentar interfață koristuvach sau linia de comandă MySQL. Dacă se fac modificări în fișierul de configurare, acestea vor fi salvate la repornirea serverului, altfel va trebui să reporniți serverul pentru a le activa. Fișierul de configurare MySQL ar trebui să fie localizat la /etc/my.cnf sau /etc/mysql/my.cnf. Pentru a găsi fișierul de configurare, introduceți (poate fi necesar să extindeți căutarea în alte directoare rădăcină):

găsiți /etc -name my.cnf
găsiți /usr-name my.cnf

După ce cunoașteți fișierul de configurare, adăugați modificările necesare la secțiune:


….
jurnal de interogare lentă = 1
slow-query-log-file = /var/log/mysql/localhost-slow.log
timp_interogare_lung = 1
jurnal-interogări-nu-utilizare-indexuri

Pentru ca modificările să aibă efect, trebuie să reporniți serverul. Dacă modificările trebuie activate imediat, instalați modificările dinamic:

mysql> SET GLOBAL slow_query_log = "ON";
mysql> SET GLOBAL slow_query_log_file = "/var/log/mysql/localhost-slow.log";
mysql> SET GLOBAL log_queries_not_using_indexes = "ON";
mysql> SET SESSION long_query_time = 1;
mysql> SET SESSION min_examined_row_limit = 100;

Pentru a verifica semnificația modificărilor:

mysql> AFIȘAȚI VARIABILELE GLOBALE CA „Slow_query_log”;
mysql> AFIȘAȚI VARIABILELE DE SESIUNE CA „long_query_time”;

Unul dintre dezavantajele schimbărilor dinamice ale MySQL este că modificările vor fi irosite atunci când serverul este repornit. Prin urmare, toate modificările importante care trebuie salvate trebuie adăugate la fișier.

Generarea de energie pentru profilare

Acum știți cum să configurați jurnalele de cereri mari. Încercați să creați o solicitare de profil.

Notă: Ghidul de aici a fost scris pe o instanță MySQL care rulează fără jurnalele personalizate de interogări complete. Aceste intrări de test pot fi salvate prin interfata grafica sau Linie de comanda MySQL.

Când monitorizați jurnalul total de interogări, este important să deschideți două ferestre de terminal: una pentru supraalimentarea instrucțiunilor MySQL și cealaltă pentru vizualizarea jurnalului de interogări.

Conectați-vă la serverul MySQL folosind o consolă suplimentară ca utilizator cu privilegii SUPER ADMIN. Pentru a începe să creați o bază de date de testare și un tabel, adăugați-i date fictive și adăugați un jurnal de interogări suplimentare.

Notă: În mod ideal, această abordare ar fi mai bine plasată la mijloc fără alte adăugiri, cum ar fi utilizarea MySQL pentru a elimina caracteristica jurnalului de interogări.

$> mysql -u -p
mysql> CREATE DATABASE profile_sampling;

mysql> USE profile_sampling;


mysql> CREATE TABLE utilizatori (id TINYINT PRIMARY KEY AUTO_INCREMENT, nume VARCHAR(255));


mysql> INSERT INTO users (nume) VALUES ("Walter"),("Skyler"),("Jesse"),("Hank"),("Walter Jr.", ("Marie"),("Saul") "), ("Gustavo"), ("Hector"), ("Mike");


mysql> SET GLOBAL slow_query_log = 1;


mysql> SET GLOBAL slow_query_log_file = "/var/log/mysql/localhost-slow.log";


mysql> SET GLOBAL log_queries_not_using_indexes = 1;


mysql> SET long_query_time = 10;


mysql> SET min_examined_row_limit = 0;

Acum aveți o bază de date de testare și un tabel cu o cantitate mică de date. Jurnalul celor mai recente interogări a fost închis. Am stabilit brusc o oră mare pentru procesarea interogării și am activat verificarea unui număr de rânduri. Pentru a vedea sigla, introduceți:

cd /var/log/mysql
ls -l

Deocamdată, părintele nu este de vină pentru jurnalul de interogări complete, fragmente Narazi nu erau băuturi. Deoarece un astfel de jurnal există deja, aceasta înseamnă că baza de date a acumulat deja interogări mari de când ați activat suportul pentru jurnalul de interogări mari. Acest lucru vă poate strica rezultatele fundului. Accesați fila MySQL și rulați:

mysql> USE profile_sampling;
mysql> SELECT * FROM utilizatori WHERE id = 1;

Viconany extrage pur și simplu datele și indexul vikorista al primei chei din tabel. Acesta va fi completat cu indexul suedez și vikorista, astfel încât băuturile mari nu vor fi înregistrate. Reveniți la director și redeschideți astfel încât jurnalul de interogări să nu fie creat. Acum mergeți la fereastra MySQL și rulați:

mysql>

A cărui intrare nu are index. Acum fișierul /var/log/mysql/localhost-slow.log va avea ceva de genul acesta:

# Ora: 140322 13:54:58

utilizați profile_sampling;
SET timestamp=1395521698;

Un alt fund. Măriți numărul minim de rânduri pentru analiză și găsiți următoarea interogare:

mysql> SET min_examined_row_limit = 100;
mysql> SELECT * FROM utilizatori WHERE nume = "Walter";

Datele nu vor fi adăugate la fascicul, fragmentele în timpul spălării au fost analizate în mai puțin de 100 de rânduri.

Notă: Dacă datele nu au fost adăugate la fascicul, este necesar să se verifice numărul de factori. Mai întâi, verificați drepturile directorului în care este creat fasciculul. E vina ta că aparțineți grupului mysqld și mama lui chmod 755. Apoi verificați că nu există alte setări pe server care să vă reseteze parametrii. Ștergeți setările pentru a elimina toate modificările din fișierul de configurare și reporniți serverul. De asemenea, puteți seta dinamic valorile globale la valorile lor implicite. Dacă faceți modificări dinamic, deconectați-vă și accesați MySQL pentru a actualiza setările.

Analiza datelor de profilare

Să ne uităm la următoarele date:

# Ora: 140322 13:54:58
#Utilizator@Gazdă: root@localhost
# Query_time: 0.000303 Lock_time: 0.000090 Rows_sent: 1 Rows_examined: 10
utilizați profile_sampling;
SET timestamp=1395521698;
SELECT * FROM utilizatori WHERE nume = "Jesse";

Această intrare arată:

  • O să cer o oră
  • Cine te-a trimis
  • Iac spălat mult timp
  • Dovjin
  • Câte rânduri au fost rotite
  • Câte rânduri au fost analizate

Acest lucru este regretabil, deoarece orice băutură care distruge beneficiile vitale ale productivității este irosită. Acest lucru permite dezvoltatorului sau administratorului să urmărească rapid cererile care nu funcționează. În plus, aceste date de profilare vă vor ajuta să identificați condițiile care reduc productivitatea programului.

Wikoristanny mysqldumpslow

Profilarea poate include suplimente bazate pe baze de date pentru a asigura un flux fluid al datelor.

Într-o lume în care dimensiunea jurnalului este în creștere, este important să sortați toate datele, iar intrările problematice sunt ușor de pierdut în ea. MySQL introduce instrumentul mysqldumpslow, care ajută la rezolvarea acestor probleme prin localizarea secțiunii jurnal de interogări. Fișierul binar este legat la MySQL (Linux), așa că puteți rula pur și simplu comanda:

mysqldumpslow -t 5 -s la /var/log/mysql/localhost-slow.log

Pentru a personaliza ieșirea, comanda poate accepta diverși parametri. În aplicația selectată sunt afișate primele 5 interogări, sortate după ora medie a interogării. Astfel de rânduri sunt mai lizibile și sunt, de asemenea, grupate.

Număr: 2 Timp=68,34s (136s) Blocare=0,00s (0s) Rânduri=39892974,5 (79785949), root@localhost
SELECTAȚI PL.pl_title, P.page_title
DE LA pagina P
INNER JOIN link-uri de pagină PL
ON PL.pl_namespace = P.page_namespace
UNDE P.page_namespace = N

Sunt afișate următoarele date:

  • Contele: de câte ori va bea după ce s-a scufundat lângă grindă?
  • Timp: ora mijlocie și cea finală vor fi spălate (la brațe).
  • Blocare: ora în care masa a fost încuiată.
  • Rânduri: numărul de rânduri rotite.

Comanda include valori numerice și seriale, totuși, declarațiile WHERE din minți diferite sunt tratate ca și cum ar fi aceleași. Instrumentul mysqldumpslow înțelege necesitatea de a revizui în mod continuu jurnalul de interogări majore, permițând astfel verificări automate regulate. Opțiunile de comandă mysqldumpslow vă permit să derulați expresiile pliate.

Defalcarea băuturilor

Un alt instrument de profilare, despre un fel de urmă de memorie, este un instrument de pliere secvențe. Vă permite să identificați interogări problematice dintr-un număr mare de interogări și să le executați în MySQL. Va trebui să vă închideți profilul pentru moment, apoi faceți clic pe:

mysql> SET SESSION profiling = 1;
mysql> USE profile_sampling;
mysql> SELECT * FROM utilizatorii WHERE nume = "Jesse";
mysql> AFIȚI PROFILE;

Odată ce profilarea este activată, SHOW PROFILES va afișa tabelul care asociază Query_ID cu virusul SQL. Găsiți Query_ID care se potrivește cu interogarea în curs de desfășurare și executați următoarea interogare (înlocuiți # cu Query_ID):

mysql> SELECT * FROM INFORMATION_SCHEMA.PROFILING WHERE QUERY_ID=#;

Comandă pentru a roti masa:

SECV STAT DURATĂ
1 pornire 0.000046
2 verificarea permisiunilor 0.000005
3 deschiderea meselor 0.000036

STATE – durata procesului și DURATION – ora necesară pentru finalizarea procesului în secunde. Nici măcar nu e mai bine unealtă maro, dar puteți ajuta și să determinați cât de mult din Vikonannya cere cea mai mare dificultate.

Notă: Acest instrument nu trebuie utilizat în mijlocul producției.

Productivitatea jurnalului de interogări lungi

Mi-am pierdut capacitatea de a lucra, deoarece jurnalul de mai multe băuturi diminuează productivitatea. Este sigur să lansați un jurnal cu toate interogările în mijlocul câmpului; Nici CPU, nici I/O nu sunt de vină pentru daune. Tim nu mai puțin, trebuie să aveți o strategie de monitorizare a dimensiunii jurnalului, astfel încât jurnalul să nu devină prea mare pentru Sistemul de fișiere. În plus, când porniți jurnalul de interogări lungi, setați valoarea long_query_time la 1 sau mai mare în mijlocul urmăririi.

Visnovok

Un jurnal de interogări complete vă poate ajuta să identificați interogările problematice și să evaluați productivitatea generală a interogărilor. În acest caz, dezvoltatorul poate elimina rapoarte despre modul în care programul configurează interogările MySQL. Instrumentul mysqldumpslow vă permite să înregistrați interogări mari și să le aruncați cu ușurință în procesul de extracție. Odată ce ați identificat interogările problematice, puteți optimiza procesarea interogărilor pentru a îmbunătăți productivitatea.

Etichete:

Concept

Jurnalele de server (fișiere jurnal, jurnal de server)- Fișierele care sunt salvate pe server pentru răzbunare informatii despre sistem servere și, de asemenea, înregistrează toate datele posibile despre livrarea resursei web.

Jurnalele Vikor sunt înregistrate de administratorii de sistem pentru a analiza traficanțiiînvățarea tiparelor de comportament ale grupurilor de cântări de koristuvachs, precum și Informatii diverse despre acestea, cum ar fi: browser, adrese IP, date despre locația geografică a clientului și multe altele. Prin analiză, puteți afla despre accesul neautorizat la site, sau mai exact, aflați cine este responsabil pentru crearea, și transferați date despre la acest tipîn organele genitale.

Datele din fișierul jurnal, în forma sa cea mai pură, nu vor fi rezonabile pentru proprietarii obișnuiți de afaceri, ceea ce înseamnă că setul de caractere într-o ordine nerezonabilă nu va fi de folos nimănui. Ale pentru administratorii de sistemși cititoare web, cu text complet lizibil și complet cu informații utile.


Secvenţă

Pentru fiecare client care contactează resursa web, vă rugăm să întrebați cât mai curând posibil și vom vorbi despre secvență.

1. Voi nota paginile. Când introduceți adresa în rândul browserului sau când faceți clic pe un mesaj web activ, de exemplu, din pagina de căutare, browserul efectuează căutarea și se conectează la serverul pe care se află pagina, apoi o solicită. Când se întâmplă acest lucru, transmite următoarele informații către server:
- adresele IP ale computerului client care accesează site-ul (dacă aveți un server proxy, adresele IP ale proxy-ului dvs.);
- adresele site-ului de Internet solicitate de client (adrese IP);
- ora exacta data la care a fost notat;
- date despre locația reală a clientului (dacă se folosește serverul proxy, atunci adresa proxy reală);
- informatii despre browserul utilizat de client (nume, versiune etc.);
- Date despre paginile web de pe care clientul a transferat.

2. Transfer de date de solicitat. Există un transfer de date (site web, fișiere, cookie-uri etc.) de la server la computerul clientului.

3. Scrieți în jurnalul serverului. După toate, se face o înregistrare în jurnal, în care sunt indicate toate datele care au apărut în ultimii doi pași. Toate informațiile sunt furnizate în primul paragraf, precum și informații despre transferul de date.

Cum să te minunezi de jurnalele serverului

Fișierele jurnal care sunt salvate în fișier acces.log indiferent de tipul de server web pe care îl utilizați (Apache, Nginx, server proxy squid etc.) Acest fișierє document text, se înregistrează câte un animal pe fiecare rând. Formate de înregistrare în acces.log Este bogat, dar cel mai popular este combinat, în care intrarea are următorul aspect și secvență:

Cod: %h %l %u %t \"%r\" %>s %b \"%(Referer)i\" \"%(User-Agent)i\"
De:

%h- gazda/adresele IP pentru care se face cererea;
%t- ora este scrisă pe server și fusul orar al serverului;
%r- versiune, în loc de tip;
%s- codul va deveni HTTP;
%b- numarul de octeti dati de server;
%(Referer)- URL-dzherelo a întrebat;
%(Agent utilizator)- Antet HTTP cu informații despre cerere (add-on client, limbă);
%(Gazdă)- Sunt o gazdă virtuală, unde mă voi duce?

Când ați terminat, acest rând va arăta cam așa:

127.0.0.1 - - "GET /index.php HTTP/1..0 (compatibil; MSIE 7.0; Windows NT 5.1)"

Citirea manuală a jurnalelor a necesitat timp și energie. Prin urmare, experții web au aflat că folosesc un program software special numit „Log File Analyzers”. Ei analizează toate datele pentru a îngreuna citirea oamenilor și pentru a găsi date structurate. Acestea sunt programele: Analogic, WebAnalyzer, Webalizer, Awstats, Webtrends etc. Tipuri de special securitatea software-ului dosit mult, printre ele este ca programe cu plată, deci și fără somn. De aceea cânt că îți cunoști pielea până la suflet.

Unde găsiți jurnalele site-ului

Dacă aveți găzduire primară, atunci, mai presus de toate, va trebui să scrieți hoster-ului și să-i cereți jurnalele. Deci, dacă trebuie să faceți acest lucru des, le puteți solicita prin intermediul panoului hoster. Diferiți hosteri o fac diferit. De exemplu, pentru a solicita de la hosterul dvs., tot ce trebuie să faceți este să dați clic pe Pagina principală panouri:


Dacă aveți acces la folderele de sistem server, atunci puteți cunoaște jurnalele din spatele adresei /etc/httpd/logs/access_logîn 99 de cazuri din 100.

Pardon log error.log

Error.log- un fișier care păstrează și jurnalele. Din păcate, nu trișorii, ci mila care a apărut pe server. Cum am căzut acces.log, un rând de piele la fișier - arată pentru o tăietură. Evidența este păstrată cu informații precum: data și ora exactă a grevei, adresele IP ale cui a primit greva, tipul de grevă și motivul grevei.

Visnovok

Jurnalele sunt un instrument puternic și informativ care trebuie utilizat. Dar în vremea noastră vor fi înlocuite cu instrumente precum Yandex.Metrica, Google AnalyticsȘi așa mai departe, asta ne va ușura viața. Cu toate acestea, dacă intenționați să vă dezvoltați, să creșteți și să învățați lucruri noi, vă recomand să vă familiarizați mai mult cu acest subiect.

Jurnalele sunt primul și cel mai simplu instrument pentru indicarea stării sistemului și identificarea erorilor. Principalele jurnale pentru MySQL sunt:

  • Jurnal de erori— un jurnal standard al cererilor care sunt colectate în timpul funcționării serverului (inclusiv pornirea și oprirea);
  • Jurnal binar- jurnalul tuturor comenzilor de modificare a bazei de date, necesare pentru replicare și backup;
  • Jurnal general de interogări- Jurnalul principal al cererilor;
  • Jurnal de interogări lent- Liga băuturilor complete.

Jurnal de grațiere

Acest jurnal va conține toate avertismentele care au apărut în timpul funcționării serverului, inclusiv erorile critice, precum și erorile, pornirea serverului și avansurile (avertismente). Acest lucru este necesar dacă există o defecțiune a sistemului. În scopuri promoționale, toate mesajele sunt trimise în consolă (stderr), puteți scrie și mesaje în syslog (pentru instrucțiuni Debian) sau în următorul fișier jurnal:

Log_error=/var/log/mysql/mysql_error.log

# Erorile vor fi scrise în mysql_error.log

Este recomandat ca această revistă să fie extinsă pentru a permite rezultate mai rapide. Și pentru a clarifica ce înseamnă această eroare, MySQL are utilitarul perror:

Shell> perror 13 64 Cod de eroare a sistemului de operare 13: Codul de eroare a sistemului de operare Vikoristannya degradat 64: Mașina nu este în rețea

# Explică semnificația codurilor de grațiere

Jurnal binar (sau dublu).

U jurnal binar Toate comenzile de modificare a bazei de date necesare pentru replicare și actualizare sunt înregistrate.

Porniți-l astfel:

Log_bin = /var/log/mysql/mysql-bin.log expire_logs_days = 5 max_binlog_size = 500M

# Indică creșterea, termenul vieții dimensiune maximă fişier

Vă rugăm să rețineți că, dacă nu intenționați să scalați sistemul și să implementați rezistența la vizualizări, atunci este mai bine să nu activați jurnalul binar. Risipește resurse și reduce productivitatea sistemului.

Înregistrați cererile

Acest jurnal conține toate înregistrările SQL și informații despre conexiunile client. Poate fi util pentru analiza și optimizarea indexului, precum și pentru identificarea interogărilor eronate:

General_log_file = /var/log/mysql/mysql.log general_log = 1

# Activează jurnalul și indică retușarea fișierelor

Acest lucru poate fi, de asemenea, activat/dezactivat în timp ce serverul MySQL rulează:

SET GLOBAL general_log = "ON"; SET GLOBAL general_log = "OFF";

# Pentru a îngheța serverul, nu este necesar să reporniți serverul

Jurnalul interogărilor complete

Revista este utilă pentru identificarea interogărilor utile și ineficiente. Citiți raportul din acest articol.

Revizuirea jurnalelor

Pentru a vedea jurnalele pe Debian (Ubuntu), trebuie să vă conectați:

# Jurnalul cererilor coada -f /var/log/syslog # Jurnalul cererilor coada -f /var/log/mysql/mysql.log # Jurnalul de interogări complete coada -f /var/log/mysql/mysql-slow.log

# Dacă jurnalele nu sunt specificate, acestea se află în /var/lib/mysql

Rotirea buștenilor

Nu uitați să comprimați (arhivați, rotiți) fișierele jurnal astfel încât acestea să ocupe mai puțin spațiu pe server. De ce să folosiți acest utilitar? logrotate fișierul de configurare editat /etc/logrotate.d/mysql-server:

# - Am pus totul într-un singur bloc și am adăugat sharedscripts, astfel încât mysql să primească # flush-logs"d o singură dată. # Altfel, jurnalele binare ar crește automat de n ori în fiecare zi. # - Jurnalul de erori este învechit, mesajele merg în syslog acum./var/log/mysql.log /var/log/mysql/mysql.log /var/log/mysql/mysql-slow.log( rotiți zilnic 7 lipsă creați 640 mysql adm comprimați scripturi partajate postrotate test -x /usr/bin/mysqladmin || ieșire 0 # Dacă acest lucru eșuează, verificați debian.conf! MYADMIN="/usr/bin/mysqladmin --defaults-file=/etc/mysql/debian.cnf" dacă [ -z "`$MYADMIN ping 2>/dev/null`" ]; apoi # Chiar nu lipsește utilizatorul mysqld sau mai degrabă lipsește debian-sys-maint? # Dacă acest lucru se întâmplă și nu este o eroare, vă rugăm să raportați o eroare. #if ps cax | grep -q mysqld; apoi if killall -q -s0 -umysql mysqld; apoi ieșiți din 1 fi altfel $MYADMIN flush-logs fi endscript )

# Comprimă și arhivează jurnalele necesare, curăță fișierele

Jurnal DDL

MySQL păstrează, de asemenea, un jurnal și descrie datele. Datele sunt colectate din operațiuni de tip DROP_TABLE și ALTER_TABLE. Jurnalul este înregistrat pentru a se actualiza după eșecurile care au apărut în timpul finalizării unor astfel de operațiuni. DDL Log este un fișier binar, care nu este destinat citirii de către străini, așa că nu îl modificați sau ștergeți.

Cel mai avansat

Verificați întotdeauna jurnalul de erori, verificați jurnalul de interogări pentru a verifica conexiunea programelor cu baza de date, verificați interogările și funcționează. Jurnalul tuturor interogărilor este util pentru optimizarea muncii MySQL.

Profilarea interogărilor în Mysql opriți-vă pentru a evalua productivitatea programului dvs. Când dezvoltați completări medii și mari, veți fi adus la dreapta cu sute de interogări în diviziile din spatele codului dvs., pe măsură ce fiecare secundă se termină. Fără tehnologia de profilare a interogărilor, poate fi foarte dificil să știi ce cauzează suferința software-ului programului tău.

Ce este jurnalul de interogări MySQL?

Jurnalul de interogări majore MySQL - un jurnal care indică interogări majore și potențial problematice. MySQL este proiectat să suporte acest tip de funcționalitate, dar nu merită. Pentru ajutor suplimentar în configurarea serverelor de cântări, putem comanda cum să ne cereți să tskat. Cel mai adesea, trebuie să punem întrebări despre cum să extragem o melodie timp de multe ore în căutarea dvs. sau întrebări despre cum să procesăm incorect indexurile.

Ajustarea profilurilor importante

Principalele modificări pentru configurarea jurnalelor de interogări:

Slow_query_log G slow_query_log_file G long_query_time G/S log_queries_not_using_indexes G min_examined_row_limit G/S

Respect: G - schimbări globale, S - modificări de sistem

  • slow_query_log - valoare booleană care include jurnalul
  • slow_query_log_file – calea absolută către fișierul jurnal. Catalog Vlasnik, buti koristuvach mysqld, precum și directorul este responsabil pentru acordarea permisiunii corecte de citire și scriere. Cel mai adesea demonul mysql operează sub numele clientului mysql.

Pentru a verifica, introduceți următoarele comenzi:

Ps-ef | grep bin/mysqld cut -d" "-f1

Următoarele comenzi vă vor oferi numele serverului cu fire și ale serverului mysqld. Exemplu de configurare a directorului /var/log/mysql:

Cd /var/log sudo mkdir mysql sudo chmod 755 mysql sudo chown mysql:mysql mysql

  • long_query_time – oră și secunde pentru a verifica detaliile interogării. De exemplu, cu o valoare de 5 skin-uri, durata va fi înregistrată în jurnal pentru mai mult de 5 secunde.
  • log_queries_not_using_indexes - Valoare booleană care permite salvarea interogărilor fără utilizarea indecșilor. Astfel de întrebări sunt și mai importante în timpul analizei.
  • min_examined_row_limit – specifică valorile minime pentru numărul de rânduri de date pentru analiză. O valoare de 1000 ignoră intrările care rotesc mai puțin de 1000 de rânduri de valoare.

Puteți seta aceste modificări în fișierul de configurare MySQL în mod dinamic prin GUI MySQL sau linia de comandă MySQL. Dacă sunt specificate modificări în fișierul de configurare, serverul le va instala la pornirea inițială. Asigurați-vă că acest fișier se află la /etc, /usr, /etc/my.cnf sau /etc/mysql/my.cnf. Axa comenzii este de a căuta fișierul de configurare (puteți extinde căutarea și în alte directoare rădăcină):

Găsiți /etc-name my.cnf find/usr-name my.cnf

După ce găsiți fișierul, adăugați modificările necesare în secțiunea:

; ... slow-query-log = 1 slow-query-log-file = /var/log/mysql/localhost-slow.log long_query_time = 1 log-queries-not-using-indexes ; nu este nevoie de sens aici

Modificările ar trebui făcute numai la pornirea MySQL mai întâi, dacă trebuie să modificați dinamic parametrii, utilizați alte metode pentru a seta modificări:

Mysql> SET GLOBAL slow_query_log = "ON"; mysql> SET GLOBAL slow_query_log_file = "/var/log/mysql/localhost-slow.log"; mysql> SET GLOBAL log_queries_not_using_indexes = "ON"; mysql> SET SESSION long_query_time = 1; mysql> SET SESSION min_examined_row_limit = 100;

Puteți verifica semnificațiile modificărilor astfel:

Mysql> AFIȘAȚI VARIABILELE GLOBALE CA „Slow_query_log”; mysql> AFIȘAȚI VARIABILELE DE SESIUNE CA „long_query_time”;

Principalul dezavantaj al unei instalări dinamice este că costul va fi cheltuit în timpul pornirii sistemului. Se recomandă indicarea parametri importanti la MySQL Confidence.

Notatka: Sintaxa pentru setarea dinamică a parametrilor prin comanda SET și cu fișiere de configurare diferite este ușor diferită, de exemplu slow_query_log/slow-query-log. În documentația oficială DBMS veți găsi descriere povniy sintaxă. Formatul Option-File este folosit pentru fișierul de configurare, System Variable Name - numele celor modificabile la setarea dinamică a valorii.

Generarea datelor pentru profilare

Ne-am uitat la punctele principale ale instruirii și profilării, acum să întrebăm ce să ne spunem. Acest fund este vikorystuvavsya pe neglijat Servere MySQL fara nici o ajustări în față Buturuga. Aplicațiile de interogare pot fi lansate prin GUI MySQL și comenzile DBMS. Când monitorizați jurnalul de interogări mari, deseori deschideți două ferestre între conexiuni: una pentru a rula interogări, cealaltă pentru a revizui jurnalul.

$> mysql -u -p mysql> CREATE DATABASE profile_sampling; mysql> USE profile_sampling; mysql> CREATE TABLE utilizatori (id TINYINT PRIMARY KEY AUTO_INCREMENT, nume VARCHAR(255)); mysql> INSERT INTO users (nume) VALUES ("Walter"),("Skyler"),("Jesse"),("Hank"),("Walter Jr.", ("Marie"),("Saul") "), ("Gustavo"), ("Hector"), ("Mike"); mysql> SET GLOBAL slow_query_log = 1; mysql> SET GLOBAL slow_query_log_file = "/var/log/mysql/localhost-slow.log"; mysql> SET GLOBAL log_queries_not_using_indexes = 1; mysql> SET long_query_time = 10; mysql> SET min_examined_row_limit = 0;

Acum avem o bază de date cu date de testare. Am început profilarea, iar imediat după ora de pregătire, am instalat special un număr de rânduri pentru cele mici. Pentru a vedea jurnalul, utilizați rapid comanda:

Cd /var/log/mysql ls -l

În teorie, fișierul jurnal poate fi în continuare șters, deoarece am făcut câteva interogări la baza de date. Acest lucru este adevărat, ceea ce înseamnă că profilul a fost ajustat mai devreme, altfel poate interfera cu rezultatele aplicației. Vikonite în consolă:

Mysql> USE profile_sampling; mysql> SELECT * FROM utilizatori WHERE id = 1;

Interogarea noastră este indexul cheii primare din tabel. După ce a întrebat chiar și repede din indicele vicoristic, el nu este de vină că a apărut în viță de vie. Vă rugăm să rețineți că fișierul jurnal nu trebuie șters.

Acum urmează asta:

Mysql> SELECT * FROM utilizatorii WHERE nume = "Jesse";

Nu am vikorizat indici aici. Acum putem bea asta din viță:

Sudo cat /var/log/mysql/localhost-slow.log # Time: 140322 13:54:58 # User@Host: root @ localhost # Query_time: 0.000303 Lock_time: 0.000090 Rows_sent: 1 Rows_sami SET timestamp;521699 SELECT * FROM utilizatori WHERE nume = "Jesse";

Să aruncăm o altă privire la fund. Ridicați bara pentru un număr de rânduri din rezultat și selectați următoarea intrare:

Mysql> SET min_examined_row_limit = 100; mysql> SELECT * FROM utilizatori WHERE nume = "Walter";

Cererea nu apare în viță, fragmentele nu au mutat 100 de rânduri în linia de aprovizionare.

Notatka: Dacă datele nu sunt reflectate în viță de vie, atunci trebuie luați în considerare mai întâi astfel de factori. În primul rând – drepturi la directorul în care este salvat fișierul jurnal. Grupul și clientul sunt responsabili pentru confirmarea clientului mysqld, drepturile pot fi chmod 755. Un alt profil posibil a fost stabilit mai devreme. Ștergeți toate celelalte valori de modificare a profilului din fișierul de configurare și reporniți serverul sau instalați modificările dinamic. Dacă ați folosit metoda dinamică, veți ieși și vă veți conecta din nou în consola MySQL.

Analiza datelor de profilare a băuturilor

Să aruncăm o privire la ghidajul pentru fund:

# Time: 140322 13:54:58 # User@Host: root @ localhost # Query_time: 0.000303 Lock_time: 0.000090 Rows_sent: 1 Rows_examined: 10 use profile_sampling; SET timestamp=1395521698; SELECT * FROM utilizatori WHERE nume = "Jesse";

Iată-mi bachimo:

  • O oră, dacă pornește, se va porni
  • Koristuvach, ce a spălat vikonav
  • E timpul să începi să lucrezi
  • Trivalismul blocării
  • Numărul de rânduri selectate
  • Numărul de rânduri analizate

Aceste date sunt foarte clare, așa că, cu ajutorul lor, putem afla și identifica motivul actualizării sistemului. De asemenea, un dezvoltator sau un administrator MySQL poate fi capabil să remedieze intrările problematice în viitor și aș dori să știu că sunt multe de știut despre ele, inclusiv codul de program al programelor. Cu profil trival, este posibil să curățați mașina de spălat la viteză mică.

Wikoristanny mysqldumpslow

Jurnalul înregistrează continuu date, de regulă, există mult mai mult de scris și nimic de citit. La marime mare citirea lui devine problematică. Depozitul MySQL include instrumentul mysqldumpslow, care ajută la păstrarea integrității jurnalului. Programul în sine este scris în MySQL (on sisteme Linux). Pentru a face acest lucru, introduceți comanda necesară și transmiteți-o în fișierul jurnal:

Sudo mysqldumpslow -t 5 -s la /var/log/mysql/localhost-slow.log

Există o serie de parametri care vă ajută să personalizați rezultatul comenzii. În exemplul de mai jos, avem cinci interogări rămase, sortate după media trivalist. Ca urmare, citirea fasciculului devine mult mai ușoară. (simbolul a fost schimbat pentru a arăta valorile reale ale viței de vie):

Count: 2 Time=68.34s (136s) Lock=0.00s (0s) Rows=39892974.5 (79785949), root@localhost SELECT PL.pl_title, P.page_title FROM pagina P INNER JOIN pagelinks PL WHERE P.page_namespace = N .

Scho mi bachimo:

  • Număr - numărul de intrări înregistrate în jurnal
  • Timp - ora mijlocie și cea finală vor fi spălate
  • Blocare – oră de blocare a mesei
  • Rânduri - Numărul de rânduri selectate

Comanda activează datele numerice și seriale pentru a introduce clauza WHERE în același mod. Un astfel de instrument nu va putea niciodată să examineze în mod constant fasciculul. Cu un număr mare de parametri de comandă, îi puteți sorta după cum doriți. Există, de asemenea, dezvoltări ale dezvoltatorilor terți cu funcționalități similare, de exemplu pt-query-digest.

Defalcarea băuturilor

Acum ar trebui să vă îndreptați atenția către un alt instrument care vă permite să descompuneți complexele. Cel mai adesea trebuie să îl descărcați din jurnal și apoi să îl rulați direct în consola MySQL. De la început trebuie să vă închideți profilul, apoi vi se va solicita:

Mysql> SET SESSION profiling = 1; mysql> USE profile_sampling; mysql> SELECT * FROM utilizatorii WHERE nume = "Jesse"; mysql> AFIȚI PROFILE;

Odată ce profilul este activat, SHOW PROFILES va afișa un tabel care leagă Query_ID și virusul SQL. Găsiți Query_ID-ul corespunzător și selectați următoarea intrare (înlocuiți # cu Query_ID-ul dvs.):

Mysql> SELECT * FROM INFORMATION_SCHEMA.PROFILING WHERE QUERY_ID=#;

fundul fundului:

SEQ STATE DURATION 1 începând cu 0,000046 2 verificare permisiuni 0,000005 3 deschidere tabele 0,000036

STAT- Voi cere procesul DURATĂ- Valoare palpitantă în secunde. Acest instrument nu este folosit foarte des, dar uneori poate fi foarte murdar din cauza cauzei subiacente a fluidității reduse.

Descrierea detaliata a personalului:

Descrierea detaliată a articolelor:

Notatka: Acest instrument nu funcționează în modul de operare server, cu excepția analizei unor interogări specifice.

Jurnal Swidcode al interogărilor complete

Puterea rămasă - care sunt semnele robotului care profilează codul de viteză al serverului în ansamblu. În modul produs al serverului, puteți utiliza în siguranță acest tip de înregistrare, care poate să nu includă nici CPU, nici I/O. Prote varto crește respectul pentru dimensiunea fișierului jurnal, nu este vina lui că devine prohibitiv de mare. Așa că aș dori să știu că puteți seta valoarea variabilei long_query_time la 1 secundă sau mai mult.

Important: nu utilizați instrumentul de profilare – SET profiling = 1 – pentru a înregistra toate interogările, atunci. modificați general_log în modul produs și când mare navantazhennyakh Nu este recomandat să devii vikorist.

Visnovok

Profilarea băuturilor poate ajuta, de asemenea, la identificarea băuturilor problematice și la evaluarea productivității latente. Dezvoltatorul îl poate folosi și pentru a rula programe MySQL. Instrumentul mysqldumpslow vă ajută să vizualizați și să colectați jurnalele de interogări. Odată ce interogările problematice sunt identificate, nu va mai fi nevoie să le ajustați pentru productivitate maximă.

 

 

Tse tsikavo: