Vaicājumu profilēšana pakalpojumā MySQL. Kas ir “servera žurnāli”, kā skatīt servera žurnālus Mysql vaicājumu žurnāls

MySQL vaicājumu profilēšana ir noderīgs paņēmiens datu bāzes vadītu lietojumprogrammu vispārējās veiktspējas analīzei. Izstrādājot vidējas un lielas lietojumprogrammas, parasti simtiem pieprasījumu tiek sadalīti pa lielu kodu bāzi, un datu bāze apstrādā daudz pieprasījumu sekundē. Bez vaicājumu profilēšanas kļūst ļoti grūti noteikt atraš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

Žurnāls lēni vaicājumi MySQL (vai lēno vaicājumu žurnāls) ir žurnāls, uz kuru 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, kuriem vaicājumiem pieteikties šajā žurnālā, izmantojot īpašus mainīgos, kas ļauj profilēt vaicājumu, pamatojoties uz lietojumprogrammas veiktspējas prasībām. Parasti šajā žurnālā ir iekļauti vaicājumi, kuru apstrāde prasa ilgāku laiku, un vaicājumi, kuriem ir nepareizi indeksi.

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 — Būla mainīgais, lai iespējotu un atspējotu lēno vaicājumu žurnālu.

slow_query_log_file — vaicājuma žurnālfaila absolūtais ceļš. Faila direktorijam ir jābūt 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, Linux terminālī palaidiet šādu komandu:

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 iestatīts uz 5, visi pieprasījumi, kuru apstrāde aizņem vairāk nekā 5 sekundes, tiks reģistrēti.
  • log_queries_not_using_indexes — Būla vērtība, kas nosaka, vai vaicājumi, kas neizmanto indeksus, ir jāreģistrē. Analīzē šādi vaicājumi ir svarīgi.
  • min_examined_row_limit — norāda minimālo parsējamo rindu skaitu. Ja vērtība ir 1000, visi vaicājumi, kas parsē mazāk nekā 1000 rindu, tiks ignorēti.

