sql >> Database teknologi >  >> RDS >> Mysql

MySQL-ydelse:Identifikation af lange forespørgsler

Hver MySQL-understøttet applikation kan drage fordel af en finjusteret databaseserver. Liquid Web Heroic Support-teamet er stødt på adskillige situationer i årenes løb, hvor nogle mindre justeringer har gjort en verden til forskel i webstedets og applikationens ydeevne. I denne serie af artikler har vi skitseret nogle af de mere almindelige anbefalinger, der har haft størst indflydelse på ydeevnen.

Preflight Check

Denne artikel gælder for de fleste Linux-baserede MySQL VPS-servere. Dette inkluderer, men er ikke begrænset til, både traditionelle dedikerede og Cloud VPS-servere, der kører en række almindelige Linux-distributioner. Artiklen kan bruges med følgende Liquid Web-systemtyper:

  • Kernestyret CentOS 6x/7x
  • Kernestyret Ubuntu 14.04/16.04
  • Fuldt administreret CentOS 6/7 cPanel
  • Fuldt administreret CentOS 7 Plesk Onyx 17
  • Selvadministrerede Linux-servere
BemærkSelvstyrede systemer, som har fravalgt direkte support, kan drage fordel af de teknikker, der er beskrevet her, men Liquid Web Heroic Support Team kan ikke tilbyde direkte hjælp på disse servertyper.

Denne serie af artikler forudsætter kendskab til følgende grundlæggende systemadministrationskoncepter:

  • SSH-forbindelser og grundlæggende navigation i standard Linux-kommandolinje-shell-miljøet.
  • Åbning, redigering og lagring af filer i Vim eller en valgt systemeditor.
  • MySQL interaktiv tilstand og generel MySQL-forespørgselssyntaks.

Hvad er MySQL-optimering?

Der er ingen klart defineret definition af begrebet MySQL-optimering. Det kan betyde noget forskelligt afhængigt af personen,  administratoren, gruppen eller virksomheden. For denne serie af artikler om MySQL-optimering vil vi definere MySQL-optimering som: Konfigurationen af ​​en MySQL- eller MariaDB-server, der er konfigureret til at undgå almindeligt forekommende flaskehalse, som diskuteres i denne serie af artikler.

Hvad er en flaskehals?

Meget lig halsen på en sodavandsflaske, er en flaskehals som et teknisk udtryk et punkt i en applikations- eller serverkonfiguration, hvor en lille mængde trafik eller data kan passere igennem uden problemer. En større mængde af den samme type trafik eller data er imidlertid forhindret eller blokeret og kan ikke fungere som den er. Se følgende eksempel på en konfigurationsflaskehals:

I dette eksempel er serveren i stand til at håndtere 10 forbindelser samtidigt. Konfigurationen accepterer dog kun 5 forbindelser. Dette problem ville ikke vise sig, så længe der var 5 eller færre forbindelser på én gang. Men når trafikken ramper op til 10 forbindelser, begynder halvdelen af ​​dem at fejle på grund af ubrugte ressourcer i serverkonfigurationen. Ovenstående eksempler illustrerer flaskehalsformen, hvor den får sit navn versus en optimeret konfiguration, som korrigerer flaskehalsen.

Hvornår skal jeg optimere min MySQL-database?

Ideelt set bør justering af databasens ydeevne ske regelmæssigt, og før produktiviteten påvirkes. Det er bedste praksis at udføre ugentlige eller månedlige revisioner af databasens ydeevne for at forhindre problemer i at påvirke applikationer negativt. De mest åbenlyse symptomer på præstationsproblemer er:

  • Forespørgsler stables op og fuldføres aldrig i MySQL-procestabellen.
  • Applikationer eller websteder, der bruger databasen, bliver træge.
  • Fejl ved forbindelsestimeout, især i myldretiden.

Selvom det er normalt, at der kører flere samtidige forespørgsler på én gang på et travlt system, bliver det et problem, når disse forespørgsler tager for lang tid at afslutte regelmæssigt. Selvom den specifikke tærskel varierer afhængigt af system og applikation, vil gennemsnitlige forespørgselstider, der overstiger flere sekunder, manifestere sig som en afmatning på vedhæftede websteder og applikationer. Disse opbremsninger kan nogle gange starte i det små og forblive ubemærket, indtil en stor trafikstigning rammer en bestemt flaskehals.

