Vai Mysql vaicājumu žurnāls ir jāatspējo? Kas ir “servera žurnāli”, kā skatīt servera žurnālus. Kas ir lēns vaicājumu žurnāls MySQL

MySQL vaicājumu profilēšana ir noderīgs paņēmiens datu bāzes lietojumprogrammu vispārējās veiktspējas analīzei. Izstrādājot vidējas un lielas lietojumprogrammas, parasti tiek izplatīti simtiem vaicājumu lielā kodu bāzē, un datu bāze apstrādā daudzus vaicājumus sekundē. Bez vaicājumu profilēšanas kļūst ļoti grūti noteikt rašanās vietu un cēloņus vājās vietas lietojumprogrammas. Šajā apmācībā ir aprakstītas dažas noderīgas vaicājumu profilēšanas metodes, izmantojot MySQL iebūvētos rīkus.

MySQL lēno vaicājumu žurnāls

MySQL lēno vaicājumu žurnāls (vai lēno vaicājumu žurnāls) ir žurnāls, kurā MySQL sūta lēnus un potenciāli problemātiskus vaicājumus.

Šī funkcija ir iekļauta MySQL, taču pēc noklusējuma tā ir atspējota. MySQL nosaka, kuri vaicājumi ir jāiekļauj šajā žurnālā, izmantojot īpašus mainīgos, kas ļauj profilēt vaicājumu, pamatojoties uz lietojumprogrammas veiktspējas prasībām. Parasti vaicājumi, kuru apstrāde prasa ilgāku laiku, un vaicājumi, kuriem ir nepareizi indeksi, tiek ievadīti šajā žurnālā.

Profilēšanas mainīgie

Pamata servera mainīgie MySQL lēno vaicājumu žurnāla konfigurēšanai ir:

slow_query_log globāls
slow_query_log_file globāls
long_query_time globālā/sesijā
log_queries_not_using_indexes globāli
Min_examined_row_limit globālā/sesijā

slow_query_log – loģisks mainīgais, lai iespējotu vai atspējotu lēno vaicājumu žurnālu.

slow_query_log_file – vaicājuma žurnālfaila absolūtais ceļš. Failu direktorijam ir jāpieder mysqld lietotājam, un tam ir jābūt atbilstošām lasīšanas un rakstīšanas atļaujām. Mysql dēmons, visticamāk, tiks palaists kā mysql, taču, lai pārliecinātos, palaidiet komandu Linux terminālī:

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

Izvade parādīs pašreizējo lietotāju un mysqld lietotāju.

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

  • long_query_time — laiks sekundēs, lai pārbaudītu vaicājuma garumu. Ja vērtība ir 5, tiks reģistrēti visi pieprasījumi, kuru apstrāde ilgst vairāk nekā 5 sekundes.
  • log_queries_not_using_indexes — Būla vērtība, kas nosaka, vai vaicājumi, kas neizmanto indeksus, ir jāreģistrē. Analizējot, šādi vaicājumi ir svarīgi.
  • min_examined_row_limit – nosaka minimālo analizējamo rindu skaitu. Ja vērtība ir 1000, visi vaicājumi, kas parsē mazāk nekā 1000 rindas, tiks ignorēti.

MySQL servera mainīgos var iestatīt MySQL konfigurācijas failā vai dinamiski izmantojot lietotāja interfeiss vai MySQL komandrinda. Ja konfigurācijas failā ir iestatīti mainīgie, tie saglabāsies arī pēc servera restartēšanas, taču, lai tos aktivizētu, serveris ir jārestartē. MySQL konfigurācijas fails parasti atrodas mapē /etc/my.cnf vai /etc/mysql/my.cnf. Lai atrastu konfigurācijas failu, ievadiet (iespējams, jums būs jāpaplašina meklēšana, iekļaujot citus saknes direktorijus):

atrast /etc -name my.cnf
atrast /usr -name my.cnf

Kad esat atradis konfigurācijas failu, pievienojiet sadaļai nepieciešamos mainīgos:


….
lēna vaicājuma žurnāls = 1
slow-query-log-file = /var/log/mysql/localhost-slow.log
long_query_time = 1
log-queries-not-using-indexes

Lai izmaiņas stātos spēkā, jums ir jārestartē serveris. Ja izmaiņas ir jāaktivizē nekavējoties, dinamiski iestatiet mainīgos:

mysql SET GLOBAL slow_query_log = "IESLĒGTS";
mysql> SET GLOBAL slow_query_log_file = "/var/log/mysql/localhost-slow.log";
mysql> SET GLOBAL log_queries_not_using_indexes = "IESLĒGTS";
mysql> IESTATĪT SESIJAS long_query_time = 1;
mysql> IESTATĪT SESIJAS min_examined_row_limit = 100;

Lai pārbaudītu mainīgās vērtības:

mysql> RĀDĪT GLOBĀLOS MAINĪGUS, piemēram, "slow_query_log";
mysql> RĀDĪT SESIJAS MAINĪGUS, piemēram, "long_query_time";

Viens no dinamiski mainīgo MySQL mainīgo trūkumiem ir tas, ka mainīgie tiks zaudēti, kad serveris tiks restartēts. Tāpēc failam jāpievieno visi svarīgie mainīgie, kas jāsaglabā.

Profilēšanas vaicājuma ģenerēšana