MySQL servera mainīgos var iestatīt MySQL konfigurācijas failā vai dinamiski ar lietotāja interfeiss vai MySQL komandrinda. Ja mainīgie ir iestatīti konfigurācijas failā, tie saglabāsies visā servera restartēšanas laikā, 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, ierakstiet (iespējams, 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ā, serveris ir jārestartē. 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īgo 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 trūkumiem, mainot MySQL mainīgos dinamiski, ir tas, ka mainīgie tiks zaudēti, restartējot serveri. Tāpēc failam jāpievieno visi svarīgie mainīgie, kas jāsaglabā.

Ģenerējiet profilēšanas vaicājumu

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

Piezīme: Šeit parādītais 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: vienu savienojumu sūtīšanai MySQL operatori, bet otrais ir paredzēts pieprasījumu žurnāla apskatei.

Piesakieties MySQL serverī, izmantojot konsoli kā lietotājs ar SUPER ADMIN privilēģijām. Vispirms izveidojiet testa datu bāzi un tabulu, pievienojiet tai fiktīvus datus un iespējojiet lēno vaicājumu žurnālu.

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 ilgu pieprasījumu apstrādes laiku un atspējojām rindu skaita pārbaudi. Lai skatītu žurnālu, ierakstiet:

cd /var/log/mysql
ls-l

Līdz šim mapē nedrīkst būt lēnu pieprasījumu žurnāls, kopš Šis brīdis lūgumu nebija. Ja šāds žurnāls jau ir, 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 MySQL cilnē 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 reģistrēts lēno vaicājumu žurnālā. Dodieties atpakaļ uz direktoriju un pārbaudiet, vai nav izveidots vaicājumu žurnāls. Tagad atgriezieties MySQL logā un palaidiet:

mysql>

Šis vaicājums neizmanto indeksu. Tagad žurnālā /var/log/mysql/localhost-slow.log vajadzētu parādīties kaut kam līdzīgam:

# 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 pieprasījumu šādi:

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

Dati netiks pievienoti žurnālam, jo ​​vaicājums parsēja mazāk nekā 100 rindas.

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

Vaicājumu profilēšanas datu analīze

Apsveriet šādus datus:

# Laiks: 140322 13:54:58
# [aizsargāts ar e-pastu]: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:

  • Pieprasīt izpildes laiku
  • Kas to sūtīja
  • Cik ilgi pieprasījums tika apstrādāts
  • Garums
  • Cik rindu tika atgrieztas
  • Cik rindu tika parsētas

Tas ir noderīgi, jo visi pieprasījumi, kas pārkāpj mainīgajos norādītās veiktspējas prasības, tiek reģistrēti. Tas ļauj izstrādātājam vai administratoram ātri izsekot nestrādājošos pieprasījumus. Turklāt vaicājumu profilēšanas dati var palīdzēt noteikt, kuri apstākļi pasliktina lietojumprogrammu veiktspēju.

Izmantojot mysqldumpslow

Profilēšanu var iekļaut datu bāzes vadītās lietojumprogrammās, lai nodrošinātu mērenu datu trafiku.

Pieaugot žurnāla izmēram, kļūst grūti parsēt visus datus, un problemātiskie vaicājumi tajā tiek viegli pazaudēti. MySQL nodrošina 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 izmantot dažādus parametrus, lai pielāgotu 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 rindas ir lasāmākas un arī sagrupētas pēc pieprasījuma.

Skaits: 2 Laiks = 68,34 s (136 s) Bloķēts = 0,00 s (0s) Rindas = 39892974,5 (79785949), [aizsargāts ar e-pastu]
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 identiskiem. Mysqldumpslow rīks novērš nepieciešamību pastāvīgi skatīt lēno vaicājumu žurnālu, tā vietā ļaujot regulāri automātiskās pārbaudes. Komandu mysqldumpslow opcijas ļauj izpildīt sarežģītas izteiksmes.

Pieprasīt sadalījumu

Vēl viens profilēšanas rīks, kas jāpatur prātā, ir sarežģīts 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 priekšrakstu. 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 A: Š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. Parasti ir droši palaist lēnu vaicājumu žurnālu ražošanas vidē; nedrīkst ietekmēt ne centrālo procesoru, ne I/O. Tomēr jums ir jābūt stratēģijai žurnāla izmēra pārraudzībai, lai žurnāls nekļūtu pārāk liels failu sistēma. Turklāt, palaižot lēnu vaicājumu žurnālu ražošanas vidē, long_query_time ir jāiestata uz 1 vai augstāku.

Secinājums

Lēnais vaicājumu žurnāls var palīdzēt identificēt problemātiskus vaicājumus un novērtēt kopējo vaicājumu veiktspēju. Tas sniedz izstrādātājam detalizētu priekšstatu 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 servera darbības laikā (ieskaitot palaišanu un apturēšanu);
  • Binārais žurnāls- visu datu bāzes maiņas komandu žurnāls, kas nepieciešams replikācijai un dublēšanai;
  • Vispārējs vaicājumu žurnāls— galvenais pieprasījumu žurnāls;
  • Lēna vaicājumu žurnāls- lēnu vaicājumu žurnāls.

Kļūdu žurnāls

Šajā žurnālā ir visas kļūdas, kas radušās, kamēr serveris darbojās, tostarp kritiskās kļūdas, kā arī 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 izdrukātas konsolē (stderr), kļūdas var rakstīt arī syslog (Debian pēc noklusējuma) 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 komandas datu bāzes maiņai tiek ierakstītas binārajā žurnālā, kas ir noderīgas replikācija un atveseļošanās.

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, derīguma termiņu 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, informācija par klientu savienojumiem. Tas var būt noderīgs 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

To var arī iespējot/atspējot, kamēr darbojas MySQL serveris:

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

# Lai pieteiktos, serveris nav jārestartē

Lēns vaicājumu žurnāls

Žurnāls ir noderīgs, lai identificētu lēnus, tas ir, neefektīvus vaicājumus. Vairāk lasiet sadaļā Šis raksts.

Skatīt žurnālus

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 # Lēnu vaicājumu žurnāls 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 saglabā arī datu apraksta 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, kas nav paredzēts lietotāja lasīšanai, tāpēc nemodificējiet un neizdzēsiet to.

Svarīgākā

Vienmēr iespējojiet kļūdu reģistrēšanu, izmantojiet vaicājumu žurnālu, lai pārbaudītu lietojumprogrammas savienojumu ar datu bāzi, pārbaudītu pieprasījumus un darbu. Lēnais vaicājumu žurnāls ir noderīgs MySQL veiktspējas optimizēšanai.

Profilēšanas vaicājums pakalpojumā 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 izplatīti visā kodā un tiek izpildīti katru sekundi. Bez vaicājumu profilēšanas tehnikas var būt ļoti grūti atrast, kas izraisa jūsu lietojumprogrammas veiktspējas traucējumus.

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

MySQL lēno vaicājumu žurnāls ir ž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īšana prasa noteiktu laiku, vai vaicājumi, kas nepareizi apstrādā indeksus.

Profilēšanas mainīgo iestatīšana

Galvenie mainīgie pieprasījumu žurnāla konfigurēš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ējo lietotājvārdu un mysqld lietotājvā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, visi pieprasījumi, kas ilgāki par 5 sekundēm, tiks reģistrēti.
  • log_queries_not_using_indexes — Būla vērtība, ļauj saglabāt vaicājumus, neizmantojot indeksus. Šā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 iestatī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 ; šeit nav vajadzīga vērtība

Izmaiņas stāsies spēkā tikai nākamajā MySQL startēšanas reizē, ja jums ir nepieciešams dinamiski mainīt parametrus, izmantojiet citas mainīgo iestatīšanas metodes:

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;

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ēmas startēšanas laikā. Svarīgus parametrus ieteicams norādīt MySQL konfigurācijā.

Piezīme Piezīme. Sintakse opciju dinamiskai iestatīšanai, izmantojot komandu SET un konfigurācijas failu, 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 apsvēruši galvenos profilēšanas iestatījumu punktus, tagad mēs izveidosim mūs interesējošos vaicājumus. Šis piemērs tika izmantots darbināmā MySQL serverī bez iepriekšējas reģistrēšanas iestatīšanas. 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. Sākām profilēšanu, bet apzināti iestatījām reakcijas laiku un rindiņu skaitu mazu. 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 strādāja ļoti ātri, izmantojot indeksu, tāpēc tas nedrīkst tikt atspoguļots žurnālā. Ņemiet vērā, ka žurnālfailu nevajadzētu izveidot.

Tagad rīkojieties šādi:

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

Mēs šeit neesam izmantojuši 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 # [aizsargāts ar e-pastu]: 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";

Apskatīsim vēl vienu 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 jāņem vērā šādi faktori. Pirmā ir tiesības uz direktoriju, kurā tiek glabāts žurnālfails. Grupai un lietotājam ir 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 iestatiet mainīgos dinamiski. Ja izmantojāt dinamisko metodi, izejiet un atkal piesakieties MySQL konsolē.

Vaicājumu profilēšanas datu analīze

Apsveriet iepriekš minēto piemēru:

# Laiks: 140322 13:54:58 # [aizsargāts ar e-pastu]: 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:

  • Pieprasījuma sākšanas laiks
  • Lietotājs, kurš veica pieprasījumu
  • Darba laika pieprasījumi
  • Bloka ilgums
  • Atlasīto rindu skaits
  • Parsēto rindu skaits

Šie dati ir ļoti noderīgi, jo ar to palīdzību varēsim 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 to atrašana šeit ir daudz ātrāka nekā lietojumprogrammas koda izpēte. Izmantojot ilgu profilēšanu, jūs varat izsekot darbības apstākļiem ar mazu ātrumu.

Izmantojot mysqldumpslow

Žurnāls pastāvīgi raksta datus, kā likums, tas raksta daudz vairāk, nekā no tā tiek nolasīts. Plkst liels izmērsžurnālā, kļūst problemātiski to lasīt. MySQL ietver mysqldumpslow rīku, kas palīdz saglabāt žurnāla integritāti. Pati programma ir apvienota ar MySQL (Linux sistēmās). Lai to izmantotu, palaist 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ākas iespējas, 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 logā parādītu reālās vērtības):

