Pitäisikö Mysql-kyselyloki poistaa käytöstä? Mitä ovat "palvelinlokit", kuinka tarkastella palvelinlokeja. Mikä on hidas kyselyloki MySQL:ssä

MySQL-kyselyn profilointi on hyödyllinen tekniikka tietokantapohjaisten sovellusten yleisen suorituskyvyn analysointiin. Keskikokoisia ja suuria sovelluksia kehitettäessä kyselyjä on tyypillisesti satoja hajallaan laajalle koodikannalle, ja tietokanta käsittelee useita kyselyitä sekunnissa. Ilman kyselyprofilointia esiintymisen sijainnin ja syiden määrittäminen on erittäin vaikeaa pullonkauloja sovellukset. Tämä opetusohjelma kuvaa hyödyllisiä kyselyn profilointitekniikoita käyttämällä MySQL:n sisäänrakennettuja työkaluja.

MySQL hidas kyselyloki

MySQL hidas kyselyloki (tai hidas kyselyloki) on loki, jossa MySQL lähettää hitaita ja mahdollisesti ongelmallisia kyselyjä.

Tämä ominaisuus tulee MySQL:n mukana, mutta se on oletuksena poistettu käytöstä. MySQL määrittää, mitkä kyselyt tulee sisällyttää tähän lokiin erityisten muuttujien avulla, joiden avulla voit profiloida kyselyn sovelluksen suorituskykyvaatimusten perusteella. Tyypillisesti kyselyt, joiden käsittely kestää kauemmin, ja kyselyt, joilla on virheelliset indeksit, syötetään tähän lokiin.

Profilointimuuttujat

Peruspalvelinmuuttujat MySQL-hitaiden kyselylokien määrittämiseen ovat:

slow_query_log globaali
slow_query_log_file globaali
long_query_time globaali/istunto
log_queries_not_using_indexes maailmanlaajuisesti
Min_examined_row_limit globaali/istunto

slow_query_log – looginen muuttuja, joka ottaa käyttöön tai poistaa käytöstä hitaan kyselylokin.

slow_query_log_file – kyselylokitiedoston absoluuttinen polku. Tiedostohakemiston on oltava mysqld-käyttäjän omistuksessa ja sillä on oltava asianmukaiset luku- ja kirjoitusoikeudet. Mysql-daemon käynnistetään todennäköisesti mysql-muodossa, mutta varmuuden vuoksi suorita komento Linux-päätteessä:

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

Tulos näyttää nykyisen käyttäjän ja mysqld-käyttäjän.

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

  • long_query_time – aika sekunteina kyselyn pituuden tarkistamiseen. Jos arvo on 5, kaikki pyynnöt, joiden käsittely kestää yli 5 sekuntia, kirjataan lokiin.
  • log_queries_not_using_indexes – Boolen arvo, joka määrittää, kirjataanko kyselyt, jotka eivät käytä indeksejä, lokiin. Analysoitaessa tällaiset kyselyt ovat tärkeitä.
  • min_examined_row_limit – määrittää analysoitavien rivien vähimmäismäärän. Kun arvo on 1000, kaikki alle 1000 riviä jäsentävät kyselyt ohitetaan.

MySQL-palvelinmuuttujat voidaan asettaa MySQL-määritystiedostossa tai dynaamisesti käyttämällä käyttöliittymä tai MySQL-komentorivi. Jos muuttujat on asetettu asetustiedostoon, ne säilyvät, kun palvelin käynnistetään uudelleen, mutta palvelin on käynnistettävä uudelleen niiden aktivoimiseksi. MySQL-määritystiedosto sijaitsee yleensä hakemistossa /etc/my.cnf tai /etc/mysql/my.cnf. Löytääksesi asetustiedoston, kirjoita (sinun on ehkä laajennettava hakusi muihin juurihakemistoihin):

etsi /etc -nimi my.cnf
etsi /usr -nimi my.cnf

Kun olet löytänyt määritystiedoston, lisää tarvittavat muuttujat osioon:


….
hidas kyselyloki = 1
slow-query-log-file = /var/log/mysql/localhost-slow.log
long_query_time = 1
loki-kyselyt-ei-käyttä-indeksejä

Jotta muutokset tulevat voimaan, sinun on käynnistettävä palvelin uudelleen. Jos muutokset on aktivoitava välittömästi, aseta muuttujat dynaamisesti:

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 = "PÄÄLLÄ";
mysql> SET SESSION long_query_time = 1;
mysql> SET SESSION min_tutkittu_rivin_raja = 100;

Muuttujien arvojen tarkistaminen:

mysql> NÄYTÄ MAAILMANLAAJUISET MUUTTUJAT, KUTEN "slow_query_log";
mysql> NÄYTÄ ISTUNTOMUUTTUJAT, KUTEN "long_query_time";

Yksi dynaamisesti muuttuvien MySQL-muuttujien haitoista on, että muuttujat katoavat, kun palvelin käynnistetään uudelleen. Siksi kaikki tärkeät muuttujat, jotka täytyy tallentaa, tulee lisätä tiedostoon.

Profilointikyselyn luominen

Nyt olet perehtynyt hitaiden kyselylokien asetuksiin. Yritä luoda kyselytietoja profilointia varten.