Tagad esat iepazinies ar lēno vaicājumu žurnāla iestatījumiem. Mēģiniet ģenerēt vaicājuma datus profilēšanai.

Piezīme: Šeit sniegtais piemērs tika palaists darbinātā MySQL instancē bez konfigurētiem lēniem vaicājumu žurnāliem. Šos testa vaicājumus var palaist, izmantojot GUI vai komandrinda MySQL.

Pārraugot lēno pieprasījumu žurnālu, ir lietderīgi atvērt divus termināļa logus: viens savienojums sūtīšanai MySQL paziņojumi, bet otrais ir paredzēts pieprasījumu žurnāla skatīšanai.

Piesakieties MySQL serverī, izmantojot konsoli kā lietotājs ar SUPER ADMIN privilēģijām. Lai sāktu, izveidojiet testa datu bāzi un tabulu, pievienojiet tai fiktīvus datus un iespējojiet lēnu vaicājumu reģistrēšanu.

Piezīme: ideālā gadījumā šo piemēru vislabāk var palaist vidē, kurā neizmanto citas lietojumprogrammas, kas izmanto MySQL, lai izvairītos no vaicājumu žurnāla pārblīvēšanas.

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

mysql USE profile_sampling;


mysql> CREATE TABLE lietotāji (id TINYINT PRIMARY KEY AUTO_INCREMENT, nosaukums VARCHAR(255));


