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

pt-query-digest-alternativer - MySQL-forespørgselsstyring og -overvågning med ClusterControl

Når din database-arbejdsbelastning er overbelastet, vil du først se på, hvilke forespørgsler der kører i et forsøg på at se forespørgslens mønster. Er det tungt at skrive? Læs tungt? Hvor er flaskehalsen?

Identifikation af forespørgselsproblemer

For at finde ud af det kan du aktivere den generelle log eller den langsomme log for at prøve at fange de forespørgsler, der kører og skriver til filen. Du kan også læse fra den binære log (da binær log fanger alle ændringerne i databasen) og se på læsninger direkte fra den kørende procesliste i databasen. Du kan endda fange forespørgslen fra netværksperspektivet ved at kigge gennem tcpdump.

Hvad skal jeg gøre nu? Du kan analysere forespørgslen, der er skrevet til en generel logfil, langsom logfil, binær log for at kontrollere, om der er noget interessant i gang (f.eks. flaskehals i forespørgslen).

Percona har et værktøj til at analysere disse type forespørgsler, kaldet pt-query-digest. Det er inkluderet, når du installerer Percona Toolkit, en samling af hjælpeværktøjer, der hjælper DBA med at administrere deres databaser. I denne blog vil vi tage et kig på dette værktøj, og hvordan det kan sammenlignes med Query Management-funktionerne i ClusterControl.

Installationsprocedure

Percona-lagre understøtter to pakker Linux-distribution til opsætning, som er Debian-baseret og RPM-baseret pakkedistribution. Installationen er ganske enkel som vist nedenfor :

Debian-baseret pakke (Ubuntu, Debian)

Konfigurer Percona-pakkedepoter ved at downloade pakken

wget https://repo.percona.com/apt/percona-release_latest.generic_all.deb

Og installer derefter den downloadede pakke ved hjælp af dpkg

sudo dpkg -i percona-release_latest.generic_all.deb

Derefter skal du blot køre installationen fra pakkehåndtering

sudo apt-get install percona-toolkit

RPM-baseret pakke (RHEL, CentOS, Oracle Enterprise Linux, Amazon AMI)

Konfigurer Percona-pakkelager ved at installere rpm-pakken direkte.

sudo yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm 

Derefter skal du blot køre installationen fra pakkehåndtering

sudo apt-get install percona-toolkit

Percona-værktøjer vil blive installeret på din maskine, og du skal bare bruge det.

Analyse af forespørgselsbelastning

Der er flere måder at generere statistik fra forespørgselsbelastningen ved hjælp af pt-query-digest, nedenfor er kommandoen, hvordan man gør det ved hjælp af en langsom forespørgselsfil, generel fil, vis procesliste i databasen og læs gennem binær log.

Generer fra showproceslistedatabase

pt-query-digest --processlist h=localhost,D=sbt,u=sbtest,p=12qwaszx --output slowlog > /tmp/slow_query.log

Generer fra de langsomme forespørgselsfiler / generel forespørgselsfil

pt-query-digest mysql-slow.log > /tmp/slow_query.log

Generer fra binær log. Før du kører pt-query-digest, skal du udtrække den binære log til læsbart format ved hjælp af mysqlbinlog. Glem ikke at tilføje --type option og skriv binlog som kilde.

pt-query-digest --type binlog mysql-bin.000001.txt > slow_query.log

Når du er færdig med at generere filen, vil du se rapporten som vist nedenfor :

# 12s user time, 170ms system time, 27.44M rss, 221.79M vsz

# Current date: Sun May 10 21:40:47 2020

# Hostname: n2

# Files: mysql-1

# Overall: 94.92k total, 47 unique, 2.79k QPS, 27.90x concurrency ________

# Time range: 2020-05-10 21:39:37 to 21:40:11

# Attribute          total     min     max     avg     95%  stddev  median

# ============     ======= ======= ======= ======= ======= ======= =======

# Exec time           949s     6us      1s    10ms    42ms    42ms     2ms

# Lock time            31s       0      1s   327us    80us    11ms    22us

# Rows sent         69.36k       0     490    0.75    0.99   11.30       0

# Rows examine     196.34k       0     490    2.12    0.99   21.03    0.99