Skaits: 2 Laiks = 68,34 s (136 s) Bloķēts = 0,00 s (0s) Rindas = 39892974,5 (79785949), [aizsargāts ar e-pastu] IZVĒLĒTIES PL.pl_nosaukums, P.lapas_nosaukums NO lapas P IEKŠĒJĀ PIEVIENOTIES lapu saites PL ON PL.pl_namespace = P.lapas_nosaukumvieta, KUR P.lapas_nosaukumvieta = 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, tas ir, 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ādes ar līdzīgu funkcionalitāti, piemēram, pt-query-digest .

Pieprasīt sadalījumu

Jāpievērš uzmanība citam instrumentam, kas ļauj salūzt sarežģīti vaicājumi. Visbiežāk jums ir jāveic 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 > 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 un SQL priekšrakstu. 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 paraugs:

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ēna pieprasījuma 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 pieprasījumu parsēšanai.

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ā var diezgan droši izmantot šādu reģistrēšanu, tam nevajadzētu ietekmēt ne CPU, ne I/O. Tomēr jums vajadzētu pievērst uzmanību žurnāla faila lielumam, tas nedrīkst kļūt pārmērīgs. Turklāt no pieredzes vēlos atzīmēt, ka mainīgā long_query_time vērtības iestatīšana ir vienāda ar 1 sekundi vai vairāk.