mysql> INSERT INTO lietotājiem (vārds) VĒRTĪBAS ("Valters"),("Skylers"),("Džese"),("Henks"),("Valters jaunākais",("Marie"),("Sauls" "),("Gustavo"),("Hektors"),("Maiks");


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;

Tagad jums ir testa datu bāze un tabula ar dažiem datiem. Lēna vaicājumu žurnāls ir iespējots. Mēs apzināti iestatījām pieprasījumu apstrādes laiku uz augstu un atspējojām rindu skaita pārbaudi. Lai skatītu žurnālu, ievadiet:

cd /var/log/mysql
ls -l

Pagaidām mapē nevajadzētu būt lēnu pieprasījumu žurnālam, jo Šis brīdis lūgumu nebija. Ja šāds žurnāls jau pastāv, tas nozīmē, ka datu bāze jau ir saskārusies ar lēniem vaicājumiem, kopš iespējojāt lēno vaicājumu žurnāla atbalstu. Tas var izkropļot šī piemēra rezultātus. Atgriezieties cilnē MySQL un palaidiet:

mysql USE profile_sampling;
mysql SELECT * FROM lietotājiem WHERE id = 1;

Izpildītais vaicājums vienkārši izgūst datus un izmanto tabulas pirmās atslēgas indeksu. Šis vaicājums bija ātrs un izmantoja indeksu, tāpēc tas netiek ierakstīts lēno vaicājumu žurnālā. Atgriezieties direktorijā un pārliecinieties, vai nav izveidots vaicājumu žurnāls. Tagad dodieties atpakaļ uz MySQL logu un palaidiet:

mysql>

Šis vaicājums neizmanto indeksu. Tagad kaut kas līdzīgs šim jāparādās žurnālā /var/log/mysql/localhost-slow.log:

# Laiks: 140322 13:54:58

izmantot profile_sampling;
SET timestamp=1395521698;

Vēl viens piemērs. Palieliniet minimālo parsējamo rindu skaitu un nosūtiet šādu pieprasījumu:

mysql> SET min_examined_row_limit = 100;
mysql SELECT * FROM lietotājiem WHERE name = "Walter";

Dati netiks pievienoti žurnālam, jo ​​pieprasījuma laikā tika analizētas mazāk nekā 100 rindas.

Piezīme: ja dati nav pievienoti žurnālam, jums jāpārbauda vairāki faktori. Vispirms pārbaudiet tā direktorija atļaujas, kurā žurnāls ir izveidots. Tam ir jāpieder mysqld lietotājam/grupai, un tai ir jābūt chmod 755 privilēģijām. Pēc tam pārbaudiet, vai serverī nav citi lēnas vaicājuma iestatījumi, kas ignorē jūsu iestatījumus. Atiestatiet noklusējuma iestatījumus, lai noņemtu visus lēno pieprasījumu mainīgos no konfigurācijas faila un restartētu serveri. Varat arī dinamiski iestatīt globālos mainīgos to noklusējuma vērtības. Ja veicat izmaiņas dinamiski, izejiet un atkal piesakieties MySQL, lai atjauninātu iestatījumus.

Vaicājumu profilēšanas datu analīze

Apsveriet šādus datus:

# Laiks: 140322 13:54:58
#User@Host: root@localhost
# Vaicājuma_laiks: 0,000303 Bloķēšanas laiks: 0,000090 Nosūtītās rindas: 1 Pārbaudītās rindas: 10
izmantot profile_sampling;
SET timestamp=1395521698;
SELECT * FROM lietotājiem WHERE vārds = "Džesija";

Šis ieraksts parāda:

  • Vaicājuma izpildes laiks
  • Kas to sūtīja
  • Cik ilgs laiks pagāja, lai apstrādātu pieprasījumu?
  • Garums
  • Cik rindu tika atgrieztas
  • Cik rindu tika parsētas

Tas ir noderīgi, jo jebkurš pieprasījums, kas pārkāpj mainīgajos norādītās veiktspējas prasības, nonāk žurnālā. Tas ļauj izstrādātājam vai administratoram ātri izsekot pieprasījumus, kas nedarbojas. Turklāt vaicājumu profilēšanas dati var palīdzēt noteikt apstākļus, kas izraisa jūsu lietojumprogrammas sliktu darbību.

Izmantojot mysqldumpslow

Profilēšanu var iekļaut uz datu bāzēm balstītās lietojumprogrammās, lai nodrošinātu mērenu datu plūsmu.

Pieaugot žurnāla lielumam, kļūst grūti parsēt visus datus, un problemātiskie vaicājumi tajā var viegli pazust. MySQL piedāvā rīku mysqldumpslow, kas palīdz izvairīties no šīs problēmas, sadalot lēno vaicājumu žurnālu. Binārais fails ir saistīts ar MySQL (operētājsistēmā Linux), tāpēc varat vienkārši palaist komandu:

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

Komanda var pieņemt dažādus parametrus, lai pielāgotu tās izvadi. Iepriekš minētajā piemērā tiks parādīti 5 populārākie pieprasījumi, kas sakārtoti pēc vidējā pieprasījuma laika. Šādas virknes ir lasāmākas un tiek grupētas arī pēc pieprasījuma.

Skaits: 2 Laiks = 68,34 s (136 s) Bloķēts = 0,00 s (0 s) Rindas = 39892974,5 (79785949), root@localhost
ATLASĪT PL.pl_title, P.page_title
NO lapas P
INNER JOIN pagelinks PL
ON PL.pl_namespace = P.page_namespace
WHERE P.page_namespace = N

Izvade parāda šādus datus:

  • Skaits: cik reižu pieprasījums tika reģistrēts.
  • Laiks: vidējais un kopējais pieprasījuma laiks (iekavās).
  • Slēdzene: galda bloķēšanas laiks.
  • Rindas: atgriezto rindu skaits.

Komanda izslēdz skaitliskās un virknes vērtības, tāpēc identiski vaicājumi ar dažādiem WHERE nosacījumiem tiek uzskatīti par vienādiem. Mysqldumpslow rīks novērš nepieciešamību pastāvīgi pārskatīt lēno vaicājumu žurnālu, tā vietā ļaujot veikt regulārus automātiskās pārbaudes. Komandu mysqldumpslow opcijas ļauj palaist sarežģītas izteiksmes.

Pieprasīt sadalījumu

Vēl viens profilēšanas rīks, kas jāpatur prātā, ir kompleksais vaicājumu sadalījuma rīks. Tas ļauj identificēt problemātiskus vaicājumus lēno vaicājumu žurnālā un palaist to MySQL. Vispirms ir jāiespējo profilēšana un pēc tam palaidiet vaicājumu:

mysql> IESTATĪT SESIJAS profilēšanu = 1;
mysql USE profile_sampling;
mysql SELECT * FROM lietotājiem WHERE name = "Jesse";
mysql> RĀDĪT PROFILU;

Kad profilēšana ir iespējota, SHOW PROFILES tiks parādīta tabula, kas saista vaicājuma_ID ar SQL izteiksmi. Atrodiet vaicājuma_ID, kas atbilst izpildītajam vaicājumam, un izpildiet šādu vaicājumu (aizstāt # ar savu Query_ID):

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

Komanda atgriezīs tabulu:

SEQ VALSTS ILGUMS
1 sākot 0.000046
2 atļauju pārbaude 0.000005
3 atvēršanas galdi 0.000036

STATE ir solis vaicājuma izpildes procesā, un DURATION ir laiks, kas nepieciešams, lai šo darbību pabeigtu sekundēs. Tas nav ļoti noderīgs rīks, taču tas var palīdzēt noteikt, kura vaicājuma izpildes daļa izraisa vislielāko latentumu.

Piezīme Piezīme. Šo rīku nedrīkst izmantot ražošanas vidē.

Lēna vaicājumu žurnāla veiktspēja

Atliek tikai noskaidrot, kā lēnais vaicājumu žurnāls ietekmē veiktspēju. Kopumā ir droši palaist lēnus vaicājumu žurnālus ražošanas vidē; Nevajadzētu ietekmēt ne centrālo procesoru, ne I/O. Tomēr jums ir jābūt stratēģijai žurnāla lieluma pārraudzībai, lai nodrošinātu, ka žurnāls nekļūst pārāk liels failu sistēma. Turklāt, palaižot lēnu vaicājumu žurnālu ražošanas vidē, iestatiet long_query_time uz 1 vai lielāku.

Secinājums

Lēns vaicājumu žurnāls var palīdzēt identificēt problemātiskus vaicājumus un novērtēt vispārējo vaicājumu veiktspēju. To darot, izstrādātājs var iegūt detalizētu izpratni par to, kā lietojumprogrammā tiek izpildīti MySQL vaicājumi. Mysqldumpslow rīks ļauj pārvaldīt lēnus vaicājumu žurnālus un viegli iekļaut tos izstrādes procesā. Identificējot problemātiskos vaicājumus, varat optimizēt vaicājumu apstrādi, lai uzlabotu veiktspēju.

Tagi:

Notikumu žurnāli ir pirmais un vienkāršākais rīks sistēmas statusa noteikšanai un kļūdu identificēšanai. MySQL ir četri galvenie žurnāli:

  • Kļūdu žurnāls— standarta kļūdu žurnāls, kas tiek savākts, kamēr serveris darbojas (ieskaitot palaišanu un apturēšanu);
  • Binārais žurnāls— visu datu bāzes modifikācijas komandu žurnāls, kas nepieciešams replikācijai un dublēšanai;
  • Vispārējs vaicājumu žurnāls— galvenais vaicājumu žurnāls;
  • Lēna vaicājumu žurnāls— lēno pieprasījumu žurnāls.

Kļūdu žurnāls

Šajā žurnālā ir visas kļūdas, kas radušās, kamēr serveris darbojās, tostarp kritiskas kļūdas, kā arī servera izslēgšanas, servera palaišanas un brīdinājumi. Šeit jums vajadzētu sākt sistēmas kļūmes gadījumā. Pēc noklusējuma visas kļūdas tiek izvadītas uz konsoli (stderr), jūs varat arī reģistrēt kļūdas syslog (noklusējums Debian) vai atsevišķā žurnāla failā:

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

# Kļūdas tiks ierakstītas vietnē mysql_error.log

Mēs iesakām saglabāt šo žurnālu iespējotu, lai ātri identificētu kļūdas. Un, lai saprastu, ko nozīmē šī vai cita kļūda, MySQL ir kļūdu utilīta:

Shell> perror 13 64 OS kļūdas kods 13: atļauja liegta OS kļūdas kods 64: iekārta nav tīklā

# Izskaidro kļūdu kodu nozīmi

Binārais (aka binārais) žurnāls

Visas datu bāzes modifikācijas komandas tiek ierakstītas binārajā žurnālā, kas ir noderīgas replikācijai un atkopšanai.

Tas ieslēdzas šādi:

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

# Norāda atrašanās vietu, kalpošanas laiku un maksimālais izmērs failu

Lūdzu, ņemiet vērā: ja neplānojat mērogot sistēmu un ieviest kļūdu toleranci, labāk neiespējot bināro žurnālu. Tas ir resursietilpīgs un samazina sistēmas veiktspēju.

Pieprasījumu žurnāls

Šajā žurnālā ir visi saņemtie SQL vaicājumi un informācija par klientu savienojumiem. Var būt noderīga indeksa analīzei un optimizācijai, kā arī kļūdainu vaicājumu identificēšanai:

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

# Ietver žurnālu un norāda faila atrašanās vietu

Varat arī iespējot/atspējot to, kamēr darbojas MySQL serveris:

SET GLOBAL general_log = "IESLĒGTS"; SET GLOBAL general_log = "IZSLĒGTS";

# Lai to izmantotu, serveris nav jārestartē

Lēns pieprasījumu žurnāls

Žurnāls ir noderīgs, lai identificētu lēnus, tas ir, neefektīvus vaicājumus. Vairāk lasiet šajā rakstā.

Žurnālu apskate

Lai skatītu žurnālus Debian (Ubuntu), jums ir jāpalaiž:

# Kļūdu žurnāla aste -f /var/log/syslog # Vaicājuma žurnāla aste -f /var/log/mysql/mysql.log # Reģistrējiet lēnus pieprasījumus tail -f /var/log/mysql/mysql-slow.log

# Ja žurnāli nav norādīti atsevišķi, tie atrodas mapē /var/lib/mysql

Baļķu rotācija

Neaizmirstiet saspiest (arhivēt, pagriezt) žurnālfailus, lai tie aizņemtu mazāk vietas serverī. Lai to izdarītu, izmantojiet utilītu logrotēt rediģējot konfigurācijas failu /etc/logrotate.d/mysql-server:

# - Es visu saliku vienā blokā un pievienoju sharescriptus, lai mysql saņemtu # flush-logs"d tikai vienu reizi. # Citādi binārie žurnāli katru dienu automātiski palielinātos par n reizēm. # Kļūdu žurnāls ir novecojis, ziņojumi tagad tiek pārsūtīti uz syslog./var/log/mysql.log /var/log/mysql/mysql.log /var/log/mysql/mysql-slow.log( katru dienu pagriezt 7 neasingok izveidot 640 mysql adm saspiest sharescripts postrotate test -x /usr/bin/mysqladmin || iziet 0 # Ja tas neizdodas, pārbaudiet debian.conf! MYADMIN="/usr/bin/mysqladmin --defaults-file=/etc/mysql/debian.cnf" if [ -z "`$MYADMIN ping 2>/dev/null`" ]; tad # Vai tiešām nav mysqld vai drīzāk trūkst debian-sys-maint lietotāja? # Ja tā notiek un tā nav kļūda, lūdzu, ziņojiet par kļūdu. #if ps cax | grep -q mysqld; tad ja killall -q -s0 -umysql mysqld; pēc tam izejiet no 1 fi else $MYADMIN flush-logs fi beigu skripts )

# Saspiež un arhivē nepieciešamos žurnālus, notīra failus

DDL žurnāls

MySQL arī uztur datu valodas žurnālu. Tas apkopo datus no tādām darbībām kā DROP_TABLE un ALTER_TABLE. Žurnāls tiek izmantots, lai atgūtu no kļūmēm, kas radušās šādu darbību laikā. DDL žurnāls ir binārs fails, un tas nav paredzēts lietotāja lasīšanai, tāpēc nemodificējiet un neizdzēsiet to.

Svarīgākā

Vienmēr ieslēdziet kļūdu žurnālu, izmantojiet vaicājumu žurnālu, lai pārbaudītu lietojumprogrammas savienojumu ar datu bāzi, pārbaudītu vaicājumus un darbību. Lēnu vaicājumu žurnāls ir noderīgs MySQL veiktspējas optimizēšanai.

Koncepcija

Servera žurnāli (žurnāla faili, servera žurnāls)- serverī saglabātie faili, kas satur servera sistēmas informāciju, kā arī visu iespējamo datu reģistrēšana par tīmekļa resursa apmeklētāju.

Sistēmas administratori izmanto žurnālus, lai analizētu apmeklētājus, pētot noteiktu lietotāju grupu uzvedības modeļus, kā arī iegūt dažādu informāciju par tām, piemēram: izmantoto pārlūkprogrammu, IP adresi, datus par klienta ģeogrāfisko atrašanās vietu un daudz ko citu. Papildus analīzei šādā veidā jūs varat uzzināt par nesankcionētu piekļuvi vietnei, precīzāk noskaidrot, kurš to ir izdarījis, un pārsūtīt datus par šo lietu attiecīgajām iestādēm.

Dati žurnālfailā tīrā veidā nebūs saprotami parastajiem lietotājiem, kuri tajā visā redzēs tikai rakstzīmju kopu nesaprotamā secībā. Bet priekš sistēmas administratori un tīmekļa izstrādātājiem, šis ir ļoti lasāms teksts un diezgan noderīga informācija.


Notikumu secība

Katru reizi, kad klients piekļūst tīmekļa resursam, vienlaikus tiek aktivizēti vairāki notikumi, par kuru secību mēs runāsim.

1. Lapas pieprasījuma noformēšana. Kad pārlūkprogrammas rindā ievadāt adresi vai sekojat aktīvai tīmekļa saitei, piemēram, no meklētājprogrammas rezultātu lapas, pārlūkprogramma veic meklēšanu un izveido savienojumu ar serveri, kurā lapa atrodas, un veic to pieprasījumu. Tajā pašā laikā tas pārsūta uz serveri šādu informāciju:
- klienta datora IP adrese, kas pieprasa lapu (ja izmantojat starpniekserveri, jūsu starpniekservera IP adrese);
- lietotāja pieprasītās interneta lapas adrese (IP adrese);
- precīzs pieprasījuma iesniegšanas laiks un datums;
- dati par klienta faktisko atrašanās vietu (ja tiek izmantots starpniekserveris, tad faktiskā starpniekservera adrese);
- informācija par klienta izmantoto pārlūkprogrammu (nosaukums, versija utt.);
- dati par tīmekļa lapu, no kuras klients pārsūtīja.

2. Pieprasīto datu pārsūtīšana. Pieprasītie dati (tīmekļa lapa, faili, sīkfaili utt.) tiek pārsūtīti no servera uz lietotāja datoru.

3. Rakstiet servera žurnālā. Pēc visa notiek žurnāla ieraksts, kas norāda visus datus, kas parādījās iepriekšējos divos notikumos. Tā ir visa pirmajā rindkopā nosūtītā informācija, kā arī informācija par pārsūtītajiem datiem.

Kā apskatīt servera žurnālus

Žurnāla faili tiek saglabāti failā access.log neatkarīgi no tā, kāda veida tīmekļa serveri izmantojat (Apache, Nginx, squid starpniekserveri utt.) Šis fails ir teksta dokuments, kura katrā rindā ir uzrakstīta viena apelācija. Ierakstīšanas formāti access.log diezgan daudz, bet populārākais ir apvienots, kurā ierakstam ir šāda forma un secība:

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

%h- resursdatora/IP adrese, no kuras tika veikts pieprasījums;
%t- pieprasījuma laiks serverim un servera laika josla;
%r- pieprasījuma versija, saturs un veids;
%s- HTTP statusa kods;
%b- servera nosūtīto baitu skaits;
%(Atsaucējs)- pieprasījuma URL avots;
%(Lietotāja aģents)- HTTP galvene ar informāciju par pieprasījumu (klienta lietojumprogramma, valoda utt.);
%(saimnieks)- tā virtuālā resursdatora nosaukums, kuram tiek piekļūts.

Kad šī rinda ir pabeigta, tā izskatās apmēram šādi:

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

Manuāla žurnālu lasīšana prasīs diezgan daudz laika un pūļu. Tāpēc pieredzējuši tīmekļa pārziņi izmanto īpašu programmatūru, ko sauc par žurnāla failu analizatoriem. Viņi analizē visus datus, kurus cilvēkiem ir diezgan grūti nolasīt, un veido strukturētus datus. Tās ir tādas programmas kā: Analogais, WebAnalizer, Webalizer, Awstats, Webtrends utt. Speciālo veidi programmatūra diezgan daudz, starp tiem ir kā maksas programmas, un bezmaksas. Tāpēc esmu pārliecināts, ka katrs atradīs kaut ko sev tīkamu.

Kur atrast vietnes žurnālus

Ja jums ir regulārs hostings, visticamāk, jums būs jāraksta savam hosteram un jāpieprasa no viņa žurnāli. Turklāt diezgan bieži varat tos pieprasīt, izmantojot mitināšanas paneli. Dažādi saimnieki to dara atšķirīgi. Piemēram, lai pieprasītu no mana mitinātāja, vienkārši noklikšķiniet uz mājas lapa paneļi:


Ja jums ir piekļuve sistēmas mapes serveri, tad žurnālus varat atrast vietnē /etc/httpd/logs/access_log 99 gadījumos no 100.

Kļūdu žurnāls error.log

Error.log- fails, kurā tiek glabāti arī žurnāli. Bet ne apmeklētāji, bet kļūdas, kas radušās serverī. Kā tas ir gadījumā ar access.log, katra faila rinda ir atbildīga par vienu kļūdu. Ieraksts tiek veikts, ņemot vērā tādu informāciju kā: precīzs kļūdas rašanās datums un laiks, IP adrese, uz kuru kļūda tika izsniegta, kļūdas veids, kā arī tās rašanās iemesls.

Secinājums

Žurnāli ir diezgan spēcīgs un informatīvs rīks, ar kuru jums jāstrādā. Taču mūsdienās tos aizstāj ar tādiem rīkiem kā Yandex.Metrica, Google Analytics utt., tādējādi atvieglojot mūsu dzīvi. Taču, ja plānojat attīstīties, augt un apgūt ko jaunu, noteikti iesaku šo tēmu iepazīt tuvāk.

Profilēšanas vaicājumi MySQL izmanto, lai novērtētu jūsu lietojumprogrammas veiktspēju. Izstrādājot vidējas un lielas lietojumprogrammas, jums ir jātiek galā ar simtiem pieprasījumu, kas tiek izplatīti visā kodā un tiek izpildīti katru sekundi. Bez vaicājumu profilēšanas metodēm var būt ļoti grūti noskaidrot, kas izraisa jūsu lietojumprogrammas veiktspējas traucējumus.

Kas ir lēnais vaicājumu žurnāls MySQL?

MySQL Slow Query Log - žurnāls, kas atzīmē lēnus un potenciāli problemātiskus vaicājumus. MySQL atbalsta šo funkcionalitāti pēc noklusējuma, taču tā ir atspējota. Iestatot noteiktus servera mainīgos, mēs varam norādīt, kuri pieprasījumi mūs interesē. Visbiežāk mums ir nepieciešami vaicājumi, kuru aizpildīšanai nepieciešams noteikts laiks, vai vaicājumi, kas nepareizi apstrādā indeksus.

Profilēšanas mainīgo iestatīšana

Galvenie mainīgie vaicājumu žurnāla iestatīšanai:

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

komentēt: G - globālie mainīgie, S - sistēmas mainīgie

  • slow_query_log — Būla vērtība, ieskaitot žurnālu
  • slow_query_log_file — absolūtais ceļš uz žurnāla failu. Direktorija īpašniekam ir jābūt lietotājam mysqld, un direktorijam ir jābūt pareizām lasīšanas un rakstīšanas atļaujām. Visbiežāk mysql dēmons darbojas kā lietotājs mysql.

Lai pārbaudītu, palaidiet šādas komandas:

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

Komandas izvade dos jums pašreizējā lietotāja un mysqld lietotāja vārdu. /var/log/mysql direktorija iestatīšanas piemērs:

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

  • long_query_time — laiks sekundēs, lai pārbaudītu vaicājuma ilgumu. Piemēram, ja vērtība ir 5, katrs pieprasījums, kas ilgst vairāk nekā 5 sekundes, tiks reģistrēts.
  • log_queries_not_using_indexes — Būla vērtība, ļauj saglabāt vaicājumus, kuros netiek izmantoti indeksi. Šādi vaicājumi ir ļoti svarīgi analīzē.
  • min_examined_row_limit — norāda minimālo vērtību analizējamo datu rindu skaitam. Vērtība 1000 ignorēs vaicājumus, kas atgriež mazāk nekā 1000 vērtību rindas.

Šos mainīgos var iestatīt MySQL konfigurācijas failā, dinamiski, izmantojot MySQL GUI vai MySQL komandrindu. Ja mainīgie ir norādīti konfigurācijas failā, serveris tos instalēs nākamajā startēšanas reizē. Parasti šis fails atrodas /etc, /usr, /etc/my.cnf vai /etc/mysql/my.cnf. Šeit ir komandas, lai meklētu konfigurācijas failu (dažreiz jums vajadzētu paplašināt meklēšanu līdz citiem saknes direktorijiem):

Atrodiet /etc -name my.cnf atrast /usr -name my.cnf

Kad esat atradis failu, pievienojiet nepieciešamos mainīgos sadaļā:

; ... slow-query-log = 1 slow-query-log-file = /var/log/mysql/localhost-slow.log long_query_time = 1 log-queries-not-using-indexes ; jēga šeit nav vajadzīga

Izmaiņas stāsies spēkā tikai nākamreiz, kad startēsiet MySQL; ja nepieciešams dinamiski mainīt parametrus, izmantojiet citas mainīgo iestatīšanas metodes:

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 = "IESLĒGTS"; mysql> IESTATĪT SESIJAS long_query_time = 1; mysql> IESTATĪT SESIJAS min_examined_row_limit = 100;

Varat pārbaudīt mainīgo vērtības šādi:

Mysql RĀDĪT GLOBĀLOS MAINĪGUS, piemēram, "slow_query_log"; mysql> RĀDĪT SESIJAS MAINĪGUS, piemēram, "long_query_time";

Dinamiskās instalācijas galvenais trūkums ir tas, ka vērtības tiks zaudētas, sistēmai startējot. Svarīgus parametrus ieteicams norādīt MySQL konfigurācijā.

Piezīme: Sintakse parametru dinamiskai iestatīšanai, izmantojot SET komanda un konfigurācijas faila izmantošana ir nedaudz atšķirīga, piemēram, slow_query_log / slow-query-log . Pilnu sintakses aprakstu atradīsit oficiālajā DBVS dokumentācijā. Opciju faila formāts tiek izmantots konfigurācijas failam, sistēmas mainīgā nosaukums - mainīgo nosaukumi, dinamiski iestatot vērtības.

Datu ģenerēšana vaicājumu profilēšanai

Mēs esam izskatījuši galvenos punktus profilēšanas iestatīšanai, tagad mēs veidosim tos vaicājumus, kas mūs interesē. Šis piemērs tika izmantots skriešanai MySQL serveris bez iepriekšējiem žurnāla iestatījumiem. Vaicājumu paraugus var palaist gan, izmantojot MySQL GUI, gan DBMS komandu rīkus. Pārraugot lēno vaicājumu žurnālu, parasti tiek atvērti divi logi ar savienojumu: viens, lai palaistu vaicājumus, otrs, lai skatītu žurnālu.

$> mysql -u -p mysql CREATE DATABASE profile_sampling; mysql USE profile_sampling; mysql> CREATE TABLE lietotāji (id TINYINT PRIMARY KEY AUTO_INCREMENT, nosaukums VARCHAR(255)); mysql> INSERT INTO lietotājiem (vārds) VĒRTĪBAS ("Valters"),("Skylers"),("Džese"),("Henks"),("Valters jaunākais",("Marie"),("Sauls" "),("Gustavo"),("Hektors"),("Maiks"); 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;

Tagad mums ir datubāze ar testa datiem. Mēs uzsākām profilēšanu, taču apzināti iestatījām mazu reakcijas laiku un rindu skaitu. Lai skatītu žurnālu, izmantojiet komandu:

Cd /var/log/mysql ls -l

Teorētiski žurnālfailam vēl nevajadzētu pastāvēt, jo mēs neesam veikuši datubāzes vaicājumus. Ja tas pastāv, tas nozīmē, ka profilēšana tika konfigurēta agrāk, un tas var izkropļot piemēra rezultātus. Palaist konsolē:

Mysql USE profile_sampling; mysql SELECT * FROM lietotājiem WHERE id = 1;

Mūsu vaicājumā tiek izmantots primārās atslēgas indekss no tabulas. Pieprasījums tika apstrādāts ļoti ātri, izmantojot indeksu, tāpēc tas nedrīkst tikt atspoguļots žurnālā. Lūdzu, ņemiet vērā, ka žurnālfailu nevajadzēja izveidot.

Tagad rīkojieties šādi:

Mysql SELECT * FROM lietotājiem WHERE name = "Jesse";

Šeit mēs neizmantojām indeksus. Tagad mums vajadzētu redzēt šo pieprasījumu žurnālā:

Sudo cat /var/log/mysql/localhost-slow.log # Laiks: 140322 13:54:58 # User@Host: root @ localhost # Query_time: 0.000303 Lock_time: 0.000090 Nosūtītās rindas: 1 Rindas_izpētīts profils_amp; SET timestamp=1395521698; SELECT * FROM lietotājiem WHERE vārds = "Džesija";

Apskatīsim citu piemēru. Paaugstiniet atbildes rindu skaita joslu un izpildiet šādu vaicājumu:

Mysql> SET min_examined_row_limit = 100; mysql SELECT * FROM lietotājiem WHERE name = "Walter";

Pieprasījums netiks atspoguļots žurnālā, jo atbildē uz pieprasījumu mēs nepārsniedzām 100 rindiņas.

Piezīme: Ja dati netiek parādīti žurnālā, tad vispirms ir jāņem vērā šādi faktori. Pirmā ir tiesības uz direktoriju, kurā tiek glabāts žurnālfails. Grupai un lietotājam jāatbilst mysqld lietotājam, tiesībām jābūt chmod 755. Otrkārt, profilēšana var būt konfigurēta agrāk. No konfigurācijas faila noņemiet visas esošās profilēšanas mainīgo vērtības un restartējiet serveri vai dinamiski iestatiet mainīgos. Ja izmantojāt dinamisko metodi, jūs iziesit un atkal pieteiksieties MySQL konsolē.

Vaicājumu profilēšanas datu analīze

Apsveriet iepriekš minēto piemēru:

# Laiks: 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 lietotājiem WHERE vārds = "Džesija";

Šeit mēs redzam:

  • Laiks, kad pieprasījums tika sākts
  • Lietotājs, kurš veica pieprasījumu
  • Darba laika pieprasījumi
  • Bloķēšanas ilgums
  • Atlasīto rindu skaits
  • Parsēto rindu skaits

Šie dati ir ļoti noderīgi, jo ar to palīdzību mēs varam atrast un novērst sistēmas palēninājuma cēloni. Tāpat MySQL izstrādātājs vai administrators vienmēr varēs redzēt problemātiskus vaicājumus un vēlos atzīmēt, ka tos šeit atrast ir daudz ātrāk, nekā pētot lietojumprogrammas kodu. Izmantojot ilgtermiņa profilēšanu, jūs varat uzraudzīt darbības apstākļus ar mazu ātrumu.

Izmantojot mysqldumpslow

Žurnāls pastāvīgi ieraksta datus, parasti tas ieraksta daudz vairāk, nekā no tā tiek nolasīts. Plkst liela izmēražurnāls, tā lasīšana kļūst problemātiska. MySQL ietver rīku mysqldumpslow, kas palīdz uzturēt žurnāla integritāti. Pati programma ir apvienota ar MySQL (ieslēgts Linux sistēmas). Lai to izmantotu, sekojiet nepieciešamo komandu un nosūtiet tam ceļu uz žurnāla failu:

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

Ir vairāki parametri, kas palīdz pielāgot komandas izvadi. Tālāk esošajā piemērā mēs redzēsim pēdējos piecus pieprasījumus, kas sakārtoti pēc vidējā ilguma. Rezultātā žurnāla lasīšana kļūst daudz ērtāka. (izvade modificēta, lai parādītu faktiskās žurnāla vērtības):

Skaits: 2 Laiks = 68.34s (136s) Bloķēts = 0.00s (0s) Rindas =39892974.5 (79785949), root@localhost SELECT PL.pl_title, P.page_title FROM page P INNER JOIN pagespace Ppl_name pagespace Ppl_name =PL. WHERE P.page_namespace = N ...

Ko mēs redzam:

  • Skaits - pieprasījuma gadījumu skaits žurnālā
  • Laiks – vidējais un kopējais pieprasījuma laiks
  • Slēdzene - galda bloķēšanas laiks
  • Rindas — atlasīto rindu skaits

Komanda izslēdz ciparu un virkņu vaicājumu datus, kas nozīmē, ka vaicājumi ar vienu un to pašu WHERE klauzulu tiks uzskatīti par vienādiem. Pateicoties šim rīkam, jums nav pastāvīgi jāskatās žurnālā. Sakarā ar lielo komandu parametru skaitu, jūs varat kārtot izvadi, kā vēlaties. Ir arī trešo pušu izstrāde ar līdzīgu funkcionalitāti, piemēram, pt-query-digest.

Pieprasīt sadalījumu

Jums vajadzētu pievērst uzmanību vēl vienam rīkam, kas ļauj sadalīt sarežģīti vaicājumi. Visbiežāk jums ir jāizņem vaicājums no žurnāla un pēc tam jāpalaiž tieši MySQL konsolē. Vispirms ir jāiespējo profilēšana un pēc tam palaidiet vaicājumu:

Mysql> SET SESSION profilēšana = 1; mysql USE profile_sampling; mysql SELECT * FROM lietotājiem WHERE name = "Jesse"; mysql> RĀDĪT PROFILU;

Pēc profilēšanas iespējošanas, RĀDĪT PROFILU tiks parādīta tabula, kas saista vaicājuma_ID un SQL izteiksmi. Atrodiet atbilstošo Query_ID un izpildiet šādu vaicājumu (aizstāt # ar savu Query_ID):

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

Izvades piemērs:

SEQ STATE DURATION 1, sākot no 0,000046 2 atļauju pārbaude 0,000005 3 atvēršanas tabulas 0,000036

VALSTS- solis pieprasījuma izpildes procesā, ILGUMS- soļa ilgums sekundēs. Šis rīks netiek izmantots ļoti bieži, taču dažreiz tas var būt ļoti noderīgs, lai noteiktu lēnas vaicājuma darbības cēloni.

Detalizēts kolonnu apraksts:

Detalizēts darbību apraksts:

Piezīme: šo rīku nedrīkst izmantot servera ražošanas režīmā, izņemot konkrētu vaicājumu analīzei.

Lēna vaicājumu žurnāla veiktspēja

Pēdējais jautājums ir par to, kā profilēšana ietekmē servera darbību kopumā. Servera ražošanas režīmā šādu reģistrēšanu var izmantot diezgan droši, tai nevajadzētu ietekmēt ne centrālo procesoru, ne I/O. Tomēr ir vērts pievērst uzmanību žurnālfaila lielumam, tas nedrīkst kļūt pārmērīgi liels. No pieredzes vēlos arī atzīmēt, ka mainīgā long_query_time vērtību iestatot uz 1 sekundi vai lielāku.

Svarīgs: Nevajadzētu izmantot profilēšanas rīku - SET profiling = 1 - lai reģistrētu visus pieprasījumus, t.i. Nav ieteicams izmantot mainīgo general_log produkta režīmā un pie lielas slodzes.

Secinājums

Vaicājumu profilēšana var jums daudz palīdzēt, lai izolētu problemātisko vaicājumu un novērtētu kopējo veiktspēju. Izstrādātājs var arī izpētīt, kā darbojas viņa lietojumprogrammas MySQL vaicājumi. Mysqldumpslow rīks palīdz skatīt un apstrādāt vaicājumu žurnālus. Pēc problemātisko vaicājumu noteikšanas atliek tikai noregulēt tos maksimālai veiktspējai.




Tops