MySQL-də sorğuların profilləşdirilməsi. “Server qeydləri” nədir, Mysql server qeydlərinə, sorğu qeydlərinə necə baxmaq olar

MySQL sorğu profili verilənlər bazasına əsaslanan proqramların ümumi performansını təhlil etmək üçün faydalı bir texnikadır. Orta və böyük proqramlar hazırlayarkən, adətən, böyük kod bazasına yayılmış yüzlərlə sorğu olur və verilənlər bazası saniyədə çoxlu sorğuları emal edir. Sorğu profili olmadan, baş vermə yerini və səbəblərini müəyyən etmək çox çətin olur darboğazlar tətbiqlər. Bu dərslik MySQL-in daxili alətlərindən istifadə edərək bəzi faydalı sorğu profilinin yaradılması üsullarını təsvir edir.

MySQL yavaş sorğu jurnalı

MySQL yavaş sorğu jurnalı (və ya yavaş sorğu jurnalı) MySQL-in yavaş və potensial problemli sorğular göndərdiyi bir jurnaldır.

Bu xüsusiyyət MySQL ilə gəlir, lakin standart olaraq qeyri-aktivdir. MySQL, tətbiqin performans tələblərinə əsaslanaraq sorğunun profilini yaratmağa imkan verən xüsusi dəyişənlərdən istifadə edərək bu jurnala hansı sorğuların daxil edilməli olduğunu müəyyən edir. Tipik olaraq, işlənməsi daha uzun sürən sorğular və səhv indeksləri olan sorğular bu jurnala daxil edilir.

Profil Dəyişənləri

MySQL yavaş sorğu jurnalını konfiqurasiya etmək üçün əsas server dəyişənləri bunlardır:

slow_query_log qlobal
slow_query_log_file qlobal
long_query_time qlobal/sessiya
log_queries_not_using_indexes qlobal
min_examed_row_limit qlobal/sessiya

slow_query_log – yavaş sorğu jurnalını aktivləşdirmək və ya söndürmək üçün məntiqi dəyişən.

slow_query_log_file – sorğu jurnalının mütləq yolu. Fayl kataloqu mysqld istifadəçisinə məxsus olmalı və müvafiq oxuma və yazma icazələrinə malik olmalıdır. MySQL demonu çox güman ki, mysql kimi işə salınacaq, lakin əmin olmaq üçün Linux terminalında əmri işlədin:

ps -ef | grep bin/mysqld | kəsmə -d" " -f1

Çıxış cari istifadəçini və mysqld istifadəçisini göstərəcək.

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

  • long_query_time – sorğunun uzunluğunu yoxlamaq üçün saniyələrlə vaxt. Dəyər 5 olarsa, işlənməsi 5 saniyədən çox vaxt aparan bütün sorğular qeyd olunacaq.
  • log_queries_not_using_indexes – İndekslərdən istifadə etməyən sorğuların daxil olub-olmamasını müəyyən edən məntiqi dəyər. Təhlil edərkən bu cür sorğular vacibdir.
  • min_examed_row_limit – təhlil ediləcək sətirlərin minimum sayını müəyyən edir. 1000 dəyəri ilə 1000-dən az sətiri təhlil edən bütün sorğular nəzərə alınmayacaq.

MySQL server dəyişənləri MySQL konfiqurasiya faylında və ya dinamik olaraq istifadə edilə bilər istifadəçi interfeysi və ya MySQL komanda xətti. Dəyişənlər konfiqurasiya faylında təyin edilibsə, server yenidən işə salındıqda onlar qalacaq, lakin onları aktivləşdirmək üçün server yenidən işə salınmalıdır. MySQL konfiqurasiya faylı adətən /etc/my.cnf və ya /etc/mysql/my.cnf-də yerləşir. Konfiqurasiya faylını tapmaq üçün daxil edin (axtarışınızı digər kök qovluqlara genişləndirmək lazım ola bilər):

tap /etc -ad my.cnf
tap /usr -ad my.cnf

Konfiqurasiya faylını tapdıqdan sonra bölməyə tələb olunan dəyişənləri əlavə edin:


….
yavaş sorğu jurnalı = 1
slow-query-log-file = /var/log/mysql/localhost-slow.log
uzun_sorğu_zamanı = 1
log-queries-indekslərdən istifadə etməmək

Dəyişikliklərin qüvvəyə minməsi üçün serveri yenidən başlatmalısınız. Dəyişiklikləri dərhal aktivləşdirmək lazımdırsa, dəyişənləri dinamik olaraq təyin edin:

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_examed_row_limit = 100;

Dəyişən dəyərləri yoxlamaq üçün:

mysql> "slow_query_log" KİMİ QLOBAL DƏYİŞENLƏRİ GÖSTƏRİN;
mysql> "long_query_time" KİMİ SESSİYA DƏYƏNİŞLƏRİNİ GÖSTƏRİN;

MySQL dəyişənlərinin dinamik şəkildə dəyişdirilməsinin çatışmazlıqlarından biri server yenidən işə salındıqda dəyişənlərin itirilməsidir. Buna görə də, saxlanması lazım olan bütün vacib dəyişənlər fayla əlavə edilməlidir.

Profil sorğusunun yaradılması

İndi siz yavaş sorğu jurnalı parametrləri ilə tanışsınız. Profil yaratmaq üçün sorğu datası yaratmağa çalışın.

Qeyd: Burada verilən nümunə heç bir yavaş sorğu qeydləri konfiqurasiya edilmədən işləyən MySQL nümunəsində işlədilib. Bu test sorğuları vasitəsilə icra edilə bilər GUI və ya komanda xətti MySQL.