# Rows affecte      55.28k       0      15    0.60    0.99    1.26       0

# Bytes sent        13.12M      11   6.08k  144.93  299.03  219.02   51.63

# Query size        15.11M       5     922  166.86  258.32   83.13  174.84



# Profile

# Rank Query ID                      Response time  Calls R/Call V/M   Ite

# ==== ============================= ============== ===== ====== ===== ===

#    1 0xCE367F5CFFCAF46E816F682E... 162.6485 17.1%   199 0.8173  0.03 SELECT order_line? stock?

#    2 0x360F872745C81781F8F75EDE... 107.4898 11.3% 14837 0.0072  0.02 SELECT stock?

#    3 0xE0CE1933D0392DA3A42FAA7C... 102.2281 10.8% 14866 0.0069  0.03 SELECT item?

#    4 0x492B86BCB2B1AE1278147F95...  98.7658 10.4% 14854 0.0066  0.04 INSERT order_line?

#    5 0x9D086C2B787DC3A308043A0F...  93.8240  9.9% 14865 0.0063  0.02 UPDATE stock?

#    6 0x5812BF2C6ED2B9DAACA5D21B...  53.9681  5.7%  1289 0.0419  0.05 UPDATE customer?

#    7 0x51C0DD7AF0A6D908579C28C0...  44.3869  4.7%   864 0.0514  0.03 SELECT customer?

#    8 0xFFFCA4D67EA0A788813031B8...  41.2123  4.3%  3250 0.0127  0.01 COMMIT

#    9 0xFDDEE3813C59881488D9C47F...  36.0707  3.8%  1180 0.0306  0.02 UPDATE customer?

#   10 0x8FBBE0AFA061755CCC1C27AB...  31.6417  3.3%  1305 0.0242  0.03 UPDATE orders?

#   11 0x8AA6EB56551923DB9A49E40A...  23.3281  2.5%  1522 0.0153  0.04 SELECT customer? warehouse?

#   12 0xF34C10B3DA8DB048A630D4C7...  21.1662  2.2%  1305 0.0162  0.03 UPDATE order_line?

#   13 0x59DBA67188951C532AFC2598...  20.8006  2.2%  1503 0.0138  0.33 INSERT new_orders?

#   14 0xDADBEB0FBFA537F5D8722F42...  17.2802  1.8%  1290 0.0134  0.03 SELECT customer?

#   15 0x597A805ADA793440507F3334...  16.4394  1.7%  1516 0.0108  0.03 INSERT orders?

#   16 0x1B1EA568857A6AAC6544B44A...  13.9560  1.5%  1309 0.0107  0.05 SELECT new_orders?

#   17 0xCE3EDD98779478DE17154DCE...  12.1470  1.3%  1322 0.0092  0.05 INSERT history?

#   18 0x9DFD75E88091AA333A777668...  11.6842  1.2%  1311 0.0089  0.05 SELECT orders?

# MISC 0xMISC                         39.6393  4.2% 16334 0.0024   0.0 <29 ITEMS>



# Query 1: 6.03 QPS, 4.93x concurrency, ID 0xCE367F5CFFCAF46E816F682E53C0CF03 at byte 30449473

# This item is included in the report because it matches --limit.

# Scores: V/M = 0.03

# Time range: 2020-05-10 21:39:37 to 21:40:10

# Attribute    pct   total     min     max     avg     95%  stddev  median

# ============ === ======= ======= ======= ======= ======= ======= =======

# Count          0     199

# Exec time     17    163s   302ms      1s   817ms   992ms   164ms   816ms

# Lock time      0     9ms    30us   114us    44us    84us    18us    36us

# Rows sent      0     199       1       1       1       1       0       1

# Rows examine  39  76.91k     306     468  395.75  441.81   27.41  381.65

# Rows affecte   0       0       0       0       0       0       0       0

# Bytes sent     0  15.54k      79      80   79.96   76.28       0   76.28

# Query size     0  74.30k     382     384  382.35  381.65       0  381.65

# String:

# Databases    sbt

# Hosts        localhost

# Last errno   0

# Users        sbtest

# Query_time distribution

#   1us

#  10us

# 100us

#   1ms