Svarīgs: neizmantojiet profilēšanas rīku - SET profilēšana = 1 - lai reģistrētu visus vaicājumus, t.i. mainīgais general_log ražošanas režīmā un lielas slodzes gadījumā nav ieteicams.

Secinājums

Vaicājumu profilēšana var būt ļoti noderīga, lai izolētu problemātisku vaicājumu un novērtētu vispārējo veiktspēju. Izstrādātājs var arī uzzināt, kā MySQL vaicājumi darbojas viņu lietojumprogrammā. Mysqldumpslow rīks palīdz skatīt un apstrādāt vaicājumu žurnālu. Pēc problemātisko vaicājumu identificēšanas atliek tos noregulēt, lai nodrošinātu maksimālu veiktspēju.

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ūstot 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, kas to veicis, un nodot 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 diezgan 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ēšanas rezultātu lapas, pārlūkprogramma veic meklēšanu un izveido savienojumu ar serveri, kurā lapa atrodas, un pieprasa to. Tajā pašā laikā tas nosūta serverim šā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 tika pārsūtīts.

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. Rakstīšana servera žurnālā. Galu galā notiek žurnāla ieraksts, kas norāda visus datus, kas parādījās pēdē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ā piekļuves žurnāls neatkarīgi no tā, kāda veida tīmekļa serveri izmantojat (Apache, Nginx, squid starpniekserveri utt.) Šis fails ir teksta dokuments, kuras katrā rindā tiek ierakstīts viens zvans. Ierakstīšanas formāti piekļuves žurnāls 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;
%(novirzītā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, kas cilvēkiem ir diezgan grūti lasāmi, un veido strukturētus datus. Tās ir tādas programmas kā: Analogs, WebAnalizer, Webalizer, Awstats, Webtrends utt.īpašo veidu programmatūra diezgan daudz, starp tiem ir maksas programmas, kā arī 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 hostinga pakalpojumu sniedzējam un jālūdz žurnāli. Turklāt diezgan bieži varat tos pieprasīt, izmantojot saimniekdatora paneli. Dažādi saimnieki to dara atšķirīgi. Piemēram, lai pieprasītu no mana mitināšanas pakalpojumu sniedzēja, vienkārši noklikšķiniet uz vienuma mājas lapa paneļi:


Ja jums ir piekļuve servera sistēmas mapēm, ž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ī. Tāpat kā gadījumā ar piekļuves žurnāls, 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 un rašanās iemesls.

Secinājums

Žurnāli ir diezgan spēcīgs un informatīvs rīks darbam. Bet mūsdienās tos aizstāj tādi rīki kā Yandex.Metrica, Google Analytics utt., tādējādi vienkāršojot 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.




Tops