Huomautus: Tässä annettu esimerkki suoritettiin käynnissä olevassa MySQL-esiintymässä ilman, että hitaita kyselylokeja oli määritetty. Nämä testikyselyt voidaan suorittaa kautta GUI tai komentorivi MySQL.

Hitaiden pyyntöjen lokia valvottaessa on hyödyllistä avata kaksi pääteikkunaa: yksi yhteys lähetystä varten MySQL-lauseet, ja toinen on pyyntölokin katselua varten.

Kirjaudu sisään MySQL-palvelimeen käyttämällä konsolia käyttäjänä, jolla on SUPER ADMIN -oikeudet. Aloita luomalla testitietokanta ja -taulukko, lisäämällä siihen valedataa ja ottamalla käyttöön hidas kyselyloki.

Huomautus: Ihannetapauksessa tämä esimerkki toimii parhaiten ympäristössä, jossa ei ole muita MySQL:ää käyttäviä sovelluksia, jotta vältytään kyselylokin sotkusta.

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

mysql USE profile_sampling;


mysql> CREATE TABLE käyttäjät (id TINYINT PRIMARY KEY AUTO_INCREMENT, nimi VARCHAR(255));


mysql> INSERT INTO käyttäjiin (nimi) ARVOT ("Walter"),("Skyler"),("Jesse"),("Hank"),("Walter Jr."),("Marie"),("Saul" "),("Gustavo"),("Hector"),("Mike");


mysql> SET GLOBAL hidas_kyselyloki = 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 pitkä_kyselyn_aika = 10;


mysql> SET min_tutkittu_rivin_raja = 0;

Nyt sinulla on testitietokanta ja taulukko, jossa on tietoja. Hidas kyselyloki on käytössä. Asetimme tarkoituksella pyynnön käsittelyajan korkeaksi ja poistimme rivimäärän tarkistuksen. Voit tarkastella lokia kirjoittamalla:

cd /var/log/mysql
ls -l

Toistaiseksi kansiossa ei pitäisi olla lokia hitaista pyynnöistä, koska Tämä hetki ei ollut pyyntöjä. Jos tällainen loki on jo olemassa, tämä tarkoittaa, että tietokanta on jo kohdannut hitaita kyselyitä sen jälkeen, kun otit käyttöön hitaan kyselyn lokin tuen. Tämä voi vääristää tämän esimerkin tuloksia. Palaa MySQL-välilehdelle ja suorita:

mysql USE profile_sampling;
mysql> SELECT * FROM käyttäjät WHERE id = 1;

Suoritettu kysely yksinkertaisesti hakee tiedot ja käyttää taulukon ensimmäisen avaimen indeksiä. Tämä kysely oli nopea ja käytti indeksiä, joten sitä ei tallenneta hitaan kyselyn lokiin. Palaa hakemistoon ja varmista, ettei kyselylokia ole luotu. Palaa nyt MySQL-ikkunaan ja suorita:

mysql>

Tämä kysely ei käytä indeksiä. Nyt jotain tällaista pitäisi näkyä lokissa /var/log/mysql/localhost-slow.log:

# Aika: 140322 13:54:58

käytä profile_sampling;
SET aikaleima=1395521698;

Vielä yksi esimerkki. Lisää jäsennettävien rivien vähimmäismäärää ja lähetä pyyntö seuraavasti:

mysql> SET min_tutkittu_rivin_raja = 100;
mysql> SELECT * FROM käyttäjät WHERE name = "Walter";

Tietoja ei lisätä lokiin, koska pyynnön aikana analysoitiin alle 100 riviä.

Huomautus: Jos tietoja ei ole lisätty lokiin, sinun on tarkistettava useita tekijöitä. Tarkista ensin sen hakemiston käyttöoikeudet, johon loki luodaan. Sen on oltava mysqld-käyttäjän/-ryhmän omistuksessa ja sillä on oltava chmod 755 -oikeudet. Tarkista sitten, onko palvelimella muita hitaan kyselyn asetuksia, jotka ohittavat asetuksesi. Palauta oletusasetukset poistaaksesi kaikki hitaiden pyyntöjen muuttujat asetustiedostosta ja käynnistääksesi palvelimen uudelleen. Voit myös asettaa globaalit muuttujat oletusarvoihinsa dynaamisesti. Jos teet muutoksia dynaamisesti, kirjaudu ulos ja kirjaudu takaisin MySQL:ään päivittääksesi asetukset.

Kyselyn profilointitietojen analysointi

Harkitse seuraavia tietoja:

# Aika: 140322 13:54:58
#User@Host: root@localhost
# Kyselyaika: 0,000303 Lukitusaika: 0,000090 Lähetetyt rivit: 1 Tutkitut rivit: 10
käytä profile_sampling;
SET aikaleima=1395521698;
SELECT * FROM käyttäjistä WHERE nimi = "Jesse";

Tämä merkintä näyttää:

  • Kyselyn suoritusaika
  • Kuka sen lähetti
  • Kuinka kauan pyynnön käsittely kesti?
  • Pituus
  • Kuinka monta riviä palautettiin
  • Kuinka monta riviä jäsennettiin

Tämä on hyödyllistä, koska kaikki muuttujissa määritettyjä suorituskykyvaatimuksia rikkovat pyynnöt päätyvät lokiin. Näin kehittäjä tai järjestelmänvalvoja voi nopeasti jäljittää pyynnöt, jotka eivät toimi. Lisäksi kyselyn profilointitiedot voivat auttaa sinua määrittämään, mitkä olosuhteet aiheuttavat sovelluksesi huonon suorituskyvyn.

Mysqldumpslow:n käyttö

Profilointi voidaan sisällyttää tietokantapohjaisiin sovelluksiin kohtuullisen tiedonkulun varmistamiseksi.

Lokin koon kasvaessa kaikkien tietojen jäsentäminen on vaikeaa, ja ongelmalliset kyselyt voivat helposti kadota siihen. MySQL tarjoaa työkalun nimeltä mysqldumpslow, joka auttaa välttämään tämän ongelman jakamalla hitaiden kyselyiden lokin. Binaari on linkitetty MySQL:ään (Linuxissa), joten voit yksinkertaisesti suorittaa komennon:

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

Komento voi hyväksyä erilaisia ​​parametreja mukauttaakseen tulostensa. Yllä oleva esimerkki näyttää viisi suosituinta kyselyä keskimääräisen kyselyajan mukaan lajiteltuina. Tällaiset merkkijonot ovat luettavampia ja ryhmitellään myös pyynnöstä.

Lukumäärä: 2 Aika = 68,34 s (136 s) Lukitus = 0,00 s (0 s) Rivit = 39892974,5 (79785949), root@localhost
SELECT PL.pl_title, P.page_title
Sivulta P
INNER JOIN sivulinkit PL
ON PL.pl_namespace = P.sivun_nimiavaruus
WHERE P.page_namespace = N

Tulos näyttää seuraavat tiedot:

  • Count: kuinka monta kertaa pyyntö kirjattiin.
  • Aika: Keskimääräinen ja kokonaispyyntöaika (suluissa).
  • Lukitus: pöydän lukitusaika.
  • Rivit: palautettujen rivien määrä.

Komento sulkee pois numeeriset ja merkkijonoarvot, joten identtisiä kyselyitä eri WHERE-ehdoilla käsitellään samoina. mysqldumpslow-työkalu eliminoi tarpeen tarkistaa jatkuvasti hitaiden kyselyiden lokia, vaan antaa sinun suorittaa säännöllisesti automaattiset tarkastukset. Mysqldumpslow-komentovaihtoehdot mahdollistavat monimutkaisten lausekkeiden suorittamisen.

Pyydä erittelyä

Toinen muistettava profilointityökalu on Complex Query Breakdown Tool. Sen avulla voit tunnistaa ongelmalliset kyselyt hitaasta kyselylokista ja suorittaa sen MySQL:ssä. Ensin sinun on otettava profilointi käyttöön ja suoritettava sitten kysely:

mysql> SET SESSION profilointi = 1;
mysql USE profile_sampling;
mysql> SELECT * FROM käyttäjät WHERE nimi = "Jesse";
mysql> NÄYTÄ PROFIILIT;

Kun profilointi on otettu käyttöön, NÄYTÄ PROFIILIT näyttää taulukon, joka yhdistää kyselytunnisteen SQL-lausekkeeseen. Etsi käynnissä olevaa kyselyä vastaava Query_ID ja suorita seuraava kysely (korvaa # Query_ID:lläsi):

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

Komento palauttaa taulukon:

SEQ OSAVALTIO KESTO
1 alkaa 0.000046
2 lupien tarkistaminen 0.000005
3 avauspöydät 0.000036

STATE on kyselyn suoritusprosessin vaihe, ja DURATION on aika, joka kuluu vaiheen suorittamiseen sekunneissa. Se ei ole kovinkaan hyödyllinen työkalu, mutta se voi auttaa määrittämään, mikä kyselyn suorittamisen osa aiheuttaa eniten viivettä.

Huomautus Huomautus: Tätä työkalua ei tule käyttää tuotantoympäristössä.

Hidas kyselylokin suorituskyky

Jäljelle jää vain selvittää, kuinka hidas kyselyloki vaikuttaa suorituskykyyn. Yleensä on turvallista ajaa hitaita kyselylokeja tuotantoympäristössä; Prosessorin tai I/O:n ei pitäisi vaikuttaa. Sinulla tulee kuitenkin olla strategia lokin koon seurantaa varten, jotta lokista ei tule liian suurta tiedostojärjestelmä. Lisäksi, kun suoritat hidasta kyselylokia tuotantoympäristössä, sinun tulee asettaa long_query_time arvoksi 1 tai suurempi.

Johtopäätös

Hidas kyselyloki voi auttaa sinua tunnistamaan ongelmalliset kyselyt ja arvioimaan kyselyn yleistä suorituskykyä. Näin kehittäjä voi saada yksityiskohtaisen käsityksen siitä, kuinka MySQL-kyselyt suoritetaan sovelluksessa. mysqldumpslow-työkalun avulla voit hallita hitaita kyselylokeja ja sisällyttää ne helposti kehitysprosessiisi. Tunnistamalla ongelmalliset kyselyt voit optimoida kyselyn käsittelyn suorituskyvyn parantamiseksi.

Tunnisteet:

Tapahtumalokit ovat ensimmäinen ja yksinkertaisin työkalu järjestelmän tilan määrittämiseen ja virheiden tunnistamiseen. MySQL:ssä on neljä päälokia:

  • Virheloki— vakiovirheloki, joka kerätään palvelimen ollessa käynnissä (mukaan lukien käynnistys ja pysäytys);
  • Binääriloki— loki kaikista tietokannan muutoskäskyistä, joita tarvitaan replikointiin ja varmuuskopiointiin;
  • Yleinen kyselyloki— pääkyselyloki;
  • Hidas kyselyloki— hitaiden pyyntöjen loki.

Virheloki

Tämä loki sisältää kaikki virheet, jotka tapahtuivat palvelimen ollessa käynnissä, mukaan lukien kriittiset virheet sekä palvelimen sammutukset, palvelimen käynnistykset ja varoitukset. Tästä kannattaa aloittaa järjestelmävian sattuessa. Oletuksena kaikki virheet tulostetaan konsoliin (stderr), voit myös kirjata virheet syslogiin (Debianin oletusarvo) tai erilliseen lokitiedostoon:

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

# Virheet kirjoitetaan tiedostoon mysql_error.log

Suosittelemme pitämään tämän lokin käytössä virheiden tunnistamiseksi nopeasti. Ja ymmärtääksesi mitä tämä tai tuo virhe tarkoittaa, MySQL:llä on perror-apuohjelma:

Shell> perror 13 64 OS error code 13: Lupa estetty Käyttöjärjestelmän virhekoodi 64: Kone ei ole verkossa

# Selvittää virhekoodien merkityksen

Binääri (alias binääri) loki

Kaikki tietokannan muokkauskomennot tallennetaan binaarilokiin, mikä on hyödyllistä replikointia ja palautusta varten.

Se syttyy näin:

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

# Osoittaa sijainnin, käyttöiän ja enimmäiskoko tiedosto

Huomaa, että jos et aio skaalata järjestelmää ja toteuttaa vikasietoisuutta, on parempi olla ottamatta käyttöön binaarilokia. Se on resurssiintensiivinen ja vähentää järjestelmän suorituskykyä.

Pyyntöloki

Tämä loki sisältää kaikki vastaanotetut SQL-kyselyt ja tiedot asiakasyhteyksistä. Voi olla hyödyllinen indeksin analysoinnissa ja optimoinnissa sekä virheellisten kyselyiden tunnistamisessa:

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

# Sisältää lokin ja osoittaa tiedoston sijainnin

Voit myös ottaa sen käyttöön tai poistaa sen käytöstä, kun MySQL-palvelin on käynnissä:

SET GLOBAL general_log = "PÄÄLLÄ"; SET GLOBAL general_log = "OFF";

# Sinun ei tarvitse käynnistää palvelinta uudelleen käyttääksesi sitä

Hidas pyyntöloki

Loki on hyödyllinen tunnistamaan hitaita eli tehottomia kyselyitä. Lue lisää tästä artikkelista.

Lokien katselu

Jos haluat tarkastella lokeja Debianissa (Ubuntu), sinun on suoritettava:

# Virhelokin häntä -f /var/log/syslog #Kyselylokin häntä -f /var/log/mysql/mysql.log # Kirjaa hitaat pyynnöt tail -f /var/log/mysql/mysql-slow.log

# Jos lokeja ei ole määritetty erikseen, ne sijaitsevat hakemistossa /var/lib/mysql

Lokin kierto

Älä unohda pakata (arkistoida, kiertää) lokitiedostoja, jotta ne vievät vähemmän tilaa palvelimella. Voit tehdä tämän käyttämällä apuohjelmaa logrota muokkaamalla asetustiedostoa /etc/logrotate.d/mysql-server:

# - Laitoin kaiken yhteen lohkoon ja lisäsin jaetut skriptit, jotta mysql saa # flush-logs"d vain kerran. # Muuten binäärilokit lisääntyisivät automaattisesti n kertaa joka päivä. # - Virheloki on vanhentunut, viestit menevät nyt syslogiin./var/log/mysql.log /var/log/mysql/mysql.log /var/log/mysql/mysql-slow.log( päivittäinen rotate 7 missingok luo 640 mysql adm pakkaa sharescripts postrotate test -x /usr/bin/mysqladmin || exit 0 # Jos tämä epäonnistuu, tarkista debian.conf! MYADMIN="/usr/bin/mysqladmin --defaults-file=/etc/mysql/debian.cnf" if [ -z "`$MYADMIN ping 2>/dev/null`" ]; sitten # Ei todellakaan mysqld:tä vai puuttuuko debian-sys-maint-käyttäjä? # Jos näin tapahtuu eikä kyseessä ole virhe, ilmoita virheestä. #if ps cax | grep -q mysqld; sitten if killall -q -s0 -umysql mysqld; sitten poistu 1 fi else $MYADMIN flush-logs fi endscript )

# Pakkaa ja arkistoi tarvittavat lokit, puhdistaa tiedostot

DDL-loki

MySQL ylläpitää myös tietokielilokia. Se kerää tietoja toiminnoista, kuten DROP_TABLE ja ALTER_TABLE. Lokia käytetään palautumiseen tällaisten toimintojen aikana ilmenneistä vioista. DDL-loki on binääritiedosto, eikä sitä ole tarkoitettu käyttäjän luettavaksi, joten älä muokkaa tai poista sitä.

Tärkein

Ota aina virheloki käyttöön, käytä kyselylokia tarkistaaksesi sovelluksen yhteyden tietokantaan, tarkista kyselyt ja toiminta. Hitaiden kyselyiden loki on hyödyllinen MySQL-suorituskyvyn optimoinnissa.

Konsepti

Palvelinlokit (lokitiedostot, palvelinloki)- palvelimelle tallennetut tiedostot, jotka sisältävät palvelimen järjestelmätietoja sekä kaikki mahdolliset tiedot verkkoresurssin vierailijasta.

Järjestelmänvalvojat käyttävät lokeja vierailijoiden analysointiin, tutkia tiettyjen käyttäjäryhmien käyttäytymismalleja sekä hankkia niistä erilaisia ​​tietoja, kuten: käytetty selain, IP-osoite, tiedot asiakkaan maantieteellisestä sijainnista ja paljon muuta. Analyysin lisäksi tällä tavalla voit saada selville luvattomasta pääsystä sivustolle, selvittää tarkemmin kuka sen tarkasti teki ja siirtää tapausta koskevat tiedot asianmukaisille viranomaisille.

Lokitiedoston tiedot puhtaassa muodossaan eivät ole ymmärrettäviä tavallisille käyttäjille, jotka näkevät kaikessa tässä vain joukon merkkejä käsittämättömässä järjestyksessä. Mutta varten järjestelmänvalvojat ja web-kehittäjille, tämä on erittäin luettavaa tekstiä ja varsin hyödyllistä tietoa.


Tapahtumien sarja

Joka kerta, kun asiakas käyttää verkkoresurssia, useita tapahtumia käynnistyy kerralla, joiden järjestyksestä puhumme.

1. Sivupyynnön tekeminen. Kun syötät osoitteen selainriville tai seuraat aktiivista verkkolinkkiä esimerkiksi hakukoneen tulossivulta, selain hakee ja muodostaa yhteyden palvelimeen, jolla sivu sijaitsee, ja tekee siitä pyynnön. Samalla se lähettää seuraavat tiedot palvelimelle:
- sivua pyytävän asiakastietokoneen IP-osoite (jos käytät välityspalvelinta, välityspalvelimesi IP-osoite);
- käyttäjän pyytämän Internet-sivun osoite (IP-osoite);
- tarkka aika ja päivämäärä, jolloin pyyntö tehtiin;
- tiedot asiakkaan todellisesta sijainnista (jos välityspalvelinta käytetään, niin todellinen välityspalvelinosoite);
- tiedot asiakkaan käyttämästä selaimesta (nimi, versio jne.);
- tiedot verkkosivusta, jolta asiakas siirtyi.

2. Pyydettyjen tietojen siirto. Pyydetyt tiedot (verkkosivu, tiedostot, evästeet jne.) siirretään palvelimelta käyttäjän tietokoneelle.

3. Kirjoita palvelimen lokiin. Kaiken jälkeen tapahtuu lokimerkintä, joka osoittaa kaikki tiedot, jotka ilmestyivät kahdessa edellisessä tapahtumassa. Tämä on kaikki ensimmäisessä kappaleessa lähetetyt tiedot sekä tiedot lähetetyistä tiedoista.

Kuinka tarkastella palvelimen lokeja

Lokitiedostot tallennetaan tiedostoon access.log riippumatta siitä, minkä tyyppistä verkkopalvelinta käytät (Apache, Nginx, squid-välityspalvelin jne.) Tämä tiedosto on tekstiasiakirja, jonka jokaiselle riville on kirjoitettu yksi valitus. Tallennusmuodot sisään access.log melko paljon, mutta suosituin on yhdistetty, jossa merkinnällä on seuraava muoto ja järjestys:

Koodi: %h %l %u %t \"%r\" %>s %b \"%(Referer)i\" \"%(User-Agent)i\"
Missä:

%h- isäntä/IP-osoite, josta pyyntö tehtiin;
%t- pyynnön ajankohta palvelimelle ja palvelimen aikavyöhyke;
%r- pyynnön versio, sisältö ja tyyppi;
%s- HTTP-tilakoodi;
%b- palvelimen lähettämien tavujen määrä;
%(Referer)- pyynnön URL-lähde;
%(Käyttäjä agentti)- HTTP-otsikko, jossa on tietoja pyynnöstä (asiakassovellus, kieli jne.);
%(isäntä)- Virtuaalipalvelimen nimi, jota käytetään.

Kun tämä rivi on valmis, se näyttää tältä:

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

Lokien manuaalinen lukeminen vie melko paljon aikaa ja vaivaa. Siksi kokeneet webmasterit käyttävät erityistä ohjelmistoa nimeltä "Lokitiedostojen analysointi". He analysoivat kaiken datan, jota ihmisten on melko vaikea lukea, ja tuottavat jäsenneltyä dataa. Nämä ovat ohjelmia, kuten: Analoginen, WebAnalizer, Webalizer, Awstats, Webtrends jne. Erikoistyypit ohjelmisto melko paljon, niiden joukossa on mm maksullisia ohjelmia, ja ilmainen. Siksi olen varma, että jokainen löytää jotain mieleisekseen.

Mistä löytää sivuston lokit

Jos sinulla on säännöllinen isännöinti, joudut todennäköisesti kirjoittamaan isännöitsijällesi ja pyytämään häneltä lokeja. Voit myös usein pyytää niitä isännöintipaneelin kautta. Eri isännöitsijät tekevät sen eri tavalla. Jos haluat esimerkiksi pyytää isännöitsijältäni, napsauta vain kotisivu paneelit:


Jos sinulla on pääsy järjestelmäkansiot palvelimelle, löydät lokit osoitteesta /etc/httpd/logs/access_log 99 tapauksessa 100:sta.

Virheloki error.log

Error.log- tiedosto, jossa myös lokit säilytetään. Mutta ei vierailijoita, vaan palvelimella tapahtuneita virheitä. Kuten on asianlaita access.log, jokainen tiedoston rivi on vastuussa yhdestä tapahtuneesta virheestä. Tallennus suoritetaan ottaen huomioon seuraavat tiedot: virheen tarkka päivämäärä ja kellonaika, IP-osoite, johon virhe on lähetetty, virheen tyyppi sekä sen esiintymisen syy.

Johtopäätös

Lokit ovat varsin tehokas ja informatiivinen työkalu. Mutta nykyään ne korvataan työkaluilla, kuten Yandex.Metrica, Google Analytics jne., mikä helpottaa elämäämme. Jos kuitenkin aiot kehittyä, kasvaa ja oppia jotain uutta, suosittelen ehdottomasti tutustumaan tähän aiheeseen paremmin.

Profilointikyselyt Mysqlissa käytetään arvioimaan sovelluksesi suorituskykyä. Kun kehität keskikokoisia ja suuria sovelluksia, joudut käsittelemään satoja pyyntöjä, jotka on jaettu koodiisi ja jotka suoritetaan joka sekunti. Ilman kyselyn profilointitekniikoita voi olla erittäin vaikeaa selvittää, mikä aiheuttaa sovelluksesi suorituskyvyn heikkenemistä.

Mikä on hidas kyselyloki MySQL:ssä?

MySQL Slow Query Log - loki, joka ilmoittaa hitaat ja mahdollisesti ongelmalliset kyselyt. MySQL tukee tätä toimintoa oletuksena, mutta se on poistettu käytöstä. Asettamalla tiettyjä palvelinmuuttujia voimme määrittää, mistä pyynnöistä olemme kiinnostuneita. Useimmiten tarvitsemme kyselyitä, joiden suorittaminen vaatii tietyn ajan, tai kyselyitä, jotka eivät käsittele indeksejä oikein.

Profilointimuuttujien asettaminen

Tärkeimmät muuttujat kyselylokin määrittämiseen:

Slow_query_log G hidas_kyselyn_lokitiedosto G long_query_time G / S log_queries_not_using_indexes G min_examined_row_limit G / S

Kommentti: G - globaalit muuttujat, S - järjestelmämuuttujat

  • slow_query_log - boolen arvo, mukaan lukien loki
  • slow_query_log_file - absoluuttinen polku lokitiedostoon. Hakemiston omistajan on oltava käyttäjä mysqld, ja hakemistolla on oltava oikeat luku- ja kirjoitusoikeudet. Useimmiten mysql-daemon toimii käyttäjänä mysql.

Tarkista suorittamalla seuraavat komennot:

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

Komennon tulos antaa sinulle nykyisen käyttäjän ja mysqld-käyttäjän nimet. Esimerkki /var/log/mysql-hakemiston asettamisesta:

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

  • long_query_time - aika sekunteina kyselyn keston tarkistamiseen. Jos esimerkiksi arvo on 5, kaikki yli 5 sekuntia kestävät pyynnöt kirjataan lokiin.
  • log_queries_not_using_indexes - boolen arvo, mahdollistaa kyselyiden tallentamisen, jotka eivät käytä indeksejä. Tällaiset kyselyt ovat erittäin tärkeitä analyysissä.
  • min_examined_row_limit - määrittää analysoitavien tietorivien lukumäärän vähimmäisarvon. Arvo 1000 ohittaa kyselyt, jotka palauttavat alle 1000 riviä arvoja.

Nämä muuttujat voidaan asettaa MySQL-määritystiedostossa dynaamisesti MySQL-käyttöliittymän tai MySQL-komentorivin kautta. Jos muuttujat on määritetty asetustiedostossa, palvelin asentaa ne seuraavan käynnistyksen yhteydessä. Tyypillisesti tämä tiedosto sijaitsee osoitteessa /etc, /usr, /etc/my.cnf tai /etc/mysql/my.cnf. Tässä ovat komennot määritystiedoston etsimiseen (joskus sinun pitäisi laajentaa haku muihin juurihakemistoihin):

Etsi /etc -nimi my.cnf Etsi /usr -nimi my.cnf

Kun löydät tiedoston, lisää tarvittavat muuttujat osioon:

; ... slow-query-log = 1 hidas-kysely-lokitiedosto = /var/log/mysql/localhost-slow.log long_query_time = 1 log-queries-not-using-indexes ; tässä ei tarvita mitään merkitystä

Muutokset tulevat voimaan vasta, kun seuraavan kerran käynnistät MySQL:n; jos sinun on muutettava parametreja dynaamisesti, käytä muita tapoja asettaa muuttujat:

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 = "PÄÄLLÄ"; mysql> SET SESSION long_query_time = 1; mysql> SET SESSION min_tutkittu_rivin_raja = 100;

Voit tarkistaa muuttujien arvot seuraavasti:

Mysql> NÄYTÄ MAAILMANLAAJUISET MUUTTUJAT, KUTEN "slow_query_log"; mysql> NÄYTÄ ISTUNTOMUUTTUJAT, KUTEN "long_query_time";

Dynaamisen asennuksen suurin haittapuoli on, että arvot menetetään järjestelmän käynnistyessä. On suositeltavaa määrittää tärkeät parametrit MySQL-konfiguraatiossa.

Muistilappu: Syntaksi parametrien dynaamiselle asetukselle kautta SET-komento ja asetustiedoston käyttö on hieman erilaista, esimerkiksi slow_query_log / slow-query-log . Löydät täydellisen syntaksin kuvauksen virallisesta DBMS-dokumentaatiosta. Optio-tiedostomuotoa käytetään konfigurointitiedostoon, System Variable Name - muuttujien nimet, kun arvot asetetaan dynaamisesti.

Tietojen luominen kyselyn profilointia varten

Olemme käyneet läpi profiloinnin asettamisen pääkohdat, nyt luomme meitä kiinnostavat kyselyt. Tätä esimerkkiä käytettiin juoksussa MySQL-palvelin ilman alustavia lokiasetuksia. Esimerkkikyselyt voidaan käynnistää sekä MySQL GUI- että DBMS-komentotyökalujen kautta. Hitaiden kyselyiden lokia valvottaessa on tavallista avata kaksi ikkunaa yhteyden avulla: toinen kyselyiden suorittamista varten, toinen lokin katselua varten.

$> mysql -u -p mysql> CREATE DATABASE profile_sampling; mysql USE profile_sampling; mysql> CREATE TABLE käyttäjät (id TINYINT PRIMARY KEY AUTO_INCREMENT, nimi VARCHAR(255)); mysql> INSERT INTO käyttäjiin (nimi) ARVOT ("Walter"),("Skyler"),("Jesse"),("Hank"),("Walter Jr."),("Marie"),("Saul" "),("Gustavo"),("Hector"),("Mike"); mysql> SET GLOBAL hidas_kyselyloki = 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 pitkä_kyselyn_aika = 10; mysql> SET min_tutkittu_rivin_raja = 0;

Nyt meillä on tietokanta testitiedoilla. Aloitimme profiloinnin, mutta asetimme tarkoituksella vasteajan ja rivien määrän pieneksi. Voit tarkastella lokia komennolla:

Cd /var/log/mysql ls -l

Teoriassa lokitiedostoa ei pitäisi vielä olla olemassa, koska emme ole tehneet kyselyjä tietokantaan. Jos se on olemassa, se tarkoittaa, että profilointi on määritetty aiemmin, ja tämä voi vääristää esimerkin tuloksia. Suorita konsolissa:

Mysql USE profile_sampling; mysql> SELECT * FROM käyttäjät WHERE id = 1;

Kyselymme käyttää taulukon Primary Key -indeksiä. Pyyntö käsiteltiin erittäin nopeasti indeksin avulla, joten sen ei pitäisi näkyä lokissa. Huomaa, että lokitiedostoa ei olisi pitänyt luoda.

Tee nyt seuraava:

Mysql> SELECT * FROM käyttäjät WHERE nimi = "Jesse";

Tässä emme käyttäneet indeksejä. Meidän pitäisi nyt nähdä tämä pyyntö lokissa:

Sudo cat /var/log/mysql/localhost-slow.log # Aika: 140322 13:54:58 # User@Host: root @ localhost # Query_time: 0.000303 Lock_time: 0.000090 Lähetetyt rivit: 1 riviä 1 käytetty profiili; SET aikaleima=1395521698; SELECT * FROM käyttäjistä WHERE nimi = "Jesse";

Katsotaanpa toista esimerkkiä. Nosta rivien määrää vastauksessa ja suorita seuraava kysely:

Mysql> SET min_tutkittu_rivin_raja = 100; mysql> SELECT * FROM käyttäjät WHERE name = "Walter";

Pyyntö ei näy lokissa, koska emme ylittäneet 100 riviä vastauksessa pyyntöön.

Muistilappu: Jos tiedot eivät näy lokissa, sinun on ensin otettava huomioon seuraavat tekijät. Ensimmäinen on oikeudet hakemistoon, johon lokitiedosto on tallennettu. Ryhmän ja käyttäjän on vastattava mysqld-käyttäjää, oikeuksien on oltava chmod 755. Toiseksi profilointi on saattanut olla määritetty aiemmin. Poista kaikki olemassa olevat profilointimuuttujien arvot asetustiedostosta ja käynnistä palvelin uudelleen tai aseta muuttujat dynaamisesti. Jos käytit dynaamista menetelmää, poistut ja kirjaudut takaisin MySQL-konsoliin.

Kyselyn profilointitietojen analyysi

Harkitse yllä olevaa esimerkkiä:

# Aika: 140322 13:54:58 # User@Host: root @ localhost # Query_time: 0.000303 Lock_time: 0.000090 Lähetetyt rivit: 1 Tutkitut rivit: 10 käytä profiilin näytteenottoa; SET aikaleima=1395521698; SELECT * FROM käyttäjistä WHERE nimi = "Jesse";

Tässä näemme:

  • Aika, jolloin pyyntö aloitettiin
  • Pyynnön tehnyt käyttäjä
  • Aukioloajat tiedustelut
  • Lukon kesto
  • Valittujen rivien määrä
  • Jäsennettyjen rivien määrä

Nämä tiedot ovat erittäin hyödyllisiä, koska niiden avulla voimme löytää ja poistaa järjestelmän hidastumisen syyn. Lisäksi MySQL-kehittäjä tai -järjestelmänvalvoja näkee aina ongelmalliset kyselyt ja haluaisin huomioida, että niiden löytäminen täältä on paljon nopeampaa kuin sovelluskoodia tutkimalla. Pitkäaikaisella profiloinnilla voit seurata käyttöolosuhteita alhaisella nopeudella.

Mysqldumpslow:n käyttö

Loki tallentaa jatkuvasti tietoja, yleensä se kirjoittaa paljon enemmän kuin siitä luetaan. klo suurikokoinen loki, sen lukemisesta tulee ongelmallista. MySQL sisältää mysqldumpslow-nimisen työkalun, joka auttaa ylläpitämään lokin eheyttä. Itse ohjelma on yhdistetty MySQL:ään (on Linux-järjestelmät). Käytä sitä seuraamalla tarvittava komento ja välitä polku lokitiedostoon:

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

On olemassa useita parametreja, jotka auttavat sinua mukauttamaan komennon tulostetta. Alla olevassa esimerkissä näemme viisi viimeistä pyyntöä lajiteltuina keskimääräisen keston mukaan. Tämän seurauksena lokin lukemisesta tulee paljon helpompaa. (tulostusta muokattu näyttämään todelliset lokiarvot):

Lukumäärä: 2 Aika=68.34s (136s) Lukitus=0.00s (0s) Rivit=39892974.5 (79785949), root@localhost SELECT PL.pl_title, P.page_title FROM sivulta P SISÄLLINEN LIITTYMINEN sivutila Ppl_nimi =PL. WHERE P.page_namespace = N ...

Mitä näemme:

  • Count - pyynnön esiintymisten lukumäärä lokissa
  • Aika - keskimääräinen ja kokonaispyyntöaika
  • Lukko - pöydän lukitusaika
  • Rivit – Valittujen rivien määrä

Komento sulkee pois numeeriset ja merkkijonokyselytiedot, mikä tarkoittaa, että kyselyt, joissa on sama WHERE-lause, katsotaan samoina. Tämän työkalun ansiosta sinun ei tarvitse jatkuvasti katsoa lokia. Komentoparametrien suuren määrän vuoksi voit lajitella tulosteet haluamallasi tavalla. On myös kolmannen osapuolen kehitystä, joilla on samanlaiset toiminnot, esimerkiksi pt-query-digest.

Pyydä erittelyä

Sinun tulisi kiinnittää huomiota vielä yhteen työkaluun, jonka avulla voit jakaa monimutkaiset kyselyt. Useimmiten sinun on otettava kysely lokista ja suoritettava se suoraan MySQL-konsolissa. Ensin sinun on otettava profilointi käyttöön ja suoritettava sitten kysely:

Mysql> SET SESSION profilointi = 1; mysql USE profile_sampling; mysql> SELECT * FROM käyttäjät WHERE nimi = "Jesse"; mysql> NÄYTÄ PROFIILIT;

Kun profilointi on otettu käyttöön, SHOW PROFILES näyttää taulukon, joka yhdistää Query_ID- ja SQL-lausekkeen. Etsi vastaava Query_ID ja suorita seuraava kysely (korvaa # Query_ID:lläsi):

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

Esimerkkituloste:

SEQ STATE DURATION 1 alkaen 0,000046 2 tarkistuslupien 0,000005 3 aloitustaulukkoa 0,000036

OSAVALTIO- pyynnön suorittamisprosessin vaihe, KESTO- askeleen kesto sekunneissa. Tätä työkalua ei käytetä kovin usein, mutta joskus se voi olla erittäin hyödyllinen määritettäessä hitaan kyselyn suorituskyvyn syytä.

Yksityiskohtainen kuvaus sarakkeista:

Yksityiskohtainen kuvaus vaiheista:

Muistilappu: Tätä työkalua ei tule käyttää palvelimen tuotantotilassa, paitsi tiettyjen kyselyiden analysointiin.

Hidas kyselylokin suorituskyky

Viimeinen kysymys on, kuinka profilointi vaikuttaa palvelimen suorituskykyyn kokonaisuutena. Palvelimen tuotantotilassa voit käyttää tällaista kirjaamista melko turvallisesti, sen ei pitäisi vaikuttaa prosessoriin tai I/O:han. Lokitiedoston kokoon kannattaa kuitenkin kiinnittää huomiota, se ei saa kasvaa kohtuuttoman suureksi. Haluaisin myös kokemuksesta huomata, että long_query_time-muuttujan arvoksi asetetaan 1 sekunti tai suurempi.

Tärkeä: Älä käytä profilointityökalua - SET profiling = 1 - kaikkien pyyntöjen tallentamiseen, ts. General_log-muuttujan käyttöä tuotetilassa ja raskaan kuormituksen aikana ei suositella.

Johtopäätös

Kyselyprofilointi voi auttaa sinua paljon ongelmallisen kyselyn eristämisessä ja yleisen suorituskyvyn arvioinnissa. Kehittäjä voi myös tutkia, kuinka hänen sovelluksensa MySQL-kyselyt toimivat. Mysqldumpslow-työkalun avulla voit tarkastella ja käsitellä kyselylokeja. Kun ongelmalliset kyselyt on tunnistettu, jää vain virittää ne mahdollisimman tehokkaaksi.




Yläosa