#  10ms

# 100ms  ################################################################

#    1s  ####

#  10s+

# Tables

#    SHOW TABLE STATUS FROM `sbt` LIKE 'order_line6'\G

#    SHOW CREATE TABLE `sbt`.`order_line6`\G

#    SHOW TABLE STATUS FROM `sbt` LIKE 'stock6'\G

#    SHOW CREATE TABLE `sbt`.`stock6`\G

# EXPLAIN /*!50100 PARTITIONS*/

SELECT COUNT(DISTINCT (s_i_id))

                        FROM order_line6, stock6

                       WHERE ol_w_id = 1

                         AND ol_d_id = 1

                         AND ol_o_id < 3050

                         AND ol_o_id >= 3030

                         AND s_w_id= 1

                         AND s_i_id=ol_i_id

                         AND s_quantity < 18\G



# Query 2: 436.38 QPS, 3.16x concurrency, ID 0x360F872745C81781F8F75EDE9DD44246 at byte 30021546

# This item is included in the report because it matches --limit.

# Scores: V/M = 0.02

# Time range: 2020-05-10 21:39:37 to 21:40:11

# Attribute    pct   total     min     max     avg     95%  stddev  median

# ============ === ======= ======= ======= ======= ======= ======= =======

# Count         15   14837

# Exec time     11    107s    44us   233ms     7ms    33ms    13ms     3ms

# Lock time      1   522ms    15us   496us    35us    84us    28us    23us

# Rows sent     20  14.49k       1       1       1       1       0       1

# Rows examine   7  14.49k       1       1       1       1       0       1

# Rows affecte   0       0       0       0       0       0       0       0

# Bytes sent    28   3.74M     252     282  264.46  271.23    8.65  258.32

# Query size    19   3.01M     209     215  213.05  212.52    2.85  212.52

# String:

# Databases    sbt

# Hosts        localhost

# Last errno   0

# Users        sbtest

# Query_time distribution

#   1us

#  10us  #

# 100us  ##

#   1ms  ################################################################

#  10ms  #############

# 100ms  #

#    1s

#  10s+

# Tables

#    SHOW TABLE STATUS FROM `sbt` LIKE 'stock9'\G

#    SHOW CREATE TABLE `sbt`.`stock9`\G

# EXPLAIN /*!50100 PARTITIONS*/

SELECT s_quantity, s_data, s_dist_01 s_dist

                                                      FROM stock9

                                                    WHERE s_i_id = 60407 AND s_w_id= 2 FOR UPDATE\G

Som du kan se på ovenstående pt-query-digest rapportresultat, kan vi opdeles i 3 dele.

Oversigtsrapport 

Der er mange oplysninger, du kan finde i oversigtsrapporten, startende fra værtsnavneserveren, datoen du udfører kommandoen, oplysninger relateret til forespørgslen blev logget, QPS og tidsrammeregistrering. Udover det kan du også se statistik over timing på hver egenskab.

# 12s user time, 170ms system time, 27.44M rss, 221.79M vsz

# Current date: Sun May 10 21:40:47 2020

# Hostname: n2

# Files: mysql-1

# Overall: 94.92k total, 47 unique, 2.79k QPS, 27.90x concurrency ________

# Time range: 2020-05-10 21:39:37 to 21:40:11

# Attribute          total     min     max     avg     95%  stddev  median

# ============     ======= ======= ======= ======= ======= ======= =======

# Exec time           949s     6us      1s    10ms    42ms    42ms     2ms

# Lock time            31s       0      1s   327us    80us    11ms    22us

# Rows sent         69.36k       0     490    0.75    0.99   11.30       0

# Rows examine     196.34k       0     490    2.12    0.99   21.03    0.99

# Rows affecte      55.28k       0      15    0.60    0.99    1.26       0

# Bytes sent        13.12M      11   6.08k  144.93  299.03  219.02   51.63

# Query size        15.11M       5     922  166.86  258.32   83.13  174.84

Forespørgselsprofilering baseret på rangering 

Du kan se nyttige oplysninger i profileringsforespørgslen.

# Profile

# Rank Query ID                      Response time  Calls R/Call V/M   Ite

# ==== ============================= ============== ===== ====== ===== ===

