sql >> Base de Datos >  >> RDS >> Mysql

Alternativas de pt-query-digest - Gestión y supervisión de consultas MySQL con ClusterControl

Cuando la carga de trabajo de su base de datos está sobrecargada, primero desea ver qué consultas se están ejecutando en un intento de ver el patrón de la consulta. ¿Es escribir pesado? Leer pesado? ¿Dónde está el cuello de botella?

Identificación de problemas de consulta

Para averiguarlo, puede habilitar el registro general o el registro lento para intentar capturar las consultas que se están ejecutando y escribiendo en el archivo. También puede leer desde el registro binario (ya que el registro binario captura todos los cambios en la base de datos) y ver las lecturas directamente desde la lista de procesos en ejecución en la base de datos. Incluso puede capturar la consulta desde la perspectiva de la red consultando tcpdump.

¿Qué hacer a continuación? Puede analizar la consulta que se escribe en el archivo de registro general, el archivo de registro lento, el registro binario para verificar si está sucediendo algo interesante (por ejemplo, un cuello de botella en la consulta).

Percona dispone de una herramienta para analizar este tipo de consultas, denominada pt-query-digest. Se incluye cuando instala Percona Toolkit, una colección de herramientas de utilidades que ayudan a DBA a administrar sus bases de datos. En este blog, veremos esta herramienta y cómo se compara con las funciones de gestión de consultas de ClusterControl.

Procedimiento de instalación

Los repositorios de Percona admiten dos paquetes de distribución de Linux para la instalación, que es una distribución de paquetes basada en Debian y RPM. La instalación es simple como se muestra a continuación:

Paquete basado en Debian (Ubuntu, Debian)

Configure los repositorios de paquetes de Percona descargando el paquete

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

Y luego instale el paquete descargado usando dpkg

sudo dpkg -i percona-release_latest.generic_all.deb

Después de eso, simplemente ejecute la instalación desde el administrador de paquetes

sudo apt-get install percona-toolkit

Paquete basado en RPM (RHEL, CentOS, Oracle Enterprise Linux, Amazon AMI)

Configure los repositorios de paquetes de Percona instalando directamente el paquete rpm.

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

Después de eso, simplemente ejecute la instalación desde el administrador de paquetes

sudo apt-get install percona-toolkit

Las utilidades de Percona se instalarán en su máquina, y solo necesita usarlas.

Análisis de carga de trabajo de consultas

Hay varias formas de generar estadísticas a partir de la carga de trabajo de la consulta usando pt-query-digest, a continuación se muestra el comando para hacerlo usando un archivo de consulta lento, un archivo general, mostrar la lista de procesos en la base de datos y leer a través del registro binario.

Generar desde la base de datos de la lista de procesos

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

Generar desde los archivos de consulta lenta/archivo de consulta general

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

Generar desde registro binario. Antes de ejecutar pt-query-digest, debe extraer el registro binario en un formato legible mediante mysqlbinlog. No olvide agregar la opción --type y escriba binlog como fuente.

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

Después de terminar de generar el archivo, verá el informe como se muestra a continuación:

# 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

Como puede ver en el resultado del informe pt-query-digest anterior, podemos dividirlo en 3 partes.

Informe resumido 

Hay mucha información que puede encontrar en el informe de resumen, desde el servidor de nombre de host, la fecha en que ejecutó el comando, la información relacionada con la consulta registrada, las QPS y la captura del marco de tiempo. Además de eso, también puede ver estadísticas de tiempo en cada atributo.

# 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

Perfiles de consultas basados ​​en clasificación 

Puede ver información útil en la consulta de perfiles.

# 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?

Hay mucha información, como las consultas en ejecución, el tiempo de respuesta de la consulta (incluido el cálculo del porcentaje), cuántas llamadas está realizando la consulta y las lecturas por llamada.

Distribución de consultas

Las estadísticas de distribución de consultas describen información detallada basada en el rango de perfiles de consultas, puede ver la concurrencia de QPS, información estadística relacionada con el atributo de consulta.

# 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

También hay información sobre la distribución del tiempo de consulta, host, usuario y base de datos.

Supervisión de consultas con ClusterControl

ClusterControl tiene una función de Supervisión de consultas que puede encontrar en la pestaña Supervisión de consultas, como se muestra a continuación.

Puede ver información relacionada con la consulta que se ejecuta en la base de datos, incluyendo información estadística y tiempo de ejecución. También puede configurar la configuración del monitor de consultas, que aún se encuentra en la misma página. Hay una opción para habilitar la consulta lenta y las consultas que no usan el índice haciendo clic en Configuración

Solo necesita establecer el tiempo de consulta largo, que es el umbral de la consulta que clasifica por mucho tiempo según el tiempo de ejecución. También hay una opción para habilitar la consulta que no usa índices.

Conclusión

Supervisar y analizar la carga de trabajo de la consulta puede ser beneficioso para que conozca y comprenda la carga de trabajo de su base de datos, tanto pt-query-digest como ClusterControl Query Monitor brindan información relacionada con la consulta que se ejecuta en la base de datos para ayudarlo a lograr esa comprensión.