Le kell tiltani a Mysql lekérdezések naplóját? Mik azok a „szervernaplók”, hogyan lehet megtekinteni a szervernaplókat. Mi az a lassú lekérdezési napló a MySQL-ben?

A MySQL lekérdezés profilalkotás hasznos technika az adatbázis-alapú alkalmazások általános teljesítményének elemzéséhez. Közepes és nagy alkalmazások fejlesztésekor jellemzően több száz lekérdezés van elosztva egy nagy kódbázison, és az adatbázis másodpercenként sok lekérdezést dolgoz fel. Lekérdezés profilalkotás nélkül nagyon nehéz meghatározni az előfordulás helyét és okait szűk keresztmetszetek alkalmazások. Ez az oktatóanyag néhány hasznos lekérdezési profilalkotási technikát ismertet a MySQL beépített eszközeivel.

MySQL lassú lekérdezési napló

A MySQL lassú lekérdezési naplója (vagy lassú lekérdezési napló) egy olyan napló, amelyben a MySQL lassú és potenciálisan problémás lekérdezéseket küld.

Ez a funkció a MySQL-hez tartozik, de alapértelmezés szerint le van tiltva. A MySQL speciális változók segítségével határozza meg, hogy mely lekérdezéseket kell szerepeltetni ebben a naplóban, amelyek lehetővé teszik a lekérdezés profilozását az alkalmazás teljesítménykövetelményei alapján. Általában a hosszabb ideig tartó lekérdezések és a hibás indexű lekérdezések kerülnek ebbe a naplóba.

Profilozási változók

Az alapvető szerverváltozók a MySQL lassú lekérdezési naplójának konfigurálásához a következők:

slow_query_log globális
slow_query_log_file globális
long_query_time globális/munkamenet
log_queries_not_using_indexes globális
min_examined_row_limit globális/munkamenet

slow_query_log – egy logikai változó a lassú lekérdezés naplójának engedélyezéséhez vagy letiltásához.

slow_query_log_file – a lekérdezési naplófájl abszolút elérési útja. A fájlkönyvtárnak a mysqld felhasználó tulajdonában kell lennie, és megfelelő olvasási és írási jogosultságokkal kell rendelkeznie. A mysql démon valószínűleg mysql néven fog elindulni, de hogy biztos legyen benne, futtassa a parancsot egy Linux terminálon:

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

A kimeneten megjelenik az aktuális felhasználó és a mysqld felhasználó.

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

  • long_query_time – a lekérdezés hosszának ellenőrzéséhez szükséges idő másodpercben. Ha az érték 5, akkor minden olyan kérés naplózásra kerül, amelynek feldolgozása több mint 5 másodpercig tart.
  • log_queries_not_using_indexes – Logikai érték, amely meghatározza, hogy az indexeket nem használó lekérdezéseket naplózza-e. Az elemzés során fontosak az ilyen lekérdezések.
  • min_examined_row_limit – meghatározza az elemzendő sorok minimális számát. 1000-es érték esetén a rendszer figyelmen kívül hagyja az 1000-nél kevesebb sort elemző lekérdezéseket.

A MySQL szerver változói beállíthatók a MySQL konfigurációs fájlban vagy dinamikusan a használatával felhasználói felület vagy MySQL parancssorból. Ha a konfigurációs fájlban be vannak állítva változók, azok a szerver újraindításakor is megmaradnak, de aktiválásukhoz újra kell indítani a szervert. A MySQL konfigurációs fájl általában az /etc/my.cnf vagy az /etc/mysql/my.cnf könyvtárban található. A konfigurációs fájl megtalálásához írja be a következőt (lehet, hogy ki kell terjesztenie a keresést más gyökérkönyvtárakra):

keresse meg /etc -name my.cnf
keresse meg /usr -name my.cnf

Miután megtalálta a konfigurációs fájlt, adja hozzá a szükséges változókat a szakaszhoz:


….
lassú lekérdezés-napló = 1
slow-query-log-file = /var/log/mysql/localhost-slow.log
long_query_time = 1
log-queries-not-using-indexes

A változtatások életbe léptetéséhez újra kell indítani a szervert. Ha a változtatásokat azonnal aktiválni kell, állítsa be dinamikusan a változókat:

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

A változó értékek ellenőrzéséhez:

mysql> GLOBÁLIS VÁLTOZÓK MUTATÁSA, MINT "slow_query_log";
mysql> MEGJELENÍTÉS A SESSION VÁLTOZÓKAT, MINT "long_query_time";

A MySQL változók dinamikus változtatásának egyik hátránya, hogy a változók elvesznek a szerver újraindításakor. Ezért minden fontos változót, amelyet el kell menteni, hozzá kell adni a fájlhoz.

Profilozási lekérdezés generálása

Most már ismeri a lassú lekérdezésnapló beállításait. Próbáljon lekérdezési adatokat generálni a profilalkotáshoz.

jegyzet: Az itt megadott példa egy futó MySQL-példányon futott anélkül, hogy lassú lekérdezési naplók lettek volna beállítva. Ezek a tesztlekérdezések ezen keresztül futtathatók GUI vagy parancs sor MySQL.