#    1 0xCE367F5CFFCAF46E816F682E... 162.6485 17.1%   199 0.8173  0.03 SELECT order_line? stock?

#    2 0x360F872745C81781F8F75EDE... 107.4898 11.3% 14837 0.0072  0.02 SELECT stock?

Der er mange oplysninger, såsom forespørgsler, der kører, forespørgslens responstid (inklusive procentberegningen), hvor mange opkald forespørgslen foretager og aflæsninger pr. opkald.

Forespørgselsdistribution

Forespørgselsdistributionsstatistikker beskriver detaljerede oplysninger baseret på forespørgselsprofileringsrangering, du kan se QPS-sammenfald, statistikinformation relateret til forespørgselsattributten.

# Query 1: 6.03 QPS, 4.93x concurrency, ID 0xCE367F5CFFCAF46E816F682E53C0CF03 at byte 30449473

# This item is included in the report because it matches --limit.

# Scores: V/M = 0.03

# Time range: 2020-05-10 21:39:37 to 21:40:10

# Attribute    pct   total     min     max     avg     95%  stddev  median

# ============ === ======= ======= ======= ======= ======= ======= =======

# Count          0     199

# Exec time     17    163s   302ms      1s   817ms   992ms   164ms   816ms

# Lock time      0     9ms    30us   114us    44us    84us    18us    36us

# Rows sent      0     199       1       1       1       1       0       1

# Rows examine  39  76.91k     306     468  395.75  441.81   27.41  381.65

# Rows affecte   0       0       0       0       0       0       0       0

# Bytes sent     0  15.54k      79      80   79.96   76.28       0   76.28

# Query size     0  74.30k     382     384  382.35  381.65       0  381.65

# String:

# Databases    sbt

# Hosts        localhost

# Last errno   0

# Users        sbtest

# Query_time distribution

#   1us

#  10us

# 100us

#   1ms

#  10ms

# 100ms  ################################################################

#    1s  ####

#  10s+

# Tables

#    SHOW TABLE STATUS FROM `sbt` LIKE 'order_line6'\G

#    SHOW CREATE TABLE `sbt`.`order_line6`\G

#    SHOW TABLE STATUS FROM `sbt` LIKE 'stock6'\G

#    SHOW CREATE TABLE `sbt`.`stock6`\G

# EXPLAIN /*!50100 PARTITIONS*/

SELECT COUNT(DISTINCT (s_i_id))

                        FROM order_line6, stock6

                       WHERE ol_w_id = 1

                         AND ol_d_id = 1

                         AND ol_o_id < 3050

                         AND ol_o_id >= 3030

                         AND s_w_id= 1

                         AND s_i_id=ol_i_id

                         AND s_quantity < 18\G

Der er også information om forespørgselstidsfordeling, vært, bruger og database.

Forespørgselsovervågning med ClusterControl

ClusterControl har en forespørgselsovervågningsfunktion, som du kan finde på fanen Forespørgselsovervågning som vist nedenfor.

Du kan se information relateret til den forespørgsel, der udføres i databasen, herunder statistiske oplysninger og eksekveringstid. Du kan også konfigurere Query Monitor-indstillingen, som stadig er på samme side. Der er en mulighed for at aktivere den langsomme forespørgsel og forespørgsler, der ikke bruger indeks ved at klikke på Indstillinger

Du skal blot indstille den lange forespørgselstid, som er tærsklen for forespørgslen, der kategoriserer længe baseret på eksekveringstid. Der er også en mulighed for at aktivere forespørgslen, der ikke bruger indekser.

Konklusion

Overvågning og analyse af forespørgselsbelastningen kan være fordelagtig, så du kender og forstår din databasearbejdsbyrde, både pt-query-digest og ClusterControl Query Monitor giver information relateret til forespørgslen, der kører i databasen, for at hjælpe dig med at opnå denne forståelse.


  1. Hvordan bruger du WITH-klausulen i MySQL?

  2. Oracle ORA-12154:TNS:Kunne ikke løse tjenestenavnsfejl?

  3. Serverens tidszoneværdi 'AEST' er ikke genkendt eller repræsenterer mere end én tidszone

  4. Forældet:mysql_connect()