Yavaş sorğular jurnalını izləyərkən iki terminal pəncərəsini açmaq faydalıdır: göndərmə üçün bir əlaqə MySQL ifadələri, ikincisi isə sorğu jurnalına baxmaq üçündür.

SUPER ADMIN imtiyazları olan istifadəçi kimi konsoldan istifadə edərək MySQL serverinə daxil olun. Başlamaq üçün test verilənlər bazası və cədvəl yaradın, ona saxta məlumatlar əlavə edin və yavaş sorğu qeydini aktivləşdirin.

Qeyd: İdeal olaraq, bu nümunə sorğu jurnalını qarışdırmamaq üçün MySQL-dən istifadə edən başqa proqramların olmadığı bir mühitdə ən yaxşı şəkildə işlədilir.

$> mysql -u -p
mysql> VERİLƏNLƏR BAZASI YARADIN profile_sempling;

mysql> profile_sempling istifadə edin;


mysql> CREATE TABLE istifadəçiləri (id TINYINT PRIMARY KEY AUTO_INCREMENT, adı VARCHAR(255));


mysql> İstifadəçilərə (ad) DƏYƏRLƏRƏ DAXİL EDİN ("Walter"),("Skyler"),("Jesse"),("Hank"),("Walter Jr."),("Marie"),("Saul" "),("Qustavo"),("Hektor"),("Mayk");


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_examed_row_limit = 0;

İndi sizdə test verilənlər bazası və bəzi məlumatlar olan cədvəl var. Yavaş sorğu jurnalı aktivləşdirilib. Biz qəsdən sorğunun emal vaxtını yüksək səviyyəyə təyin etdik və sıra sayı yoxlamasını qeyri-aktiv etdik. Qeydə baxmaq üçün daxil edin:

cd /var/log/mysql
ls -l

Hələlik, qovluqda yavaş sorğular qeydi olmamalıdır, çünki Bu an heç bir müraciət yox idi. Əgər belə jurnal artıq mövcuddursa, bu o deməkdir ki, siz yavaş sorğu jurnalı üçün dəstəyi aktivləşdirdiyiniz üçün verilənlər bazası artıq yavaş sorğularla qarşılaşıb. Bu, bu nümunənin nəticələrini təhrif edə bilər. MySQL sekmesine qayıdın və işə salın:

mysql> profile_sempling istifadə edin;
mysql> İD = 1 olan istifadəçilərdən * SEÇİN;

İcra olunan sorğu sadəcə olaraq məlumatları alır və cədvəldən birinci açarın indeksindən istifadə edir. Bu sorğu sürətli idi və indeksdən istifadə edirdi, ona görə də yavaş sorğu jurnalında qeyd olunmur. Kataloqa qayıdın və heç bir sorğu jurnalının yaradılmadığından əmin olun. İndi MySQL pəncərəsinə qayıdın və işə salın:

mysql>

Bu sorğu indeksdən istifadə etmir. İndi /var/log/mysql/localhost-slow.log jurnalında buna bənzər bir şey görünməlidir:

# Saat: 140322 13:54:58

profile_sempling istifadə edin;
SET vaxt damgası=1395521698;

Daha bir misal. Bu kimi sorğunu təhlil etmək və göndərmək üçün minimum sətir sayını artırın:

mysql> SET min_examined_row_limit = 100;
mysql> SELECT * FROM users WHERE name = "Walter";

Sorğu zamanı 100-dən az sətir təhlil edildiyi üçün məlumatlar jurnala əlavə edilməyəcək.

Qeyd: Məlumat jurnala əlavə olunmayıbsa, bir neçə amili yoxlamaq lazımdır. Əvvəlcə jurnalın yaradıldığı kataloqun icazələrini yoxlayın. O, mysqld istifadəçisi/qrupuna məxsus olmalıdır və chmod 755 imtiyazlarına malik olmalıdır.Sonra siz serverdə parametrlərinizə üstünlük verən digər yavaş sorğu parametrlərinin olub-olmadığını yoxlamalısınız. Bütün yavaş sorğu dəyişənlərini konfiqurasiya faylından silmək və serveri yenidən işə salmaq üçün standartları sıfırlayın. Siz həmçinin dinamik olaraq qlobal dəyişənləri standart dəyərlərinə təyin edə bilərsiniz. Dinamik dəyişikliklər edirsinizsə, parametrləri yeniləmək üçün sistemdən çıxın və MySQL-ə yenidən daxil olun.

Sorğu Profili Məlumatlarının Təhlili

Aşağıdakı məlumatları nəzərdən keçirin:

# Saat: 140322 13:54:58
#User@Host: root@localhost
# Sorğu_vaxtı: 0.000303 Kilidləmə_vaxtı: 0.000090 Göndərilən sətirlər: 1 sətirlər yoxlanılıb: 10
profile_sempling istifadə edin;
SET vaxt damgası=1395521698;
SEÇİN * İSTİFADƏÇİLƏRDƏN HARADA ad = "Jesse";

Bu giriş göstərilir:

  • Sorğunun icra müddəti
  • Kim göndərdi
  • Sorğuya baxılması nə qədər vaxt aparıb?
  • Uzunluq
  • Neçə sıra geri qaytarıldı
  • Neçə sıra təhlil edildi

Bu faydalıdır, çünki dəyişənlərdə göstərilən performans tələblərini pozan istənilən sorğu jurnalda bitir. Bu, tərtibatçıya və ya administratora işləməyən sorğuları tez bir zamanda izləməyə imkan verir. Bundan əlavə, sorğu profili məlumatları hansı halların tətbiqinizin zəif işləməsinə səbəb olduğunu müəyyən etməyə kömək edə bilər.

mysqldumpslow istifadə edərək

Orta məlumat axınını təmin etmək üçün profilləşdirmə verilənlər bazası əsaslı proqramlara daxil edilə bilər.

Jurnal ölçüsü böyüdükcə bütün məlumatları təhlil etmək çətinləşir və problemli sorğular asanlıqla orada itə bilər. MySQL, yavaş sorğular jurnalını bölməklə bu problemdən qaçmağa kömək edən mysqldumpslow adlı alət təklif edir. Binar MySQL (Linux-da) ilə əlaqələndirilir, ona görə də sadəcə əmri yerinə yetirə bilərsiniz:

mysqldumpslow -t 5 -s /var/log/mysql/localhost-slow.log ünvanında

Komanda çıxışını fərdiləşdirmək üçün müxtəlif parametrləri qəbul edə bilər. Yuxarıdakı nümunə orta sorğu vaxtına görə sıralanmış ilk 5 sorğunu göstərəcək. Bu cür sətirlər daha oxunaqlıdır və sorğuya görə də qruplaşdırılır.

Say: 2 Vaxt=68,34s (136s) Kilid=0,00s (0s) Sıralar=39892974,5 (79785949), root@localhost
PL.pl_title, P.page_title SEÇİN
Səhifədən P
INNER JOIN pagelinks PL
ON PL.pl_namespace = P.page_namespace
HARADA P.page_namespace = N

Çıxış aşağıdakı məlumatları göstərir:

  • Say: sorğu neçə dəfə daxil edilmişdir.
  • Vaxt: orta və ümumi sorğu vaxtı (mötərizədə).
  • Kilid: masanın kilidlənməsi vaxtı.
  • Satırlar: Qaytarılan sıraların sayı.

Əmr rəqəmli və sətir dəyərlərini istisna edir, buna görə də fərqli HARƏDƏ şərtləri olan eyni sorğular eyni kimi qəbul edilir. Mysqldumpslow aləti yavaş sorğuların jurnalını daim nəzərdən keçirmək ehtiyacını aradan qaldırır, bunun əvəzinə müntəzəm sorğular həyata keçirməyə imkan verir. avtomatik yoxlamalar. Mysqldumpslow əmr seçimləri mürəkkəb ifadələri işlətməyə imkan verir.

Sorğu Bölgüsü

Yadda saxlamaq lazım olan başqa bir profilləşdirmə vasitəsi Kompleks Sorğu Bölmə Alətidir. Bu, yavaş sorğu jurnalında problemli sorğuları müəyyən etməyə və onu MySQL-də işə salmağa imkan verir. Əvvəlcə profilləşdirməni aktivləşdirməlisiniz və sonra sorğunu yerinə yetirməlisiniz:

mysql> SET SESSION profilləşdirmə = 1;
mysql> profile_sempling istifadə edin;
mysql> SELECT * FROM users WHERE name = "Jesse";
mysql> PROFİLLƏRİ GÖSTƏRİN;

Profilləşdirmə aktivləşdirildikdən sonra PROFİLLƏRİ GÖSTƏRƏN Query_ID-ni SQL ifadəsi ilə əlaqələndirən cədvəl göstərəcək. Çalışan sorğuya uyğun Query_ID-ni tapın və aşağıdakı sorğunu yerinə yetirin (# hərfini Query_ID ilə əvəz edin):

mysql> INFORMATION_SCHEMA.PROFİLİNDƏN * SEÇİN QUERY_ID=#;

Komanda cədvəli qaytaracaq:

SEQ DÖVLƏT DURATION
1 başlayaraq 0.000046
2 icazələrin yoxlanılması 0.000005
3 açılış masaları 0.000036

DÖVLƏT sorğunun icrası prosesində bir addımdır və DURATION həmin addımı saniyələrlə tamamlamaq üçün lazım olan vaxtdır. Çox deyil faydalı alət, lakin sorğunun icrasının hansı hissəsinin ən çox gecikməyə səbəb olduğunu müəyyən etməyə kömək edə bilər.

Qeyd Qeyd: Bu alət istehsal mühitində istifadə edilməməlidir.

Yavaş sorğu jurnalının performansı

Qalan yalnız yavaş sorğu jurnalının performansa necə təsir etdiyini anlamaqdır. Ümumiyyətlə, istehsal mühitində yavaş sorğu jurnallarını işə salmaq təhlükəsizdir; Nə CPU, nə də I/O təsir etməməlidir. Bununla belə, jurnalın çox böyük olmamasını təmin etmək üçün jurnalın ölçüsünü izləmək üçün bir strategiyanız olmalıdır fayl sistemi. Əlavə olaraq, istehsal mühitində yavaş sorğu jurnalını işlədən zaman long_query_time 1 və ya daha yüksəkə təyin etməlisiniz.

Nəticə

Yavaş sorğu jurnalı problemli sorğuları müəyyən etməyə və ümumi sorğu performansını qiymətləndirməyə kömək edə bilər. Eyni zamanda, tərtibatçı tətbiqin necə işləməsi barədə ətraflı məlumat əldə edə bilər MySQL sorğuları. Mysqldumpslow aləti yavaş sorğu qeydlərini idarə etməyə və onları asanlıqla inkişaf prosesinizə daxil etməyə imkan verir. Problemli sorğuları müəyyən etməklə siz performansı yaxşılaşdırmaq üçün sorğuların işlənməsini optimallaşdıra bilərsiniz.

Teqlər:

Hadisə qeydləri sistemin vəziyyətini təyin etmək və səhvləri müəyyən etmək üçün ilk və ən sadə vasitədir. MySQL-də dörd əsas qeyd var:

  • Səhv jurnalı— server işləyərkən toplanan standart xəta jurnalı (başlama və dayandırma daxil olmaqla);
  • İkili Qeyd— replikasiya və ehtiyat nüsxələri üçün lazım olan bütün verilənlər bazası modifikasiyası əmrlərinin jurnalı;
  • Ümumi sorğu jurnalı— əsas sorğu jurnalı;
  • Yavaş Sorğu Qeydiyyatı— yavaş sorğular jurnalı.

Xəta jurnalı

Bu jurnalda server işləyərkən baş vermiş bütün səhvlər, o cümlədən kritik xətalar, həmçinin serverin bağlanması, serverin işə salınması və xəbərdarlıqlar var. Sistem nasazlığı halında başlamalısınız. Varsayılan olaraq, bütün səhvlər konsolda (stderr) çıxarılır, siz həmçinin səhvləri syslog-a (Debian-da defolt) və ya ayrıca log faylına daxil edə bilərsiniz:

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

# Səhvlər mysql_error.log-a yazılacaq

Səhvləri tez müəyyən etmək üçün bu jurnalı aktiv saxlamağı tövsiyə edirik. Və bu və ya digər xətanın nə demək olduğunu başa düşmək üçün MySQL-də səhv yardım proqramı var:

Shell> səhv 13 64 ƏS xəta kodu 13: İcazə rədd edildi ƏS xəta kodu 64: Maşın şəbəkədə deyil

# Səhv kodlarının mənasını izah edir

İkili (aka ikili) jurnal

Bütün verilənlər bazası modifikasiyası əmrləri ikili jurnalda qeyd olunur, faydalıdır replikasiya və bərpa.

Bu belə açılır:

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

# Yeri, ömrünü və müddətini göstərir maksimum ölçü fayl

Nəzərə alın ki, sistemi genişləndirmək və nasazlıqlara dözümlülük tətbiq etmək fikrində deyilsinizsə, ikili jurnalı aktivləşdirməmək daha yaxşıdır. Bu, resurs tələb edir və sistemin işini azaldır.

Sorğu jurnalı

Bu jurnal bütün qəbul edilmiş SQL sorğularını və müştəri əlaqələri haqqında məlumatları ehtiva edir. İndekslərin təhlili və optimallaşdırılması, həmçinin səhv sorğuların müəyyən edilməsi üçün faydalı ola bilər:

General_log_file = /var/log/mysql/mysql.log ümumi_loq = 1

# Jurnal daxildir və faylın yerini göstərir

Siz həmçinin MySQL serveri işləyərkən onu aktivləşdirə/deaktiv edə bilərsiniz:

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

# İstifadə etmək üçün serveri yenidən başlatmağa ehtiyac yoxdur

Yavaş sorğu jurnalı

Jurnal yavaş, yəni səmərəsiz sorğuları müəyyən etmək üçün faydalıdır. Ətraflı oxu bu məqalə.

Qeydlərə baxılır

Debian (Ubuntu)-da qeydlərə baxmaq üçün aşağıdakıları yerinə yetirməlisiniz:

# Xəta jurnalı quyruğu -f /var/log/syslog #Sorğu jurnalı quyruğu -f /var/log/mysql/mysql.log # Yavaş sorğuları qeyd edin quyruq -f /var/log/mysql/mysql-slow.log

# Qeydlər ayrıca göstərilməyibsə, onlar /var/lib/mysql-də yerləşirlər

Giriş fırlanması

Jurnal fayllarını serverdə daha az yer tutması üçün sıxışdırmağı (arxivləməyi, döndərməyi) unutmayın. Bunu etmək üçün köməkçi proqramdan istifadə edin logrotate konfiqurasiya faylını redaktə etməklə /etc/logrotate.d/mysql-server:

# - Hər şeyi bir bloka yerləşdirdim və paylaşılan skriptləri əlavə etdim ki, mysql yalnız bir dəfə # flush-logs"d əldə etsin. # Əks halda ikili qeydlər hər gün avtomatik olaraq n dəfə artacaq. # - Səhv jurnalı köhnəlmişdir, mesajlar indi syslog-a keçir./var/log/mysql.log /var/log/mysql/mysql.log /var/log/mysql/mysql-slow.log(gündəlik dönmə 7 missingok 640 mysql adm kompres paylaşılan skriptləri postrotate testi -x /usr/bin/mysqladmin || çıxış 0 # Bu uğursuz olarsa, debian.conf-u yoxlayın! MYADMIN="/usr/bin/mysqladmin --defaults-file=/etc/mysql/debian.cnf" əgər [ -z "`$MYADMIN ping 2>/dev/null`" ]; sonra # Həqiqətən mysqld yoxdur, yoxsa debian-sys-maint istifadəçisi yoxdur? # Əgər bu baş verərsə və xəta deyilsə, lütfən, səhv barədə məlumat verin. #if ps cax | grep -q mysqld; sonra if killall -q -s0 -umysql mysqld; sonra çıxın 1 fi başqa $MYADMIN flush-logs fi endscript )

# Lazımi qeydləri sıxır və arxivləşdirir, faylları təmizləyir

DDL Qeydiyyatı

MySQL həmçinin məlumat dili jurnalını saxlayır. O, DROP_TABLE və ALTER_TABLE kimi əməliyyatlardan məlumatları toplayır. Jurnal bu cür əməliyyatlar zamanı baş vermiş uğursuzluqları bərpa etmək üçün istifadə olunur. DDL Log ikili fayldır və istifadəçi tərəfindən oxunmaq üçün nəzərdə tutulmayıb, ona görə də onu dəyişdirməyin və ya silməyin.

Ən əhəmiyyətli

Həmişə səhv jurnalını yandırın, tətbiqin verilənlər bazası ilə əlaqəsini yoxlamaq, sorğuları və əməliyyatları yoxlamaq üçün sorğu jurnalından istifadə edin. Yavaş sorğular jurnalı MySQL performansını optimallaşdırmaq üçün faydalıdır.

Mysql-də sorğuların profilləşdirilməsi tətbiqinizin performansını qiymətləndirmək üçün istifadə olunur. Orta və böyük proqramlar hazırlayarkən, kodunuz boyunca paylanmış və hər saniyə yerinə yetirilən yüzlərlə sorğu ilə məşğul olmalısınız. Sorğu profilinin yaradılması üsulları olmadan, tətbiqinizin performansının pisləşməsinə nəyin səbəb olduğunu tapmaq çox çətin ola bilər.

MySQL-də yavaş sorğu jurnalı nədir?

MySQL Slow Query Log - yavaş və potensial problemli sorğuları qeyd edən jurnal. MySQL defolt olaraq bu funksiyanı dəstəkləyir, lakin o, qeyri-aktivdir. Müəyyən server dəyişənlərini təyin etməklə, hansı sorğuların bizi maraqlandırdığını təyin edə bilərik. Çox vaxt bizə başa çatdırmaq üçün müəyyən vaxt tələb edən sorğular və ya indeksləri düzgün emal etməyən sorğular lazımdır.

Profil Dəyişənlərinin qurulması

Sorğu jurnalının qurulması üçün əsas dəyişənlər:

Slow_query_log G slow_query_log_file G long_query_time G / S log_queries_isting_not_indexes G min_examined_row_limit G / S

Şərh: G - qlobal dəyişənlər, S - sistem dəyişənləri

  • slow_query_log - log daxil olmaqla məntiqi dəyər
  • slow_query_log_file - log faylına mütləq yol. Kataloqun sahibi istifadəçi olmalıdır mysqld, və kataloq düzgün oxumaq və yazma icazələrinə malik olmalıdır. Çox vaxt mysql demonu istifadəçi kimi işləyir mysql.

Yoxlamaq üçün aşağıdakı əmrləri yerinə yetirin:

Ps-ef | grep bin/mysqld | kəsmə -d" " -f1

Komandanın çıxışı sizə cari istifadəçinin və mysqld istifadəçisinin adını verəcəkdir. /var/log/mysql qovluğunun qurulmasına nümunə:

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

  • long_query_time - sorğu müddətini yoxlamaq üçün saniyələrlə vaxt. Məsələn, 5 dəyəri ilə 5 saniyədən çox davam edən hər sorğu qeyd olunacaq.
  • log_queries_not_using_indexes - boolean dəyəri, indekslərdən istifadə etməyən sorğuları saxlamağa imkan verir. Bu cür sorğular təhlildə çox vacibdir.
  • min_examed_row_limit - təhlil ediləcək məlumat sətirlərinin sayı üçün minimum dəyəri təyin edir. 1000 dəyəri 1000-dən az dəyər sətirini qaytaran sorğulara məhəl qoymayacaq.

Bu dəyişənlər MySQL konfiqurasiya faylında MySQL GUI və ya MySQL komanda xətti vasitəsilə dinamik olaraq təyin edilə bilər. Dəyişənlər konfiqurasiya faylında göstərilibsə, server növbəti dəfə işə başlayanda onları quraşdıracaq. Tipik olaraq bu fayl /etc, /usr, /etc/my.cnf və ya /etc/mysql/my.cnf ünvanlarında yerləşir. Budur konfiqurasiya faylını axtarmaq üçün əmrlər (bəzən axtarışı digər kök qovluqlara genişləndirməlisiniz):

/etc -ad my.cnf tap /usr -ad my.cnf

Faylı tapdığınız zaman bölməyə tələb olunan dəyişənləri əlavə edin:

; ... slow-query-log = 1 slow-query-log-file = /var/log/mysql/localhost-slow.log long_query_time = 1 log-queries-not-using-indexes ; burada heç bir məna lazım deyil

Dəyişikliklər yalnız MySQL-i növbəti dəfə işə saldığınız zaman qüvvəyə minəcək; parametrləri dinamik şəkildə dəyişmək lazımdırsa, dəyişənləri təyin etmək üçün digər üsullardan istifadə edin:

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_examed_row_limit = 100;

Dəyişənlərin dəyərlərini aşağıdakı kimi yoxlaya bilərsiniz:

Mysql> "slow_query_log" KİMİ QLOBAL DƏYİŞENLƏRİ GÖSTƏRİN; mysql> "long_query_time" KİMİ SESSİYA DƏYƏNİŞLƏRİNİ GÖSTƏRİN;

Dinamik quraşdırmanın əsas çatışmazlığı sistem işə salındıqda dəyərlərin itirilməsidir. MySQL konfiqurasiyasında vacib parametrləri təyin etmək tövsiyə olunur.

Qeyd: Parametrləri dinamik olaraq təyin etmək üçün sintaksis SET əmri və konfiqurasiya faylından istifadə bir qədər fərqlidir, məsələn slow_query_log / slow-query-log . Rəsmi DBMS sənədlərində sintaksisin tam təsvirini tapa bilərsiniz. Variant-Fayl formatı konfiqurasiya faylı üçün istifadə olunur, Sistem Dəyişən Adı - dəyərləri dinamik olaraq təyin edərkən dəyişən adları.

Sorğu Profili üçün Məlumatların Yaradılması

Profilin qurulması üçün əsas məqamları nəzərdən keçirdik, indi bizi maraqlandıran sorğuları yaradacağıq. Bu nümunə heç bir ilkin qeyd parametrləri olmadan işləyən MySQL serverində istifadə edilmişdir. Nümunə sorğuları həm MySQL GUI, həm də DBMS əmr alətləri vasitəsilə işə salmaq olar. Yavaş sorğular jurnalını izləyərkən, əlaqə ilə iki pəncərənin açılması adi haldır: biri sorğuları yerinə yetirmək üçün, digəri isə jurnala baxmaq üçün.

$> mysql -u -p mysql> VERİLƏNLƏR BAZASI YARATIN profil_nümunə; mysql> profile_sempling istifadə edin; mysql> CREATE TABLE istifadəçiləri (id TINYINT PRIMARY KEY AUTO_INCREMENT, adı VARCHAR(255)); mysql> İstifadəçilərə (ad) DƏYƏRLƏRƏ DAXİL EDİN ("Walter"),("Skyler"),("Jesse"),("Hank"),("Walter Jr."),("Marie"),("Saul" "),("Qustavo"),("Hektor"),("Mayk"); 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_examed_row_limit = 0;

İndi test məlumatları olan verilənlər bazamız var. Biz profilləşdirməyə başladıq, lakin biz qəsdən cavab vaxtını və xətlərin sayını kiçik olaraq təyin etdik. Qeydə baxmaq üçün əmrdən istifadə edin:

CD /var/log/mysql ls -l

Nəzəriyyə olaraq, log faylı hələ mövcud olmamalıdır, çünki verilənlər bazasına sorğular etməmişik. Əgər varsa, bu o deməkdir ki, profilləşdirmə əvvəllər konfiqurasiya edilib və bu, nümunənin nəticələrini təhrif edə bilər. Konsolda işləyin:

Mysql> profile_sempling istifadə edin; mysql> İD = 1 olan istifadəçilərdən * SEÇİN;

Sorğumuz cədvəldəki Primary Key indeksindən istifadə edir. Sorğu indeksdən istifadə edərək çox tez emal edildi, ona görə də jurnalda əks olunmamalıdır. Qeyd edək ki, log faylı yaradılmamalıdır.

İndi aşağıdakıları edin:

Mysql> SELECT * FROM users WHERE name = "Jesse";

Burada indekslərdən istifadə etmədik. İndi bu sorğunu jurnalda görməliyik:

Sudo cat /var/log/mysql/localhost-slow.log # Vaxt: 140322 13:54:58 # User@Host: root @ localhost # Sorğu_zamanı: 0.000303 Kilidləmə_zamanı: 0.000090 Göndərilən sətirlər: 1 sətir_incələndi: profildən istifadə: 10 SET vaxt damgası=1395521698; SEÇİN * İSTİFADƏÇİLƏRDƏN HARADA ad = "Jesse";

Başqa bir misala baxaq. Cavabdakı sətirlərin sayı üzrə çubuğu qaldırın və aşağıdakı sorğunu yerinə yetirin:

Mysql> SET min_examined_row_limit = 100; mysql> SELECT * FROM users WHERE name = "Walter";

Sorğunun cavabında 100 sətri keçmədiyimiz üçün sorğu jurnalda əks olunmayacaq.

Qeyd: Əgər verilənlər jurnalda göstərilmirsə, onda ilk növbədə aşağıdakı amilləri nəzərə almalısınız. Birincisi, log faylının saxlandığı kataloqun hüquqlarıdır. Qrup və istifadəçi mysqld istifadəçisinə uyğun olmalıdır, hüquqlar chmod 755 olmalıdır. İkincisi, profilləşdirmə daha əvvəl konfiqurasiya edilmiş ola bilər. Konfiqurasiya faylından hər hansı mövcud profil dəyişən dəyərlərini silin və serveri yenidən başladın və ya dəyişənləri dinamik olaraq təyin edin. Dinamik metoddan istifadə etsəniz, MySQL konsolundan çıxacaq və yenidən daxil olacaqsınız.

Sorğu profili məlumatlarının təhlili

Yuxarıdakı nümunəni nəzərdən keçirin:

# Vaxt: 140322 13:54:58 # User@Host: root @ localhost # Sorğu_zamanı: 0.000303 Kilid_zamanı: 0.000090 Göndərilən sətirlər: 1 sətirlər_incələndi: 10 profil_nümunəsini istifadə edin; SET vaxt damgası=1395521698; SEÇİN * İSTİFADƏÇİLƏRDƏN HARADA ad = "Jesse";

Burada görürük:

  • Sorğunun başladığı vaxt
  • Sorğu edən istifadəçi
  • Açılış saatları sorğuları
  • Kilid müddəti
  • Seçilmiş sıraların sayı
  • Təhlil edilən sətirlərin sayı

Bu məlumat çox faydalıdır, çünki onun köməyi ilə sistemin yavaşlama səbəbini tapıb aradan qaldıra bilərik. Həmçinin, MySQL tərtibatçısı və ya inzibatçısı həmişə problemli sorğuları görə biləcək və qeyd etmək istərdim ki, onları burada tapmaq proqram kodunu öyrənməkdən daha tezdir. Uzunmüddətli profilləmə ilə siz aşağı sürətlə iş şəraitinə nəzarət edə bilərsiniz.

mysqldumpslow istifadə edərək

Jurnal daim məlumatları qeyd edir, bir qayda olaraq, ondan oxunandan daha çox yazır. At böyük ölçü log, onu oxumaq problemli olur. MySQL-ə jurnalın bütövlüyünü qorumağa kömək edən mysqldumpslow adlı alət daxildir. Proqramın özü MySQL ilə birləşdirilir (on Linux sistemləri). İstifadə etmək üçün izləyin lazımi əmr və onu log faylına ötürün:

Sudo mysqldumpslow -t 5 -s /var/log/mysql/localhost-slow.log ünvanında

Komanda çıxışını fərdiləşdirməyə kömək edən bir sıra parametrlər var. Aşağıdakı nümunədə son beş sorğunun orta müddətə görə çeşidləndiyini görəcəyik. Nəticədə jurnalı oxumaq daha rahat olur. (çıxış faktiki log dəyərlərini göstərmək üçün dəyişdirilib):

Sayı: 2 Vaxt=68,34s (136s) Kilid=0,00s (0s) Satırlar=39892974,5 (79785949), root@localhost SELECT PL.pl_title, P.page_title FROM page P INNER JOIN pagelinks PL names PL_pace. HARADA P.page_namespace = N ...

Gördüklərimiz:

  • Say - jurnalda sorğunun baş vermə sayı
  • Vaxt - orta və ümumi sorğu vaxtı
  • Kilid - masanın kilidlənməsi vaxtı
  • Satırlar - Seçilmiş cərgələrin sayı

Əmr rəqəmli və sətir sorğu məlumatlarını istisna edir, yəni eyni WHERE bəndi olan sorğular eyni hesab ediləcək. Bu alət sayəsində siz daim jurnala baxmaq məcburiyyətində deyilsiniz. Çox sayda komanda parametrlərinə görə, çıxışı istədiyiniz kimi çeşidləyə bilərsiniz. Oxşar funksionallığı olan üçüncü tərəf inkişafları da var, məsələn, pt-query-digest.

Sorğu Bölgüsü

Mürəkkəb sorğuları parçalamağa imkan verən başqa bir vasitəyə diqqət yetirməlisiniz. Çox vaxt logdan sorğu götürməli və sonra onu birbaşa MySQL konsolunda işlətməlisiniz. Əvvəlcə profilləşdirməni aktivləşdirməlisiniz və sonra sorğunu yerinə yetirməlisiniz:

Mysql> SET SESSION profilləşdirmə = 1; mysql> profile_sempling istifadə edin; mysql> SELECT * FROM users WHERE name = "Jesse"; mysql> PROFİLLƏRİ GÖSTƏRİN;

Profilləşdirməni aktivləşdirdikdən sonra PROFİLLƏRİ GÖSTƏR Query_ID və SQL ifadəsini birləşdirən cədvəl göstərəcək. Müvafiq Query_ID-ni tapın və aşağıdakı sorğunu yerinə yetirin (# Query_ID ilə əvəz edin):

Mysql> INFORMATION_SCHEMA.PROFİLİNDƏN * SEÇİN QUERY_ID=#;

Nümunə çıxışı:

SEQ STATE DURATION 1 başlanğıc 0,000046 2 yoxlama icazəsi 0,000005 3 açılış cədvəli 0,000036

DÖVLƏT- sorğunun icrası prosesində bir addım, DURATION- saniyələrlə addım müddəti. Bu alət çox tez-tez istifadə edilmir, lakin bəzən yavaş sorğu performansının səbəbini müəyyən etmək üçün son dərəcə faydalı ola bilər.

Sütunların ətraflı təsviri:

Addımların ətraflı təsviri:

Qeyd: Bu alət xüsusi sorğuların təhlili istisna olmaqla, server istehsal rejimində istifadə edilməməlidir.

Yavaş sorğu jurnalının performansı

Son sual, profilləşdirmənin bütövlükdə serverin işinə necə təsir etməsidir. Serverin istehsal rejimində bu cür girişdən olduqca təhlükəsiz istifadə edə bilərsiniz, bu, nə CPU, nə də I/O-ya təsir etməməlidir. Bununla belə, log faylının ölçüsünə diqqət yetirməyə dəyər, o, çox böyük olmamalıdır. Təcrübədən onu da qeyd etmək istərdim ki, long_query_time dəyişəninin dəyərinin 1 saniyə və ya daha yüksək olması.

Əhəmiyyətli: Bütün sorğuları qeyd etmək üçün profil alətindən - SET profilləşdirmə = 1 - istifadə etməməlisiniz, yəni. General_log dəyişənini məhsul rejimində və ağır yüklər altında istifadə etmək tövsiyə edilmir.

Nəticə

Sorğu profili problemli sorğunun təcrid edilməsində və ümumi performansın qiymətləndirilməsində sizə çox kömək edə bilər. Tərtibatçı həmçinin tətbiqinin MySQL sorğularının necə işlədiyini öyrənə bilər. Mysqldumpslow aləti sorğu qeydlərinə baxmaq və işləməyinizə kömək edir. Problemli sorğuları müəyyən etdikdən sonra qalan yeganə şey onları maksimum performansa uyğunlaşdırmaqdır.

Konsepsiya

Server qeydləri (log faylları, server jurnalı)- serverdə saxlanılan, serverin sistem məlumatlarını ehtiva edən, həmçinin veb resursun ziyarətçisi haqqında bütün mümkün məlumatları qeyd edən fayllar.

Qeydlər sistem administratorları tərəfindən ziyarətçiləri təhlil etmək üçün istifadə olunur, müəyyən istifadəçi qruplarının davranış nümunələrini öyrənmək, həmçinin onlar haqqında müxtəlif məlumatlar əldə etmək, məsələn: istifadə olunan brauzer, IP ünvanı, müştərinin coğrafi yeri haqqında məlumatlar və s. Təhlildən əlavə, bu yolla siz sayta icazəsiz giriş haqqında məlumat əldə edə, bunu dəqiq kimin etdiyini daha dəqiq öyrənə və bu iş haqqında məlumatları müvafiq orqanlara ötürə bilərsiniz.

Günlük faylındakı məlumatlar, təmiz formada, bütün bunlarda sadəcə anlaşılmaz bir ardıcıllıqla simvollar toplusunu görəcək adi istifadəçilər üçün başa düşülməyəcəkdir. Amma üçün sistem administratorları və veb tərtibatçıları, bu çox oxunaqlı mətn və olduqca faydalı məlumatdır.


Hadisələrin ardıcıllığı

Müştəri hər dəfə veb-resursa daxil olduqda, ardıcıllığı haqqında danışacağımız bir neçə hadisə eyni anda işə salınır.

1. Səhifə sorğusu edilməsi. Brauzer xəttinə bir ünvan daxil etdikdə və ya aktiv veb keçidini izlədiyiniz zaman, məsələn, axtarış sisteminin nəticələri səhifəsindən, brauzer axtarış aparır və səhifənin yerləşdiyi serverə qoşulur və bunun üçün sorğu verir. Eyni zamanda, serverə aşağıdakı məlumatları ötürür:
- Səhifəni tələb edən müştəri kompüterinin IP ünvanı (proxy serverdən istifadə edirsinizsə, proxyinizin IP ünvanı);
- istifadəçinin tələb etdiyi İnternet səhifəsinin ünvanı (IP ünvanı);
- sorğunun verildiyi dəqiq vaxt və tarix;
- müştərinin faktiki yeri haqqında məlumatlar (proksi server istifadə olunursa, faktiki proxy ünvanı);
- müştərinin istifadə etdiyi brauzer haqqında məlumat (ad, versiya və s.);
- müştərinin köçürdüyü veb səhifə haqqında məlumatlar.

2. Tələb olunan məlumatların ötürülməsi. Tələb olunan məlumatlar (veb-səhifə, fayllar, kukilər və s.) serverdən istifadəçinin kompüterinə ötürülür.

3. Server jurnalına yazın. Hər şeydən sonra, son iki hadisədə görünən bütün məlumatları göstərən bir günlük girişi baş verir. Bu, birinci bənddə göndərilən bütün məlumatlar, eləcə də ötürülən məlumatlar haqqında məlumatlardır.

Server qeydlərinə necə baxmaq olar

Günlük faylları faylda saxlanılır access.log istifadə etdiyiniz veb server növündən asılı olmayaraq (Apache, Nginx, squid proxy server və s.) Bu fayl mətn sənədi, hər sətrində bir müraciət yazılmışdır. Qeyd formatları access.log olduqca çoxdur, lakin ən populyarı birləşdirilmişdir, burada giriş aşağıdakı forma və ardıcıllığa malikdir:

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

%h- sorğunun edildiyi host/IP ünvanı;
%t- serverə və server saat qurşağına sorğunun vaxtı;
%r- sorğunun versiyası, məzmunu və növü;
%s- HTTP status kodu;
%b- server tərəfindən göndərilən baytların sayı;
%(Referer)- sorğunun URL mənbəyi;
%(İstifadəçi-Agent)- sorğu haqqında məlumat (müştəri proqramı, dil və s.) olan HTTP başlığı;
%(Ev sahibi)- daxil olan Virtual Hostun adı.

Bitirdikdə bu xətt belə görünür:

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

Qeydləri əl ilə oxumaq çox vaxt və səy tələb edəcəkdir. Buna görə təcrübəli veb ustaları "Log File Analyzers" adlı xüsusi proqramdan istifadə edirlər. Onlar insanlar üçün oxuması olduqca çətin olan bütün məlumatları təhlil edir və strukturlaşdırılmış məlumatlar istehsal edir. Bunlar kimi proqramlardır: Analoq, WebAnalizer, Webalizer, Awstats, Webtrends və s. Xüsusi növləri proqram təminatı kifayət qədər çox, onların arasında kimilər də var ödənişli proqramlar, və pulsuz. Buna görə də əminəm ki, hər kəs öz zövqünə uyğun bir şey tapacaqdır.

Sayt qeydlərini haradan tapmaq olar

Əgər müntəzəm hostinqiniz varsa, çox güman ki, hosterinizə yazmalı və ondan loglar tələb etməli olacaqsınız. Ayrıca, çox vaxt onları hosting paneli vasitəsilə tələb edə bilərsiniz. Fərqli hosterlər bunu fərqli edirlər. Məsələn, mənim hosterimdən tələb etmək üçün üzərinə klikləyin ana səhifə panellər:


Əgər imkanınız varsa sistem qovluqları server, sonra logları burada tapa bilərsiniz /etc/httpd/logs/access_log 100-dən 99-da.

Səhv qeydi error.log

Error.log- logların da saxlanıldığı fayl. Ancaq ziyarətçilər deyil, serverdə baş verən səhvlər. Olduğu kimi access.log, faylın hər bir sətri baş vermiş bir xətaya görə məsuliyyət daşıyır. Qeydiyyat aşağıdakı məlumatlar nəzərə alınmaqla aparılır: səhvin baş verməsinin dəqiq tarixi və vaxtı, xətanın verildiyi IP ünvanı, xətanın növü, habelə onun baş vermə səbəbi.

Nəticə

Qeydlər işləmək üçün kifayət qədər güclü və məlumatlandırıcı vasitədir. Amma indiki vaxtda onları Yandex.Metrica, Google Analytics və s. kimi alətlər əvəz edir və bununla da həyatımızı asanlaşdırır. Ancaq inkişaf etməyi, böyüməyi və yeni bir şey öyrənməyi planlaşdırırsınızsa, əlbəttə ki, bu mövzunu daha yaxşı tanımağınızı tövsiyə edirəm.




Üst