A lassú kérések naplójának figyelésekor hasznos két terminálablakot megnyitni: egy kapcsolat a küldéshez MySQL utasítások, a második pedig a kérésnapló megtekintésére szolgál.

Jelentkezzen be a MySQL szerverre a konzol használatával SUPER ADMIN jogosultsággal rendelkező felhasználóként. A kezdéshez hozzon létre egy tesztadatbázist és táblát, adjon hozzá áladatokat, és engedélyezze a lassú lekérdezések naplózását.

jegyzet: Ideális esetben ezt a példát olyan környezetben érdemes futtatni, ahol nincs más MySQL-t használó alkalmazás, hogy elkerüljük a lekérdezési napló zsúfoltságát.

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

mysql> USE profile_sampling;


mysql> CREATE TABLE felhasználók (azonosító TINYINT PRIMARY KEY AUTO_INCREMENT, név VARCHAR(255));


mysql> INSERT INTO user (név) VALUES ("Walter"),("Skyler"),("Jesse"),("Hank"),("Walter Jr."),("Marie"),("Saul" "),("Gustavo"),("Hector"),("Mike");


mysql> SET GLOBAL slow_query_log = 1;


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


mysql> SET GLOBAL log_queries_not_using_indexes = 1;


mysql> SET long_query_time = 10;


mysql> SET min_examined_row_limit = 0;

Most már van egy tesztadatbázisa és egy táblázata néhány adattal. A lassú lekérdezési napló engedélyezve van. Szándékosan magasra állítottuk a kérés feldolgozási idejét, és letiltottuk a sorszám ellenőrzését. A napló megtekintéséhez írja be:

cd /var/log/mysql
ls -l

Egyelőre ne legyen napló a lassú kérésekről a mappában, mivel Ebben a pillanatban nem voltak kérések. Ha már létezik ilyen napló, az azt jelenti, hogy az adatbázis már találkozott lassú lekérdezésekkel, mióta engedélyezte a lassú lekérdezések naplójának támogatását. Ez torzíthatja a példa eredményeit. Menjen vissza a MySQL lapra, és futtassa:

mysql> USE profile_sampling;
mysql> SELECT * FROM felhasználók WHERE id = 1;

A végrehajtott lekérdezés egyszerűen lekéri az adatokat, és a tábla első kulcsának indexét használja. Ez a lekérdezés gyors volt, és indexet használt, ezért nem kerül rögzítésre a lassú lekérdezések naplójában. Térjen vissza a könyvtárba, és győződjön meg arról, hogy nem jött létre lekérdezési napló. Most menjen vissza a MySQL ablakba, és futtassa:

mysql>

Ez a lekérdezés nem használ indexet. Most valami ehhez hasonlónak kell megjelennie a /var/log/mysql/localhost-slow.log naplóban:

# Idő: 140322 13:54:58

használjon profile_sampling;
SET timestamp=1395521698;

Még egy példa. Növelje az elemezni kívánt sorok minimális számát, és küldjön egy ilyen kérést:

mysql> SET min_vizsgált_sorhatár = 100;
mysql> SELECT * FROM felhasználók WHERE name = "Walter";

Az adatok nem kerülnek a naplóba, mert a kérés során kevesebb mint 100 sort elemeztek.

jegyzet: Ha az adatok nem kerültek be a naplóba, több tényezőt is ellenőriznie kell. Először ellenőrizze annak a könyvtárnak az engedélyeit, amelyben a napló létrejött. A mysqld felhasználó/csoport tulajdonában kell lennie, és chmod 755 jogosultságokkal kell rendelkeznie. Ezután ellenőrizze, hogy vannak-e olyan lassú lekérdezési beállítások a szerveren, amelyek felülírják a beállításokat. Állítsa vissza az alapértelmezett értékeket az összes lassú kérés változójának eltávolításához a konfigurációs fájlból, és indítsa újra a kiszolgálót. A globális változókat dinamikusan is beállíthatja alapértelmezett értékükre. Ha dinamikusan hajt végre módosításokat, jelentkezzen ki, majd jelentkezzen be újra a MySQL-be ​​a beállítások frissítéséhez.

Lekérdezésprofil-adatok elemzése

Vegye figyelembe a következő adatokat:

# Idő: 140322 13:54:58
#User@Host: root@localhost
# Lekérdezési_idő: 0,000303 Zárolási idő: 0,000090 Elküldött sorok: 1 Vizsgált sorok: 10
használjon profile_sampling;
SET timestamp=1395521698;
SELECT * FROM felhasználók WHERE név = "Jesse";

Ez a bejegyzés a következőket jeleníti meg:

  • Lekérdezés végrehajtási ideje
  • Ki küldte
  • Mennyi ideig tartott a kérelem feldolgozása?
  • Hossz
  • Hány sor került vissza
  • Hány sor került elemzésre

Ez azért hasznos, mert minden olyan kérés, amely megsérti a változókban meghatározott teljesítménykövetelményeket, a naplóba kerül. Ez lehetővé teszi a fejlesztőknek vagy a rendszergazdáknak, hogy gyorsan nyomon kövessék a nem működő kéréseket. Ezenkívül a profilalkotási adatok lekérdezése segíthet annak meghatározásában, hogy milyen körülmények okozzák az alkalmazás gyenge teljesítményét.

A mysqldumpslow használata

A mérsékelt adatáramlás biztosítása érdekében az adatbázis-alapú alkalmazásokba profilalkotás is beépíthető.

A napló méretének növekedésével egyre nehezebbé válik az összes adat elemzése, és a problémás lekérdezések könnyen elveszhetnek benne. A MySQL kínál egy mysqldumpslow nevű eszközt, amely a lassú lekérdezések naplójának felosztásával segít elkerülni ezt a problémát. A bináris a MySQL-hez van kapcsolva (Linuxon), így egyszerűen futtathatja a parancsot:

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

A parancs különféle paramétereket fogadhat el a kimenetének testreszabásához. A fenti példa az 5 legnépszerűbb kérelmet jeleníti meg átlagos kérési idő szerint rendezve. Az ilyen karakterláncok jobban olvashatók, és kérés szerint is csoportosíthatók.

Szám: 2 Idő = 68,34 s (136 s) Zárolás = 0,00 s (0 s) Sorok = 39892974,5 (79785949), root@localhost
SELECT PL.pl_title, P.page_title
P oldalról
BELSŐ JOIN oldallinkek PL
ON PL.pl_namespace = P.oldal_névtér
WHERE P.oldal_névtér = N

A kimenet a következő adatokat mutatja:

  • Szám: hányszor került naplózásra a kérés.
  • Idő: átlagos és teljes kérési idő (zárójelben).
  • Zár: asztalzár idő.
  • Sorok: A visszaadott sorok száma.

A parancs kizárja a numerikus és karakterlánc értékeket, így a különböző WHERE feltételekkel rendelkező azonos lekérdezéseket a rendszer azonosként kezeli. A mysqldumpslow eszköz kiküszöböli a lassú lekérdezések naplójának folyamatos áttekintését, ehelyett lehetővé teszi a rendszeres végrehajtást. automatikus ellenőrzések. A mysqldumpslow parancsbeállítások lehetővé teszik összetett kifejezések futtatását.

Lebontás kérése

Egy másik profilalkotási eszköz, amelyet szem előtt kell tartani, a Complex Query Breakdown Tool. Lehetővé teszi a problémás lekérdezések azonosítását a lassú lekérdezési naplóban, és azt MySQL-ben futtathatja. Először engedélyeznie kell a profilalkotást, majd futtassa a lekérdezést:

mysql> SET SESSION profilozás = 1;
mysql> USE profile_sampling;
mysql> SELECT * FROM felhasználók WHERE név = "Jesse";
mysql> PROFILOK MUTATÁSA;

A profilalkotás engedélyezése után a PROFILOK MEGJELENÍTÉSE megjelenít egy táblázatot, amely a Query_ID-t az SQL kifejezéshez társítja. Keresse meg a futó lekérdezésnek megfelelő Query_ID-t, és futtassa a következő lekérdezést (a # helyett cserélje ki a Query_ID-t):

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

A parancs egy táblázatot ad vissza:

SEQ ÁLLAPOT IDŐTARTAM
1 induló 0.000046
2 engedélyek ellenőrzése 0.000005
3 nyitó asztalok 0.000036

A STATE a lekérdezés-végrehajtási folyamat egyik lépése, a DURATION pedig az az idő, amely a lépés végrehajtásához szükséges másodpercekben. Nem nagyon hasznos eszköz, de segíthet meghatározni, hogy a lekérdezés végrehajtásának melyik része okozza a legtöbb késést.

jegyzet Megjegyzés: Ezt az eszközt nem szabad éles környezetben használni.

Lassú lekérdezési naplóteljesítmény

Már csak azt kell kideríteni, hogy a lassú lekérdezési napló hogyan befolyásolja a teljesítményt. Általában biztonságos a lassú lekérdezési naplók futtatása éles környezetben; Sem a CPU-t, sem az I/O-t nem érintheti. Azonban rendelkeznie kell egy stratégiával a naplóméret figyelésére, hogy a napló ne legyen túl nagy ahhoz fájlrendszer. Ezenkívül, ha lassú lekérdezési naplót futtat éles környezetben, a long_query_time értéket 1-re vagy magasabbra kell állítani.

Következtetés

A lassú lekérdezési napló segíthet a problémás lekérdezések azonosításában és a lekérdezés általános teljesítményének értékelésében. Ezzel a fejlesztő részletesen megismerheti, hogyan futnak le a MySQL-lekérdezések az alkalmazásban. A mysqldumpslow eszköz lehetővé teszi a lassú lekérdezési naplók kezelését és azok egyszerű beépítését a fejlesztési folyamatba. A problémás lekérdezések azonosításával optimalizálhatja a lekérdezések feldolgozását a teljesítmény javítása érdekében.

Címkék:

Az eseménynaplók az első és legegyszerűbb eszköz a rendszerállapot meghatározására és a hibák azonosítására. A MySQL-ben négy fő napló található:

  • Hibanapló— szabványos hibanapló, amelyet a szerver futása közben gyűjtenek (beleértve az indítást és a leállítást);
  • Bináris napló— a replikációhoz és a biztonsági mentésekhez szükséges összes adatbázis-módosítási parancs naplója;
  • Általános lekérdezési napló— fő lekérdezési napló;
  • Lassú lekérdezési napló— lassú kérések naplója.

Hibanapló

Ez a napló tartalmazza az összes hibát, amely a kiszolgáló futása közben fordult elő, beleértve a kritikus hibákat, valamint a kiszolgáló leállásait, a szerverindításokat és a figyelmeztetéseket. Itt kell kezdenie rendszerhiba esetén. Alapértelmezés szerint minden hiba a konzolra (stderr) kerül kiadásra, a hibákat a syslogba (alapértelmezett a Debianon) vagy egy külön naplófájlba is naplózhatja:

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

# A hibák a mysql_error.log fájlba kerülnek

Javasoljuk, hogy hagyja engedélyezve ezt a naplót a hibák gyors azonosítása érdekében. És hogy megértsük, mit jelent ez vagy az a hiba, a MySQL rendelkezik a perror segédprogrammal:

Shell> perror 13 64 OS hibakód 13: Engedély megtagadva OS hibakód 64: A gép nincs a hálózaton

# Elmagyarázza a hibakódok jelentését

Bináris (más néven bináris) napló

Minden adatbázis-módosítási parancs rögzítésre kerül a bináris naplóban, ami hasznos a replikációhoz és a helyreállításhoz.

Így kapcsol be:

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

# Jelzi a helyet, élettartamot és maximális méret fájlt

Kérjük, vegye figyelembe, hogy ha nem tervezi a rendszer méretezését és a hibatűrés megvalósítását, akkor jobb, ha nem engedélyezi a bináris naplót. Erőforrás-igényes és csökkenti a rendszer teljesítményét.

Kérelemnapló

Ez a napló tartalmazza az összes fogadott SQL-lekérdezést és az ügyfélkapcsolatokkal kapcsolatos információkat. Hasznos lehet indexelemzésnél és -optimalizálásnál, valamint a hibás lekérdezések azonosításában:

General_log_file = /var/log/mysql/mysql.log általános_napló = 1

# Tartalmazza a naplót, és jelzi a fájl helyét

A MySQL szerver futása közben is engedélyezheti/letilthatja:

SET GLOBAL general_log = "BE"; SET GLOBAL general_log = "KI";

# Nem kell újraindítania a szervert a használatához

Lassú kérésnapló

A napló hasznos a lassú, azaz nem hatékony lekérdezések azonosítására. Bővebben ebben a cikkben.

Naplók megtekintése

A Debian (Ubuntu) naplók megtekintéséhez futtassa a következőket:

# Hibanapló farka -f /var/log/syslog #Lekérdezésnapló farka -f /var/log/mysql/mysql.log # Lassú kérések naplózása tail -f /var/log/mysql/mysql-slow.log

# Ha a naplók nincsenek külön megadva, akkor a /var/lib/mysql könyvtárban találhatók

Napló forgatás

Ne felejtse el tömöríteni (archiválni, elforgatni) a naplófájlokat, hogy kevesebb helyet foglaljon el a szerveren. Ehhez használja a segédprogramot logrotate a konfigurációs fájl szerkesztésével /etc/logrotate.d/mysql-server:

# - Mindent egy blokkba tettem és megosztott szkripteket adtam hozzá, hogy a mysql csak egyszer kapjon # flush-logs"d. # Ellenkező esetben a bináris naplók automatikusan n-szeresére növekednének minden nap. # - A hibanapló elavult, az üzenetek most a syslogba kerülnek./var/log/mysql.log /var/log/mysql/mysql.log /var/log/mysql/mysql-slow.log( napi forgatás 7 hiányok létrehozása 640 mysql adm tömörítés megosztott szkriptek postrotate test -x /usr/bin/mysqladmin || kilépés 0 # Ha ez nem sikerül, ellenőrizze a debian.conf fájlt! MYADMIN="/usr/bin/mysqladmin --defaults-file=/etc/mysql/debian.cnf" if [ -z "`$MYADMIN ping 2>/dev/null`" ]; akkor # Tényleg nincs mysqld, vagy inkább hiányzik egy debian-sys-maint felhasználó? # Ha ez előfordul, és nem hiba, kérjük, jelentse a hibát. #if ps cax | grep -q mysqld; akkor if killall -q -s0 -umysql mysqld; majd lépjen ki 1 fi else $MYADMIN flush-logs fi endscript )

# Tömöríti és archiválja a szükséges naplókat, megtisztítja a fájlokat

DDL napló

A MySQL egy adatnyelvi naplót is vezet. Olyan műveletekből gyűjt adatokat, mint a DROP_TABLE és ALTER_TABLE. A napló az ilyen műveletek során fellépő hibák utáni helyreállításra szolgál. A DDL napló egy bináris fájl, és nem arra szolgál, hogy a felhasználó elolvassa, ezért ne módosítsa vagy törölje.

A legfontosabb

Mindig kapcsolja be a hibanaplót, a lekérdezési napló segítségével ellenőrizze az alkalmazás adatbázishoz való kapcsolódását, ellenőrizze a lekérdezéseket és a működést. A lassú lekérdezések naplója hasznos a MySQL teljesítményének optimalizálásához.

Koncepció

Szervernaplók (naplófájlok, szervernapló)- a szerveren tárolt fájlok, amelyek a szerver rendszerinformációit tartalmazzák, valamint minden lehetséges adatot naplóznak a webes erőforrás látogatójáról.

A rendszergazdák a naplókat használják a látogatók elemzésére, bizonyos felhasználói csoportok viselkedési mintáinak tanulmányozása, valamint különféle információk beszerzése róluk, mint például: a használt böngésző, IP-cím, az ügyfél földrajzi helyzetére vonatkozó adatok és még sok más. Az elemzésen túl ezen a módon tájékozódhat az oldalhoz való jogosulatlan hozzáférésről, pontosabban megtudhatja, hogy pontosan ki tette azt, és az esettel kapcsolatos adatokat továbbíthatja az illetékes hatóságoknak.

A naplófájlban található adatok tiszta formájukban nem lesznek érthetőek a hétköznapi felhasználók számára, akik mindebben csak egy értelmezhetetlen sorrendben lévő karakterkészletet fognak látni. De érte rendszergazdákés webfejlesztők számára ez egy nagyon olvasható szöveg és nagyon hasznos információ.


Eseménysor

Minden alkalommal, amikor egy ügyfél hozzáfér egy webes erőforráshoz, egyszerre több esemény indul el, amelyek sorrendjéről beszélünk.

1. Oldaligénylés. Amikor beír egy címet a böngésző sorába, vagy ha követ egy aktív internetes hivatkozást, például egy keresőmotor eredményoldaláról, a böngésző keres és csatlakozik ahhoz a szerverhez, amelyen az oldal található, és kérést küld rá. Ezzel egyidejűleg a következő információkat továbbítja a szervernek:
- az oldalt kérő kliens számítógép IP-címe (proxy szerver használata esetén az Ön proxyjának IP-címe);
- a felhasználó által kért internetes oldal címe (IP-cím);
- a kérelem benyújtásának pontos időpontja és dátuma;
- adatok a kliens aktuális helyéről (proxy szerver használata esetén a tényleges proxy cím);
- információk az ügyfél által használt böngészőről (név, verzió stb.);
- adatok arról a weboldalról, ahonnan az ügyfél átvitt.

2. A kért adatok átadása. A kért adatok (weboldal, fájlok, sütik, stb.) a szerverről a felhasználó számítógépére kerülnek.

3. Írjon a szervernaplóba. Mindezek után egy naplóbejegyzés történik, amely az elmúlt két eseményben megjelent összes adatot jelzi. Ez az első bekezdésben küldött összes információ, valamint a továbbított adatokkal kapcsolatos információk.

A szervernaplók megtekintése

A naplófájlok egy fájlban tárolódnak access.log függetlenül attól, hogy milyen típusú webszervert használ (Apache, Nginx, squid proxyszerver stb.) Ez a fájl szöveges dokumentum, amelynek minden sorára egy-egy fellebbezés van írva. Felvételi formátumok access.log elég sok, de a legnépszerűbb kombinálva van, amelyben a bejegyzés a következő formában és sorrendben van:

Kód: %h %l %u %t \"%r\" %>s %b \"%(Referer)i\" \"%(User-Agent)i\"
Ahol:

%h- gazdagép/IP-cím, amelyről a kérés érkezett;
%t- a kérés időpontja a szerverhez és a szerver időzónája;
%r- a kérelem verziója, tartalma és típusa;
%s- HTTP állapotkód;
%b- a szerver által küldött bájtok száma;
%(hivatkozó)- a kérelem URL-forrása;
%(Felhasználói ügynök)- HTTP fejléc, a kéréssel kapcsolatos információkkal (kliens alkalmazás, nyelv stb.);
%(Házigazda)- az éppen elért virtuális gazdagép neve.

Ha kész, ez a sor valahogy így néz ki:

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

A naplók kézi olvasása sok időt és erőfeszítést igényel. Ezért a tapasztalt webmesterek speciális szoftvert használnak, az úgynevezett „Log File Analyzers”. Elemeznek minden adatot, amelyet az emberek meglehetősen nehezen tudnak elolvasni, és strukturált adatokat állítanak elő. Ezek olyan programok, mint például: Analóg, WebAnalizer, Webalizer, Awstats, Webtrends stb. Különleges típusok szoftver elég sok, köztük van, mint fizetős programok, és ingyenes. Ezért biztos vagyok benne, hogy mindenki megtalálja a kedvére valót.

Hol találhatók a webhelynaplók

Ha rendszeres tárhelye van, akkor valószínűleg írnia kell a hosternek, és naplókat kell kérnie tőle. Ezenkívül gyakran kérheti őket a tárhelypanelen keresztül. A különböző házigazdák másként csinálják. Például, ha kérni szeretne a tárhelyszolgáltatómtól, kattintson a gombra kezdőlap panelek:


Ha van hozzáférése rendszermappák szervert, akkor a naplókat itt találja /etc/httpd/logs/access_log 100-ból 99 esetben.

Hibanapló error.log

Error.log- egy fájl, amelyben a naplókat is tárolják. De nem látogatók, hanem a szerveren előforduló hibák. Ahogy az a helyzet access.log, a fájl minden sora felelős egy előforduló hibáért. A rögzítés olyan információk figyelembevételével történik, mint: a hiba pontos dátuma és időpontja, az IP-cím, amelyre a hibát kiadták, a hiba típusa, valamint a bekövetkezésének oka.

Következtetés

A naplók meglehetősen hatékony és informatív eszköz a munkához. De manapság ezeket felváltják olyan eszközök, mint a Yandex.Metrica, Google Analytics stb., megkönnyítve ezzel az életünket. Ha azonban fejlődni, fejlődni és újat tanulni, mindenképpen javaslom, hogy ismerkedjen meg jobban ezzel a témával.

Profilozási lekérdezések Mysql-ben az alkalmazás teljesítményének értékelésére szolgál. Közepes és nagy alkalmazások fejlesztésekor több száz kéréssel kell megbirkóznia a kódban, amelyek másodpercenként végrehajtásra kerülnek. Lekérdezési profilalkotási technikák nélkül nagyon nehéz lehet kideríteni, hogy mi okozza az alkalmazás teljesítményét.

Mi az a lassú lekérdezési napló a MySQL-ben?

MySQL Slow Query Log – napló, amely megjelöli a lassú és potenciálisan problémás lekérdezéseket. A MySQL alapértelmezés szerint támogatja ezt a funkciót, de le van tiltva. Bizonyos szerverváltozók beállításával megadhatjuk, hogy mely kérésekre vagyunk kíváncsiak. Leggyakrabban olyan lekérdezésekre van szükségünk, amelyek befejezéséhez bizonyos időre van szükség, vagy olyan lekérdezésekre, amelyek nem dolgozzák fel megfelelően az indexeket.

Profilozási változók beállítása

A lekérdezési napló beállításának fő változói:

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

Megjegyzés: G - globális változók, S - rendszerváltozók

  • slow_query_log – logikai érték, beleértve a naplót
  • slow_query_log_file – a naplófájl abszolút elérési útja. A címtár tulajdonosának felhasználónak kell lennie mysqld, és a könyvtárnak rendelkeznie kell a megfelelő olvasási és írási jogosultságokkal. Leggyakrabban a mysql démon fut felhasználóként mysql.

Az ellenőrzéshez futtassa a következő parancsokat:

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

A parancs kimenete megadja az aktuális felhasználó és a mysqld felhasználó nevét. Példa a /var/log/mysql könyvtár beállítására:

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

  • long_query_time – idő másodpercben a lekérdezés időtartamának ellenőrzéséhez. Például 5-ös érték esetén minden 5 másodpercnél hosszabb kérés naplózásra kerül.
  • log_queries_not_using_indexes – logikai érték, lehetővé teszi az indexeket nem használó lekérdezések mentését. Az ilyen lekérdezések nagyon fontosak az elemzésben.
  • min_examined_row_limit – az elemzendő adatsorok számának minimális értékét adja meg. Az 1000-es érték figyelmen kívül hagyja az 1000-nél kevesebb értéket visszaadó lekérdezéseket.

Ezek a változók beállíthatók a MySQL konfigurációs fájlban, dinamikusan a MySQL grafikus felületen vagy a MySQL parancssoron keresztül. Ha a változók megadva vannak a konfigurációs fájlban, a szerver a következő indításkor telepíti őket. Ez a fájl általában az /etc, /usr, /etc/my.cnf vagy /etc/mysql/my.cnf helyen található. Íme a konfigurációs fájl megkereséséhez szükséges parancsok (néha ki kell terjesztenie a keresést más gyökérkönyvtárakra):

Keresse meg a /etc -name my.cnf fájlt. A /usr -name my.cnf keresése

Ha megtalálta a fájlt, adja hozzá a szükséges változókat a szakaszba:

; ... slow-query-log = 1 slow-query-log-file = /var/log/mysql/localhost-slow.log long_query_time = 1 log-queries-not-using-indexes ; itt nincs szükség jelentésre

A változtatások csak a MySQL következő indításakor lépnek életbe; ha dinamikusan kell módosítania a paramétereket, használjon más módszereket a változók beállítására:

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

A változók értékeit az alábbiak szerint ellenőrizheti:

Mysql> GLOBÁLIS VÁLTOZÓK MUTATÁSA, MINT "slow_query_log"; mysql> MEGJELENÍTÉS A SESSION VÁLTOZÓKAT, MINT "long_query_time";

A dinamikus telepítés fő hátránya, hogy a rendszer indulásakor az értékek elvesznek. Javasoljuk, hogy fontos paramétereket adjon meg a MySQL konfigurációjában.

A jegyzet: Szintaxis a paraméterek dinamikus beállításához keresztül SET parancsotés a konfigurációs fájl használata kissé eltér, például slow_query_log / slow-query-log . A szintaxis teljes leírását a hivatalos DBMS dokumentációban találja. Az Option-File formátumot használják a konfigurációs fájlhoz, a System Variable Name - változónevekhez az értékek dinamikus beállításakor.

Adatok előállítása a lekérdezés profilalkotáshoz

Áttekintettük a profilalkotás beállításának főbb pontjait, most elkészítjük a minket érdeklő lekérdezéseket. Ezt a példát futásra használták MySQL szerver előzetes naplóbeállítások nélkül. A mintalekérdezések a MySQL grafikus felületén és a DBMS parancseszközökön keresztül is indíthatók. A lassú lekérdezések naplójának figyelésekor gyakori, hogy két ablakot nyitnak meg egy kapcsolattal: az egyik a lekérdezések futtatásához, a másik a napló megtekintéséhez.

$> mysql -u -p mysql> CREATE DATABASE profile_sampling; mysql> USE profile_sampling; mysql> CREATE TABLE felhasználók (azonosító TINYINT PRIMARY KEY AUTO_INCREMENT, név VARCHAR(255)); mysql> INSERT INTO user (név) VALUES ("Walter"),("Skyler"),("Jesse"),("Hank"),("Walter Jr."),("Marie"),("Saul" "),("Gustavo"),("Hector"),("Mike"); mysql> SET GLOBAL slow_query_log = 1; mysql> SET GLOBAL slow_query_log_file = "/var/log/mysql/localhost-slow.log"; mysql> SET GLOBAL log_queries_not_using_indexes = 1; mysql> SET long_query_time = 10; mysql> SET min_examined_row_limit = 0;

Most van egy adatbázisunk tesztadatokkal. Elindítottuk a profilalkotást, de szándékosan kicsire állítottuk a válaszidőt és a sorok számát. A napló megtekintéséhez használja a következő parancsot:

Cd /var/log/mysql ls -l

Elméletileg a naplófájlnak még nem kellene léteznie, mivel nem végeztünk lekérdezéseket az adatbázisban. Ha létezik, az azt jelenti, hogy a profilozást korábban konfigurálták, és ez torzíthatja a példa eredményeit. Futtassa a konzolon:

Mysql> USE profile_sampling; mysql> SELECT * FROM felhasználók WHERE id = 1;

Lekérdezésünk a táblázat elsődleges kulcsának indexét használja. A kérelmet nagyon gyorsan feldolgozták az index segítségével, ezért nem szabadna megjelennie a naplóban. Felhívjuk figyelmét, hogy a naplófájlt nem kellett volna létrehozni.

Most tegye a következőket:

Mysql> SELECT * FROM felhasználók WHERE név = "Jesse";

Itt nem használtunk indexeket. Most ezt a kérést kell látnunk a naplóban:

Sudo cat /var/log/mysql/localhost-slow.log # Idő: 140322 13:54:58 # User@Host: root @ localhost # Query_time: 0.000303 Lock_time: 0.000090 Elküldött sorok: 1 Sorok_amp; SET timestamp=1395521698; SELECT * FROM felhasználók WHERE név = "Jesse";

Nézzünk egy másik példát. Emelje fel a lécet a válaszban szereplő sorok számán, és futtassa a következő lekérdezést:

Mysql> SET min_examined_row_limit = 100; mysql> SELECT * FROM felhasználók WHERE name = "Walter";

A kérés nem fog megjelenni a naplóban, mivel a kérésre adott válaszban nem léptük túl a 100 sort.

A jegyzet: Ha az adatok nem jelennek meg a naplóban, akkor mindenekelőtt a következő tényezőket kell figyelembe venni. Az első a naplófájl tárolási könyvtárának jogai. A csoportnak és a felhasználónak meg kell felelnie a mysqld felhasználónak, a jogosultságoknak chmod 755-nek kell lenniük. Másodszor, lehet, hogy a profilozást korábban konfigurálták. Távolítson el minden meglévő profilozási változó értéket a konfigurációs fájlból, és indítsa újra a szervert, vagy állítsa be dinamikusan a változókat. Ha a dinamikus módszert használta, kilép, és újra bejelentkezik a MySQL konzolba.

Lekérdezési profilalkotási adatok elemzése

Tekintsük a fenti példát:

# Idő: 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 felhasználók WHERE név = "Jesse";

Itt látjuk:

  • A kérelem indításának időpontja
  • A kérelmet benyújtó felhasználó
  • Nyitvatartási igények
  • A zárolás időtartama
  • A kiválasztott sorok száma
  • Az elemzett sorok száma

Ezek az adatok nagyon hasznosak, hiszen segítségével megtalálhatjuk és megszüntethetjük a rendszer lassulás okát. Ezenkívül egy MySQL fejlesztő vagy rendszergazda mindig láthatja a problémás lekérdezéseket, és szeretném megjegyezni, hogy itt sokkal gyorsabban megtalálhatja őket, mint az alkalmazás kódjának tanulmányozásával. A hosszú távú profilozással alacsony fordulatszámon követheti nyomon az üzemi feltételeket.

A mysqldumpslow használata

A napló folyamatosan rögzíti az adatokat, általában sokkal többet ír, mint amennyit kiolvasnak belőle. Nál nél nagy méret log, olvasása problémássá válik. A MySQL tartalmaz egy mysqldumpslow nevű eszközt, amely segít fenntartani a naplók integritását. Maga a program a MySQL-lel van kombinálva (on Linux rendszerek). Használatához kövesse a szükséges parancsotés adja át a naplófájl elérési útját:

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

Számos paraméter segít testreszabni a parancskimenetet. Az alábbi példában az utolsó öt kérést láthatjuk átlagos időtartam szerint rendezve. Ennek eredményeként a napló olvasása sokkal kényelmesebbé válik. (a kimenet módosítva a tényleges naplóértékek megjelenítéséhez):

Szám: 2 Idő=68,34 s (136 s) Zárolás=0,00 s (0 s) Sorok=39892974,5 (79785949), root@localhost SELECT PL.pl_title, P.page_title FROM oldalról P INNER JOIN oldalterület Ppl_név PL. WHERE P.oldal_névtér = N ...

Amit látunk:

  • Számláló – a kérés előfordulásának száma a naplóban
  • Idő – átlagos és teljes kérési idő
  • Zár - asztalzár idő
  • Sorok – A kiválasztott sorok száma

A parancs kizárja a numerikus és karakterlánc-lekérdezési adatokat, ami azt jelenti, hogy az azonos WHERE záradékkal rendelkező lekérdezések azonosnak minősülnek. Ennek az eszköznek köszönhetően nem kell folyamatosan a naplót nézegetnie. A parancsparaméterek nagy száma miatt a kimenetet tetszés szerint rendezheti. Vannak harmadik féltől származó fejlesztések is hasonló funkciókkal, például a pt-query-digest.

Lebontás kérése

Figyelni kell még egy eszközre, amely lehetővé teszi a felosztást összetett lekérdezések. Leggyakrabban a naplóból kell lekérdezni, majd közvetlenül a MySQL konzolon futtatni. Először engedélyeznie kell a profilalkotást, majd futtassa a lekérdezést:

Mysql> SET SESSION profilozás = 1; mysql> USE profile_sampling; mysql> SELECT * FROM felhasználók WHERE név = "Jesse"; mysql> PROFILOK MUTATÁSA;

A profilalkotás engedélyezése után a PROFILOK MUTATÁSA megjelenít egy táblázatot, amely összekapcsolja a Query_ID és az SQL kifejezést. Keresse meg a megfelelő Query_ID-t, és futtassa a következő lekérdezést (a # cseréje a Query_ID-vel):

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

Példa kimenet:

SEQ ÁLLAPOT IDŐTARTAMA 1 kezdődő 0.000046 2 engedélyek ellenőrzése 0.000005 3 nyitó táblázat 0.000036

ÁLLAPOT- egy lépés a kérelem teljesítésének folyamatában, IDŐTARTAM- lépés időtartama másodpercben. Ezt az eszközt nem használják túl gyakran, de néha rendkívül hasznos lehet a lassú lekérdezési teljesítmény okának meghatározásában.

Az oszlopok részletes leírása:

A lépések részletes leírása:

A jegyzet: Ezt az eszközt nem szabad szerver éles üzemmódban használni, kivéve bizonyos lekérdezések elemzésére.

Lassú lekérdezési naplóteljesítmény

Az utolsó kérdés az, hogy a profilalkotás hogyan befolyásolja a szerver egészének teljesítményét. A szerver éles üzemmódjában teljesen biztonságosan használhatja az ilyen naplózást, ez nem érintheti sem a CPU-t, sem az I/O-t. Érdemes azonban odafigyelni a naplófájl méretére, ne váljon túl nagyra. Tapasztalatból szeretném megjegyezni azt is, hogy a long_query_time változó értékét 1 másodpercre vagy magasabbra állítjuk.

Fontos: Ne használja a profilozó eszközt - SET profiling = 1 - az összes kérés rögzítésére, pl. Nem ajánlott a general_log változót használni termék módban és nagy terhelés esetén.

Következtetés

A lekérdezésprofilozás sokat segíthet a problémás lekérdezés elkülönítésében és az általános teljesítmény felmérésében. A fejlesztő azt is tanulmányozhatja, hogyan működnek az alkalmazás MySQL-lekérdezései. A mysqldumpslow eszköz segít megtekinteni és feldolgozni a lekérdezési naplókat. A problémás lekérdezések azonosítása után nincs más hátra, mint hangolni őket a maximális teljesítmény érdekében.




Top