Identifikation af præstationsproblemer

At vide, hvordan man undersøger MySQL-procestabellen er afgørende for at diagnosticere den specifikke flaskehals, der stødes på. Der er en række måder at se procestabellen på afhængigt af din særlige server og præference. For kortheds skyld vil denne serie fokusere på de mest almindelige metoder, der bruges via Secure Shell (SSH) adgang:

Metode 1. Brug af MySQL-procestabellen

Brug 'mysqladmin ' kommandolinjeværktøj med flaget 'procesliste ' eller 'proc ' for kort. (Tilføjelse af flaget "statistik ' eller 'stat ’ for kort vil vise kørende statistik for forespørgsler siden MySQL's sidste genstart.)

Kommando:

mysqladmin proc stat 

Output:

+-------+------+------+-----+---- -----+------+-------+ | Id | Bruger | Vært | db | Kommando | Tid | Stat | Info | Fremskridt | +-------+------+------------+------+---+ ------+-------+---------------------+--------+ | 77255 | rod | lokalvært | ansatte | Forespørgsel | 150 | | kald While_Loop2() | 0.000 | | 77285 | rod | lokalvært | | Forespørgsel | 0 | init | vis procesliste | 0.000 | +-------+------+------------+------+---+ ------+-------+---------------------+--------+ Oppetid:861755 Tråde:2 spørgsmål:20961045 Langsomme forespørgsler:0 Åbninger:2976 Skylletabeller:1 Åbne tabeller:1011 Forespørgsler pr. sekund gennemsnit:24.323 Bemærk:Pro :Brugt på shell-grænsefladen gør dette pipeoutput til andre scripts og værktøjer nemt.Con :Procestabellens infokolonne er altid afkortet, så den giver ikke den fulde forespørgsel på længere forespørgsler

Metode 2:Brug af MySQL-procestabellen

Kør 'vis procesliste;'-forespørgslen fra MySQL interaktiv tilstand-prompt. (Aat tilføje ' fuld ’  modifikator til kommandoen deaktiverer trunkering af Information kolonne. Dette er nødvendigt, når du ser lange forespørgsler.)

Kommando:

vis procesliste; 

Output:

MariaDB [(ingen)]> vis fuld procesliste; +-------+------+------------+------+---+ ------+-------+-----------------------+----------+ | Id | Bruger | Vært | db | Kommando | Tid | Stat | Info | Fremskridt | +-------+------+------------+------+---+ ------+-------+-----------------------+----------+ | 77006 | rod | lokalvært | ansatte | Forespørgsel | 151 | NULL | kald While_Loop2() | 0.000 | | 77021 | rod | lokalvært | NULL | Forespørgsel | 0 | init | vis fuld procesliste | 0.000 | +-------+------+------------+------+---+ ------+-------+-----------------------+----------+  
Pro :Brug af den fulde modifikator giver mulighed for at se hele forespørgslen på længere forespørgsler.Con :MySQL Interactive-tilstand kan ikke få adgang til scripts og værktøjer, der er tilgængelige i shell-grænsefladen.

Brug af den langsomme forespørgselslog

Et andet værdifuldt værktøj i  MySQL er den inkluderede funktion til langsom forespørgselslogning. Denne funktion er den foretrukne metode til regelmæssigt at finde langvarige forespørgsler. Der er flere tilgængelige direktiver for at justere denne funktion. De mest almindeligt nødvendige indstillinger er dog:

slow_query_log aktiver/deaktiver den langsomme forespørgselslog
slow_query_log_file navn og sti til logfilen for langsomme forespørgsler
long_query_time tid i sekunder/mikrosekunder definerer en langsom forespørgsel

Disse direktiver er angivet i [mysqld]-sektionen af ​​MySQL-konfigurationsfilen, der er placeret på /etc/my.cnf og vil kræve en genstart af MySQL-tjenesten, før de træder i kraft. Se eksemplet nedenfor for formatering:

Advarsel:Der er et problem med stor diskplads med den langsomme forespørgselslogfil, som skal behandles konstant, indtil funktionen langsom forespørgselslog er deaktiveret. Husk, jo lavere dit long_query_time-direktiv er, jo hurtigere fylder den langsomme forespørgselslog en diskpartition op
[mysqld] log-error=/var/lib/mysql/mysql.err innodb_file_per_table=1 default-storage- engine=innodb innodb_buffer_pool_size=128M innodb_log_file_size=128M max_connections=300 key_buffer_size =8M slow_query_log=1 slow_query_log_file=/var/lib/mysql/slowquery.log=5_query_time> 

Når den langsomme forespørgselslog er aktiveret, skal du med jævne mellemrum følge op på den for at gennemgå uregerlige forespørgsler, der skal justeres for bedre ydeevne. For at analysere den langsomme forespørgselslogfil kan du parse den direkte for at gennemgå dens indhold. Følgende eksempel viser statistikken for eksempelforespørgslen, der kørte længere end de konfigurerede 5 sekunder:

ForsigtigDer er et præstationshit taget ved at aktivere funktionen langsom forespørgselslog. Dette skyldes de yderligere rutiner, der er nødvendige for at analysere hver forespørgsel, samt den nødvendige I/O for at skrive de nødvendige forespørgsler til logfilen. På grund af dette betragtes det som bedste praksis på produktionssystemer at deaktivere den langsomme forespørgselslog. Den langsomme forespørgselslog bør kun forblive aktiveret i en bestemt varighed, når man aktivt leder efter besværlige forespørgsler, der kan påvirke applikationen eller webstedet.
# Tid:180717 0:23:28 # Bruger@Vært:root[root] @ localhost [] # Tråd_id:32 Skema:ansatte QC_hit:Nej # Forespørgselstid:627.163085 Låsetid:0.000021 Rows_sendt:0 Rows_sendt:0 0 # Rows_affected:0 brug medarbejdere; SET tidsstempel=1531801408; kald While_Loop2(); 

Du kan eventuelt bruge kommandolinjeværktøjet mysqldumpslow, som analyserer den langsomme forespørgselslogfil og grupperer som forespørgsler sammen undtagen værdier af tal og strengdata:

~ $ mysqldumpslow -a /var/lib/mysql/slowquery.log Læser mysql langsom forespørgselslog fra /var/lib/mysql/slowquery.log Antal:2 Time=316.67s (633s) Lock=0.00 s (0s) Rows_sent=0.5 (1), Rows_examined=0.0 (0), Rows_affected=0.0 (0), root[root]@localhost call While_Loop2() 

(For brugsoplysninger besøg MySQL-dokumentationen her - mysqldumpslow — Opsummer langsomme forespørgselslogfiler)

Konklusion

Således afslutter den første del af vores serie af databaseoptimering og giver os et solidt grundlag at referere til i benchmark-formål. Selvom databaseproblemer kan være komplicerede, vil vores serie nedbryde disse koncepter for at give midler til at optimere din database gennem databasekonvertering, tabelkonvertering og indeksering.

Hvordan kan vi hjælpe?

Vi er stolte af at være de mest hjælpsomme mennesker inden for Hosting™!

Vores supportteams er fyldt med erfarne Linux-teknikere og talentfulde systemadministratorer, som har indgående kendskab til flere webhostingteknologier, især dem, der er diskuteret i denne artikel.

Skulle du have spørgsmål vedrørende denne information, er vi altid til rådighed til at besvare eventuelle spørgsmål vedrørende denne artikel, 24 timer i døgnet, 7 dage om ugen 365 dage om året.

Hvis du er en fuldt administreret VPS-server, Cloud Dedicated, VMWare Private Cloud, Private Parent-server, Managed Cloud-servere eller en dedikeret serverejer, og du er utilpas med at udføre nogen af ​​de skitserede trin, vi kan kontaktes via telefon på @800.580.4985, en chat- eller supportbillet for at hjælpe dig med denne proces.

SerienavigationNæste artikel>>

  1. Forespørgsel med flere værdier i en kolonne

  2. Binære data i MySQL

  3. visning af flere poster ved hjælp af resultatsæt

  4. Ret "FEJL 1136 (21S01):Kolonneantal stemmer ikke overens med værdiantallet i række 1", når du indsætter data i MySQL