Este es el comando pt-query-digestp que se puede ejecutar en el proveedor de alojamiento gratuito de OnWorks utilizando una de nuestras múltiples estaciones de trabajo en línea gratuitas, como Ubuntu Online, Fedora Online, emulador en línea de Windows o emulador en línea de MAC OS.
PROGRAMA:
NOMBRE
pt-query-digest: analiza las consultas de MySQL a partir de registros, lista de procesos y tcpdump.
SINOPSIS
Uso: pt-query-digest [OPCIONES] [ARCHIVOS] [DSN]
pt-query-digest analiza las consultas MySQL de archivos de registro lentos, generales y binarios. Puede
también analizar consultas de "SHOW PROCESSLIST" y datos del protocolo MySQL de tcpdump. Por
De forma predeterminada, las consultas se agrupan por huella digital y se informan en orden descendente de tiempo de consulta.
(es decir, las consultas más lentas primero). Si no se proporcionan "ARCHIVOS", la herramienta dice "STDIN". El
"DSN" opcional se utiliza para ciertas opciones como "--desde" y "--hasta".
Informar las consultas más lentas de "slow.log":
pt-consulta-resumen lento.log
Informe las consultas más lentas de la lista de procesos en host1:
pt-query-digest - lista de procesos h = host1
Capture datos del protocolo MySQL con tcppdump, luego informe las consultas más lentas:
tcpdump -s 65535 -x -nn -q -tttt -i cualquier -c 1000 puerto 3306> mysql.tcp.txt
pt-query-digest --tipo tcpdump mysql.tcp.txt
Guarde los datos de consulta de "slow.log" en host2 para su posterior revisión y análisis de tendencias:
pt-query-digest --review h = host2 --no-report slow.log
RIESGOS
Percona Toolkit es maduro, probado en el mundo real y bien probado, pero todas las bases de datos
las herramientas pueden suponer un riesgo para el sistema y el servidor de la base de datos. Antes de usar esta herramienta,
por favor:
· Leer la documentación de la herramienta
· Revise los "ERRORES" conocidos de la herramienta
· Pruebe la herramienta en un servidor que no sea de producción
· Realice una copia de seguridad de su servidor de producción y verifique las copias de seguridad
DESCRIPCIÓN
pt-query-digest es una herramienta sofisticada pero fácil de usar para analizar consultas MySQL. Eso
puede analizar consultas de registros lentos, generales y binarios de MySQL. (Los registros binarios primero deben
convertido a texto, consulte "--tipo"). También puede utilizar "MOSTRAR LISTA DE PROCESOS" y el protocolo MySQL
datos de tcpdump. De forma predeterminada, la herramienta informa qué consultas son las más lentas y
por lo tanto, lo más importante para optimizar. Se pueden generar informes más complejos y personalizados.
creado mediante el uso de opciones como "--group-by", "--filter" y "--embedded-atributos".
El análisis de consultas es una práctica recomendada que debe realizarse con frecuencia. Para hacer esto más fácil
pt-query-digest tiene dos características: revisión de consultas ("--review") e historial de consultas
("--historia"). Cuando se utiliza la opción "--review", todas las consultas únicas se guardan en un
base de datos. Cuando la herramienta se ejecuta de nuevo con "--review", las consultas marcadas como revisadas en el
La base de datos no se imprime en el informe. Esto resalta las nuevas consultas que deben ser
revisados. Cuando se utiliza la opción "--history", las métricas de consulta (tiempo de consulta, tiempo de bloqueo,
etc.) para cada consulta única se guardan en la base de datos. Cada vez que se ejecuta la herramienta con
"--history", se guardan más datos históricos que se pueden utilizar para generar tendencias y analizar
rendimiento de la consulta a lo largo del tiempo.
ATRIBUTOS
pt-query-digest funciona en eventos, que son una colección de pares clave-valor denominados
atributos. Reconocerá la mayoría de los atributos de inmediato: "Query_time",
"Lock_time", y así sucesivamente. Puede simplemente mirar un registro lento y verlos. Sin embargo, hay
algunos que no existen en el registro lento, y los registros lentos pueden incluir diferentes tipos
de atributos (por ejemplo, puede tener un servidor con los parches de Percona).
Consulte "REFERENCIA DE ATRIBUTOS" cerca del final de esta documentación para obtener una lista de
Atributos específicos de "--tipo". Es necesario estar familiarizado con estos atributos para
trabajar con "--filter", "--ignore-atributos" y otras opciones relacionadas con los atributos.
Con el uso creativo de "--filter", puede crear nuevos atributos derivados de
atributos. Por ejemplo, para crear un atributo llamado "Row_ratio" para examinar el
proporción de "Rows_sent" a "Rows_examined", especifique un filtro como:
--filter '($ evento -> {Row_ratio} = $ evento -> {Rows_sent} / ($ evento -> {Rows_examined})) && 1'
El truco "&& 1" es necesario para crear una sintaxis de una línea válida que sea siempre verdadera, incluso si
la asignación pasa a evaluar falso. El nuevo atributo aparecerá automáticamente en
La salida:
# Proporción de filas 1.00 0.00 1 0.50 1 0.71 0.50
Los atributos creados de esta manera se pueden especificar para "--order-by" o cualquier opción que requiera
un atributo
SALIDA
El "--output" predeterminado es un informe de análisis de consultas. La opción "- [no] informe" controla
si este informe se imprime o no. A veces es posible que desee analizar todas las consultas
pero suprima el informe, por ejemplo, cuando utilice "--review" o "--history".
Hay un párrafo para cada clase de consulta analizada. Todas una "clase" de consultas tienen
el mismo valor para el atributo "--group-by" que es "huella digital" por defecto. (Ver
"ATRIBUTOS".) Una huella digital es una versión resumida del texto de la consulta con literales
eliminado, espacio en blanco colapsado, etc. El informe está formateado para que sea fácil
pegue en los correos electrónicos sin envolver, y todas las líneas que no sean de consulta comienzan con un comentario, por lo que
puede guardarlo en un archivo .sql y abrirlo en su editor de texto de resaltado de sintaxis favorito.
Hay un perfil de tiempo de respuesta al principio.
La salida que se describe aquí está controlada por "--report-format". Esa opción te permite
especificar qué imprimir y en qué orden. La salida predeterminada en el orden predeterminado es
descrito aquí.
El informe, por defecto, comienza con un párrafo sobre el análisis completo.
La información es muy similar a la que verá para cada clase de consultas en el registro, pero
no tiene información que sería demasiado cara para mantener a nivel mundial para el
análisis. También tiene algunas estadísticas sobre la ejecución del código en sí, como la CPU
y el uso de memoria, la fecha y hora local de la ejecución y una lista de archivos de entrada
leído / analizado.
A continuación, se muestra el perfil de tiempo de respuesta sobre los eventos. Este es un muy resumido
vista de los eventos únicos en el informe de consulta detallado que sigue. Contiene el
siguientes columnas:
Significado de la columna
============ ==================================== ====================
Clasificación La clasificación de la consulta dentro del conjunto completo de consultas analizadas.
ID de consulta La huella digital de la consulta
Tiempo de respuesta El tiempo de respuesta total y el porcentaje del total general
Llamadas La cantidad de veces que se ejecutó esta consulta
R / Call El tiempo medio de respuesta por ejecución.
V / M La relación entre la varianza y la media del tiempo de respuesta
Elemento La consulta destilada
Una última línea cuyo rango se muestra como MISC contiene estadísticas agregadas sobre las consultas que
no se incluyeron en el informe debido a opciones como "--limit" y "--outliers". Para
detalles sobre la relación entre varianza y media, consulte
http://en.wikipedia.org/wiki/Index_of_dispersion.
A continuación, se imprime el informe de consulta detallado. Cada consulta aparece en un párrafo. Aquí hay un
muestra, ligeramente reformateado para que 'perldoc' no ajuste las líneas en una terminal. El
lo siguiente será todo un párrafo, pero lo dividiremos para comentarlo.
# Consulta 2: 0.01 QPS, 0.02x conc, ID 0xFDEA8D2993C9CAF3 en el byte 160665
Esta línea identifica el número secuencial de la consulta en el orden de clasificación especificado por
"--ordenar por". Luego están las consultas por segundo y la simultaneidad aproximada para
esta consulta (calculada como una función del intervalo de tiempo y el total de Query_time). Siguiente hay
un ID de consulta. Este ID es una versión hexadecimal de la suma de comprobación de la consulta en la base de datos, si está
usando "--review". Puede seleccionar los detalles de la consulta revisada de la base de datos con un
consulta como "SELECCIONAR .... DONDE suma de comprobación = 0xFDEA8D2993C9CAF3".
Si está investigando el informe y desea imprimir cada muestra de un
consulta, entonces el siguiente "--filter" puede ser útil:
pt-query-digest lento.log \
--no-informe \
--registro lento de salida \
--filter '$ event -> {huella digital} \
&& make_checksum ($ evento -> {huella digital}) eq "FDEA8D2993C9CAF3" '
Tenga en cuenta que debe eliminar el prefijo "0x" de la suma de comprobación.
Finalmente, en caso de que desee encontrar una muestra de la consulta en el archivo de registro, está el byte
compensar donde se puede mirar. (Esto no siempre es exacto, debido a algunas anomalías en el
formato de registro lento, pero por lo general es correcto). La posición se refiere a la peor muestra, que
veremos más sobre esto a continuación.
A continuación, se muestra la tabla de métricas sobre esta clase de consultas.
# pct total min max avg 95% stddev mediana
# Cuenta 0 2
# Tiempo de ejecución 13 1105s 552s 554s 553s 554s 2s 553s
# Tiempo de bloqueo 0 216us 99us 117us 108us 117us 12us 108us
# Filas enviadas 20 6.26M 3.13M 3.13M 3.13M 3.13M 12.73 3.13M
# Examen de filas 0 6.26M 3.13M 3.13M 3.13M 3.13M 12.73 3.13M
La primera línea son los encabezados de columna de la tabla. El porcentaje es el porcentaje de la
total para toda la ejecución del análisis, y el total es el valor real de la especificación
métrico. Por ejemplo, en este caso podemos ver que la consulta se ejecutó 2 veces, que es
13% del número total de consultas en el archivo. Las columnas mín., Máx. Y prom.
explicativo. La columna del 95% muestra el percentil 95; 95% de los valores son menores o
igual a este valor. La desviación estándar muestra cuán estrechamente agrupados están los valores.
La desviación estándar y la mediana se calculan a partir del percentil 95, descartando
los valores extremadamente grandes.
Las estadísticas de stddev, mediana y percentil 95 son aproximadas. Estadísticas exactas
requieren mantener todos los valores vistos, ordenarlos y hacer algunos cálculos sobre ellos. Esto usa
mucha memoria. Para evitar esto, mantenemos 1000 cubos, cada uno de ellos un 5% más grande que el
antes, desde .000001 hasta un número muy grande. Cuando vemos un valor incrementamos
el cubo en el que cae. Por lo tanto, tenemos memoria fija por clase de consultas. El
El inconveniente es la imprecisión, que normalmente se sitúa en el rango del 5 por ciento.
A continuación tenemos estadísticas sobre los usuarios, bases de datos y rango de tiempo para la consulta.
# Usuarios 1 usuario1
# Bases de datos 2 db1(1) db2(1)
# Rango de tiempo 2008-11-26 04:55:18 a 2008-11-27 00:15:15
Los usuarios y las bases de datos se muestran como un recuento de valores distintos, seguidos de los valores.
Si solo hay uno, se muestra solo; si hay muchos, mostramos cada uno de los más
frecuentes, seguidas del número de veces que aparece.
Distribución de # Query_time
#1nosotros
#10nosotros
#100nosotros
# 1ms
# 10 ms #####
# 100ms ###################
# 1 ##########
# 10s +
Los tiempos de ejecución muestran un gráfico logarítmico de agrupamiento de tiempos. Cada consulta entra en una
de los "cubos" y se cuenta. Los cubos son potencias de diez. El primer cubo es
todos los valores en el "rango de un microsegundo", es decir, menos de 10us. El segundo es
"decenas de microsegundos", que va desde 10us hasta (pero sin incluir) 100us; y así.
El atributo del gráfico se puede cambiar especificando "--report-histogram", pero se limita a
atributos basados en el tiempo.
# Mesas
# MOSTRAR EL ESTADO DE LA TABLA COMO 'table1' \ G
# MOSTRAR CREAR TABLA `table1` \ G
# EXPLIQUE
SELECCIONAR * DE table1 \ G
Esta sección es útil: si está tratando de optimizar las consultas que ve en el
registro lento, probablemente desee examinar la estructura y el tamaño de la tabla. Estos son copiar y
comandos listos para pegar para hacer eso.
Finalmente, vemos una muestra de las consultas en esta clase de consulta. Esto no es al azar
muestra. Es la consulta que ha tenido el peor rendimiento, según el orden de clasificación dado por
"--ordenar por". Normalmente verá una línea comentada "# EXPLAIN" justo antes, por lo que
Puede copiar y pegar la consulta para examinar su plan EXPLAIN. Pero para consultas no SELECT que
no es posible hacer, por lo que la herramienta intenta transformar la consulta en un equivalente aproximado
SELECT consulta y agrega eso a continuación.
Si desea encontrar este evento de muestra en el registro, use el desplazamiento mencionado anteriormente y
algo como lo siguiente:
cola -c + / ruta / a / archivo | cabeza
Consulte también "--report-format".
CONSULTA REVIEW
Una consulta "--review" es el proceso de almacenar todas las huellas digitales de la consulta analizadas. Esta
tiene varios beneficios:
· Puede agregar metadatos a clases de consultas, como marcarlas para seguimiento, agregar
notas a las consultas o marcarlas con un ID de problema para su sistema de seguimiento de problemas.
· Puede consultar los valores almacenados en ejecuciones posteriores para saber si ha
visto una consulta antes. Esto puede ayudarlo a reducir el trabajo duplicado.
· Puede almacenar datos históricos como el recuento de filas, los tiempos de consulta y, en general,
todo lo que pueda ver en el informe.
Para utilizar esta función, ejecute pt-query-digest con la opción "--review". Se almacenará
las huellas digitales y otra información en la tabla que especifique. La próxima vez que lo ejecutes
con la misma opción, hará lo siguiente:
· No le mostrará las consultas que ya haya revisado. Una consulta se considera
ya revisado si ha establecido un valor para la columna "revisado_por". (Si quieres
ver las consultas que ya ha revisado, utilice la opción "--reportar todo").
· Las consultas que ha revisado y que no aparecen en la salida provocarán lagunas en la
secuencia de números de consulta en la primera línea de cada párrafo. Y el valor que tienes
especificado para "--limit" seguirá siendo respetado. Entonces, si ha revisado todas las consultas en
el top 10 y pregunta por el top 10, no verá nada en la salida.
· Si desea ver las consultas que ya ha revisado, puede especificar
"--informe-todo". Luego verá el resultado del análisis normal, pero también verá el
información de la tabla de revisión, justo debajo del gráfico de tiempo de ejecución. Por ejemplo,
# Revisar información
# comentarios: subconsulta IN () realmente mala, ¡corríjala pronto!
# visto por primera vez: 2008-12-01 11:48:57
#jira_ticket: 1933
# visto por última vez: 2008-12-18 11:49:07
# prioridad: alta
# review_by: xaprb
# review_on: 2008-12-18 15:03:11
Estos metadatos son útiles porque, a medida que analiza sus consultas, obtiene sus comentarios
integrado directamente en el informe.
HUELLAS DIGITALES
Una huella digital de consulta es la forma abstracta de una consulta, que permite agrupar
consultas similares juntas. La abstracción de una consulta elimina los valores literales, normaliza
espacios en blanco, etc. Por ejemplo, considere estas dos consultas:
SELECCIONE nombre, contraseña DEL usuario DONDE id = '12823';
seleccione nombre, contraseña del usuario
donde id = 5;
Ambas consultas tendrán huellas digitales para
seleccione nombre, contraseña del usuario donde id =?
Una vez que se conoce la huella digital de la consulta, podemos hablar de una consulta como si
representa todas las consultas similares.
Lo que hace "pt-query-digest" es análogo a una instrucción GROUP BY en SQL. (Pero tenga en cuenta que
"varias columnas" no define una agrupación de varias columnas; ¡Define múltiples informes!)
Si su línea de comandos se ve así,
pt-consulta-resumen \
--agrupar por huella dactilar \
--order-por hora de consulta: suma \
- límite 10 \
lento.log
El pseudo-SQL correspondiente se ve así:
SELECCIONE LO PEOR (consulta POR hora de consulta), SUMA (hora de consulta), ...
DESDE /ruta/a/slow.log
GRUPO POR HUELLA DIGITAL (consulta)
ORDER BY SUM (Query_time) DESC
LÍMITE 10
También puede utilizar el valor "destilar", que es una especie de súper huella digital. Ver
"--group-by" para obtener más información.
La toma de huellas dactilares de consultas se adapta a muchos casos especiales, que han demostrado ser necesarios en el
mundo real. Por ejemplo, una lista "IN" con 5 literales es realmente equivalente a una con 4
literales, por lo que las listas de literales se contraen en una sola. Si encuentras algo que
no tiene las huellas digitales correctamente, envíe un informe de error con un caso de prueba reproducible.
Aquí hay una lista de transformaciones durante la toma de huellas digitales, que puede no ser exhaustiva:
· Agrupe todas las consultas SELECT de mysqldump juntas, incluso si están en contra de diferentes
mesas. Lo mismo se aplica a todas las consultas de pt-table-checksum.
· Acorta las declaraciones INSERT de varios valores a una sola VALORES() lista.
· Quitar comentarios.
· Resumen de las bases de datos en declaraciones USE, de modo que todas las declaraciones USE se agrupen.
· Reemplazar todos los literales, como cadenas entre comillas. Por eficiencia, el código que reemplaza
Los números literales son algo no selectivos y pueden reemplazar algunas cosas como números.
cuando realmente no lo son. También se reemplazan los literales hexadecimales. NULL se trata como
un literal. Los números incrustados en los identificadores también se reemplazan, por lo que las tablas nombradas
de manera similar, se tomarán las huellas digitales con los mismos valores (por ejemplo, users_2009 y users_2010
imprimirá la huella digital de forma idéntica).
· Contraiga todos los espacios en blanco en un solo espacio.
· Ponga en minúsculas toda la consulta.
· Reemplazar todos los literales dentro de EN() y VALORES() listas con un único marcador de posición,
independientemente de la cardinalidad.
· Contraiga múltiples consultas UNION idénticas en una sola.
OPCIONES
Esta herramienta acepta argumentos de línea de comandos adicionales. Consulte la "SINOPSIS" y el uso
información para más detalles.
--pedir-pasar
Solicitar una contraseña al conectarse a MySQL.
--atributo-alias
tipo: matriz; predeterminado: db | Esquema
Lista de atributo | alias, etc.
Ciertos atributos tienen varios nombres, como db y Schema. Si un evento no tiene
el atributo principal, pt-query-digest busca un atributo de alias. Si encuentra un
alias, crea el atributo principal con el valor del atributo alias y elimina
el atributo de alias.
Si el evento tiene el atributo principal, se eliminan todos los atributos de alias.
Esto ayuda a simplificar los atributos del evento para que, por ejemplo, no haya informes
líneas para db y Schema.
- límite de valor de atributo
tipo: int; predeterminado: 4294967296
Un límite de cordura para los valores de los atributos.
Esta opción trata con errores en la funcionalidad de registro lento que causa valores grandes para
atributos. Si el valor del atributo es mayor que este, el último valor visto para
esa clase de consulta se usa en su lugar.
--juego de caracteres
forma corta: -A; tipo: cadena
Juego de caracteres predeterminado. Si el valor es utf8, establece el binmode de Perl en STDOUT en utf8,
pasa la opción mysql_enable_utf8 a DBD :: mysql y ejecuta SET NAMES UTF8 después
conectarse a MySQL. Cualquier otro valor establece binmode en STDOUT sin la capa utf8,
y ejecuta SET NAMES después de conectarse a MySQL.
--config
tipo: Matriz
Lea esta lista de archivos de configuración separados por comas; si se especifica, este debe ser el primero
opción en la línea de comando.
- [no] continuar en caso de error
predeterminado: sí
Continúe analizando incluso si hay un error. La herramienta no continuará para siempre:
se detiene una vez que cualquier proceso causa 100 errores, en cuyo caso probablemente haya un error en el
herramienta o la entrada no es válida.
- [no] crear-tabla-historial
predeterminado: sí
Cree la tabla "--history" si no existe.
Esta opción hace que la tabla especificada por "--history" se cree con el valor predeterminado
estructura que se muestra en la documentación de "--history".
- [no] crear-tabla-de-revisión
predeterminado: sí
Cree la tabla "--review" si no existe.
Esta opción hace que la tabla especificada por "--review" se cree con el valor predeterminado
estructura mostrada en la documentación para "--review".
- demonizar
Bifurcar al fondo y separar de la cáscara. Solo sistemas operativos POSIX.
--base de datos
forma corta: -D; tipo: cadena
Conéctese a esta base de datos.
--archivo-predeterminado
forma corta: -F; tipo: cadena
Solo lea las opciones de mysql del archivo dado. Debe dar un nombre de ruta absoluto.
--atributos-incrustados
tipo: matriz
Dos patrones de expresiones regulares de Perl para capturar pseudoatributos incrustados en consultas.
Los atributos incrustados pueden ser pares de atributo-valor especiales que ha ocultado en
comentarios. La primera expresión regular debe coincidir con el conjunto completo de atributos (en caso de que
son múltiples). La segunda expresión regular debe coincidir y capturar pares atributo-valor de
la primera expresión regular.
Por ejemplo, suponga que su consulta se parece a lo siguiente:
SELECCIONAR * de los usuarios - archivo: /login.php, línea: 493;
Puede ejecutar pt-query-digest con la siguiente opción:
pt-query-digest --atributos-incrustados '-. *', '(\ w +): ([^ \,] +)'
La primera expresión regular captura todo el comentario:
"- archivo: /login.php, línea: 493;"
El segundo lo divide en pares atributo-valor y los agrega al evento:
VALOR DE ATRIBUTO
========= ==========
archivo /login.php
línea 493
NOTA: Todas las comas en los patrones de expresiones regulares deben escaparse con \ de lo contrario, el patrón
romperá.
- rango esperado
tipo: matriz; predeterminado: 5,10
Explique los elementos cuando haya más o menos de los esperados.
Define el número de elementos que se espera ver en el informe dado por "- [no] informe",
controlado por "--limit" y "--outliers". Si hay más o menos elementos en el
informe, cada uno explicará por qué se incluyó.
--explicar
tipo: DSN
Ejecute EXPLAIN para la consulta de muestra con este DSN e imprima los resultados.
Esto solo funciona cuando "--group-by" incluye huella digital. Hace que pt-query-digest
ejecute EXPLAIN e incluya la salida en el informe. Por seguridad, las consultas que aparecen
para tener una subconsulta que EXPLAIN ejecutará no será EXPLICADO. Esos son típicamente
consultas de "tabla derivada" del formulario
seleccionar ... de (seleccionar ....) der;
Los resultados de EXPLAIN se imprimen en formato vertical completo en el informe del evento, que
aparece al final de cada informe de eventos en estilo vertical ("\ G") al igual que MySQL
lo imprime.
--filtrar
tipo: cadena
Descarte los eventos para los que este código Perl no devuelve verdadero.
Esta opción es una cadena de código Perl o un archivo que contiene código Perl que se compila
en una subrutina con un argumento: $ evento. Este es un hashref. Si el valor dado
es un archivo legible, luego pt-query-digest lee el archivo completo y usa su contenido
como el código. El archivo no debe contener un shebang (#!/ usr / bin / perl) línea.
Si el código devuelve verdadero, la cadena de devoluciones de llamada continúa; de lo contrario, termina. El
el código es la última instrucción en la subrutina que no sea "return $ event". El
La plantilla de subrutina es:
sub {$ evento = turno; filtrar && return $ event; }
Los filtros dados en la línea de comando están entre paréntesis como "(filter
) ". Para filtros complejos de varias líneas, debe colocar el código dentro de un archivo para que
no estar envuelto entre paréntesis. De cualquier manera, el filtro debe producir sintácticamente
código válido dado la plantilla. Por ejemplo, una rama if-else dada en el comando
la línea no sería válida:
--filter 'if () {} else {}' # INCORRECTO
Dado que se da en la línea de comando, la rama if-else estaría envuelta dentro
paréntesis que no es sintácticamente válido. Entonces, para lograr algo más complejo
como esto requeriría poner el código en un archivo, por ejemplo filter.txt:
my $ event_ok; si (...) {$ event_ok = 1; } más {$ event_ok = 0; } $ event_ok
Luego especifique "--filter filter.txt" para leer el código de filter.txt.
Si el código de filtro no se compila, pt-query-digest morirá con un error. Si el
el código de filtro se compila, aún puede ocurrir un error en tiempo de ejecución si el código intenta hacerlo
algo mal (como un patrón que coincide con un valor indefinido). pt-query-digest no
proporcione las salvaguardias, así que codifique con cuidado.
Un filtro de ejemplo que descarta todo menos las declaraciones SELECT:
--filter '$ evento -> {arg} = ~ m / ^ select / i'
Esto se compila en una subrutina como la siguiente:
sub {$ evento = turno; ($ evento -> {arg} = ~ m / ^ select / i) && return $ evento; }
Está permitido que el código tenga efectos secundarios (para alterar $ event).
Consulte "REFERENCIA DE ATRIBUTOS" para obtener una lista de atributos comunes y específicos de "tipo".
Aquí hay más ejemplos de código de filtro:
Host / IP coincide con dominio.com
--filter '($ evento -> {host} || $ evento -> {ip} || "") = ~ m / dominio.com /'
A veces, MySQL registra el host donde se espera la IP. Por tanto, comprobamos ambos.
El usuario coincide con john
--filter '($ evento -> {usuario} || "") = ~ m / john /'
Más de 1 advertencia
--filter '($ evento -> {Warning_count} || 0)> 1'
La consulta hace un escaneo completo de la tabla o una combinación completa
--filter '(($ evento -> {Escaneo_completo} || "") eq "Sí") || (($ evento -> {Full_join} || "")
eq "Sí") '
La consulta no se entregó desde la caché de consultas
--filter '($ evento -> {QC_Hit} || "") eq "No"'
La consulta es de 1 MB o más
--filter '$ evento -> {bytes}> = 1_048_576'
Dado que "--filter" te permite modificar $ event, puedes usarlo para hacer otras cosas, como
crear nuevos atributos. Consulte "ATRIBUTOS" para ver un ejemplo.
--agrupar por
tipo: Matriz; predeterminado: huella digital
Qué atributo de los eventos agrupar.
En general, puede agrupar consultas en clases según cualquier atributo de la consulta,
como "usuario" o "db", que le mostrará de forma predeterminada qué usuarios y qué bases de datos
obtenga la mayor cantidad de "Query_time". El atributo predeterminado, "huella digital", grupos similares,
consultas abstractas en clases; ver más abajo y ver también "HUELLAS DIGITALES".
Se imprime un informe para cada valor "--group-by" (a menos que se proporcione "--no-report").
Por lo tanto, "--group-by user, db" significa "informar sobre consultas con el mismo usuario e informar
en consultas con la misma base de datos "; no significa" informar sobre consultas con el mismo usuario
y db. "Consulte también" SALIDA ".
Cada valor debe tener un valor correspondiente en la misma posición en "--order-by".
Sin embargo, agregar valores a "--group-by" agregará automáticamente valores a "--order-by",
por su conveniencia.
Hay varios valores mágicos que hacen que suceda alguna extracción de datos adicional antes
la agrupación tiene lugar:
huella dactilar
Esto hace que los eventos se tomen las huellas digitales para abstraer consultas en una forma canónica,
que luego se usa para agrupar eventos en una clase. Consulte "HUELLAS DIGITALES" para
más sobre la toma de huellas dactilares.
TABURETES
Esto hace que los eventos se inspeccionen en busca de lo que parecen ser tablas, y luego
agregado por eso. Tenga en cuenta que una consulta que contiene dos o más tablas será
contado tantas veces como mesas haya; por lo que una combinación contra dos mesas contará
el Query_time contra ambas tablas.
destilar
Esta es una especie de súper huella digital que colapsa las consultas en una sugerencia
de lo que hacen, como "INSERT SELECT table1 table2".
--ayuda
Muestre ayuda y salga.
--historia
tipo: DSN
Guarde las métricas para cada clase de consulta en la tabla dada. pt-query-digest guarda la consulta
métricas (tiempo de consulta, tiempo de bloqueo, etc.) a esta tabla para que pueda ver cómo las clases de consulta
cambian con el tiempo.
La tabla predeterminada es "percona_schema.query_history". Especifique la base de datos (D) y la tabla
(t) Opciones de DSN para anular el predeterminado. La base de datos y la tabla son automáticamente
creado a menos que se especifique "--no-create-history-table" (ver
"- [no] crear-tabla-historial").
pt-query-digest inspecciona las columnas de la tabla. La mesa debe tener al menos el
siguientes columnas:
CREAR TABLA query_review_history (
suma de comprobación BIGINT UNSIGNED NOT NULL,
TEXTO de muestra NO NULO
);
Todas las columnas no mencionadas anteriormente se inspeccionan para ver si siguen un nombre determinado.
convención. La columna es especial si el nombre termina con un guión bajo seguido de cualquier
de estos valores:
pct | avg | cnt | suma | min | max | pct_95 | stddev | mediana | rango
Si la columna termina con uno de esos valores, entonces el prefijo se interpreta como el
atributo de evento para almacenar en esa columna, y el sufijo se interpreta como la métrica
para ser almacenado. Por ejemplo, se utilizará una columna denominada "Query_time_min" para almacenar el
mínimo "Query_time" para la clase de eventos.
La tabla también debe tener una clave principal, pero eso depende de usted, dependiendo de cómo
desea almacenar los datos históricos. Sugerimos agregar columnas ts_min y ts_max y
haciéndolos parte de la clave principal junto con la suma de comprobación. Pero también podrías simplemente
agregue una columna ts_min y conviértala en un tipo DATE, por lo que obtendrá una fila por clase de consultas
por día.
La siguiente definición de tabla se utiliza para "- [no] create-history-table":
CREAR TABLA SI NO EXISTE query_history (
suma de comprobación BIGINT UNSIGNED NOT NULL,
TEXTO de muestra NO NULO,
ts_min FECHA HORA,
ts_max FECHA HORA,
ts_cnt FLOTADOR,
Query_time_sum FLOTANTE,
Query_time_min FLOTANTE,
Query_time_max FLOTANTE,
Query_time_pct_95 FLOTANTE,
Query_time_stddev FLOTANTE,
Query_time_median FLOTANTE,
Lock_time_sum FLOTANTE,
Lock_time_min FLOTANTE,
Lock_time_max FLOTANTE,
Lock_time_pct_95 FLOTANTE,
Lock_time_stddev FLOTANTE,
Lock_time_median FLOTANTE,
Rows_sent_sum FLOTANTE,
Rows_sent_min FLOTANTE,
Rows_sent_max FLOTANTE,
Rows_sent_pct_95 FLOTANTE,
Rows_sent_stddev FLOTANTE,
Rows_sent_median FLOTANTE,
Rows_examined_sum FLOTADOR,
Filas_examinadas_min FLOTANTE,
Rows_examined_max FLOTADOR,
Filas_examinadas_pct_95 FLOTANTE,
Filas_examinadas_stddev FLOTANTE,
Filas_examinadas_mediana FLOTANTE,
- Atributos extendidos de registro lento de Percona
-- http://www.percona.com/docs/wiki/patches: slow_extended
Rows_affected_sum FLOTANTE,
Filas_afectadas_min FLOTANTE,
Rows_affected_max FLOTADOR,
Rows_affected_pct_95 FLOTANTE,
Rows_affected_stddev FLOTANTE,
Rows_affected_median FLOTANTE,
Rows_read_sum FLOTANTE,
Filas_lectura_min FLOTANTE,
Rows_read_max FLOTANTE,
Rows_read_pct_95 FLOTANTE,
Rows_read_stddev FLOTANTE,
Rows_read_median FLOTANTE,
Merge_passes_sum FLOTANTE,
Merge_passes_min FLOTANTE,
Merge_passes_max FLOTANTE,
Merge_passes_pct_95 FLOTANTE,
Merge_passes_stddev FLOTANTE,
Merge_passes_median FLOTANTE,
InnoDB_IO_r_ops_min FLOTANTE,
InnoDB_IO_r_ops_max FLOTANTE,
InnoDB_IO_r_ops_pct_95 FLOTANTE,
InnoDB_IO_r_ops_stddev FLOTANTE,
InnoDB_IO_r_ops_median FLOTANTE,
InnoDB_IO_r_bytes_min FLOTANTE,
InnoDB_IO_r_bytes_max FLOTANTE,
InnoDB_IO_r_bytes_pct_95 FLOTANTE,
InnoDB_IO_r_bytes_stddev FLOTANTE,
InnoDB_IO_r_bytes_median FLOTANTE,
InnoDB_IO_r_wait_min FLOTANTE,
InnoDB_IO_r_wait_max FLOTANTE,
InnoDB_IO_r_wait_pct_95 FLOTANTE,
InnoDB_IO_r_wait_stddev FLOTANTE,
InnoDB_IO_r_wait_median FLOTANTE,
InnoDB_rec_lock_wait_min FLOTANTE,
InnoDB_rec_lock_wait_max FLOTANTE,
InnoDB_rec_lock_wait_pct_95 FLOTANTE,
InnoDB_rec_lock_wait_stddev FLOTANTE,
InnoDB_rec_lock_wait_median FLOTANTE,
InnoDB_queue_wait_min FLOTANTE,
InnoDB_queue_wait_max FLOTANTE,
InnoDB_queue_wait_pct_95 FLOTANTE,
InnoDB_queue_wait_stddev FLOTANTE,
InnoDB_queue_wait_median FLOTANTE,
InnoDB_pages_distinct_min FLOTANTE,
InnoDB_pages_distinct_max FLOTANTE,
InnoDB_pages_distinct_pct_95 FLOTANTE,
InnoDB_pages_distinct_stddev FLOTANTE,
InnoDB_pages_distinct_median FLOTANTE,
- Atributos booleanos (Sí / No). Solo se necesitan el cnt y la suma
-- para éstos. cnt es la cantidad de veces que se registró un atributo,
- y la suma es cuántas de esas veces el valor fue Sí. Entonces
- suma / cnt * 100 es igual al porcentaje de veces registrado que
- el valor era Sí.
QC_Hit_cnt FLOTANTE,
QC_Hit_sum FLOTANTE,
Full_scan_cnt FLOTANTE,
Full_scan_sum FLOTANTE,
Full_join_cnt FLOTANTE,
Full_join_sum FLOTANTE,
Tmp_table_cnt FLOTANTE,
Tmp_table_sum FLOTANTE,
Tmp_table_on_disk_cnt FLOTANTE,
Tmp_table_on_disk_sum FLOTANTE,
Filesort_cnt FLOTADOR,
Filesort_sum FLOTANTE,
Filesort_on_disk_cnt FLOTADOR,
Filesort_on_disk_sum FLOTADOR,
CLAVE PRIMARIA (suma de comprobación, ts_min, ts_max)
);
Tenga en cuenta que almacenamos el recuento (cnt) solo para el atributo ts; será redundante
almacenar esto para otros atributos.
--anfitrión
forma corta: -h; tipo: cadena
Conéctese al anfitrión.
--ignore-atributos
tipo: matriz; predeterminado: arg, cmd, insert_id, ip, puerto, Thread_id, timestamp, exptime,
banderas, clave, res, val, server_id, offset, end_log_pos, Xid
No agregue estos atributos. Algunos atributos no son métricas de consulta, sino metadatos.
que no necesita (o no puede) agregarse.
- heredar-atributos
tipo: matriz; predeterminado: db, ts
Si faltan, herede estos atributos del último evento que los tuvo.
Esta opción establece qué atributos se heredan o se transfieren a eventos que no
no los tengo. Por ejemplo, si un evento tiene el atributo db igual a "foo", pero el
el siguiente evento no tiene el atributo db, entonces hereda "foo" para su atributo db.
--intervalo
tipo: flotador; predeterminado: .1
Con qué frecuencia sondear la lista de procesos, en segundos.
--iteraciones
tipo: int; predeterminado: 1
Cuántas veces se debe iterar a través del ciclo de recopilación e informe. Si es 0, iterar hasta
infinito. Cada iteración se ejecuta durante una cantidad de tiempo "--run-time". Una iteración es
generalmente determinado por una cantidad de tiempo y se imprime un informe cuando esa cantidad de
transcurre el tiempo. Con "--run-time-mode" "intervalo", un intervalo es determinado por
el intervalo de tiempo que especifica con "--run-time". Consulte "--run-time" y
"--run-time-mode" para obtener más información.
--límite
tipo: Matriz; predeterminado: 95%: 20
Limite la producción al porcentaje o recuento dado.
Si el argumento es un número entero, informe solo las N peores consultas principales. Si el argumento
es un número entero seguido del signo "%", indica ese porcentaje de las peores consultas.
Si el porcentaje va seguido de dos puntos y otro entero, informe la parte superior
porcentaje o el número especificado por ese entero, lo que ocurra primero.
El valor es en realidad una matriz de valores separados por comas, uno para cada elemento en
"--agrupar por". Si no especifica un valor para ninguno de esos elementos, el valor predeterminado es el
95% superior.
Consulte también "--outliers".
--Iniciar sesión
tipo: cadena
Imprime toda la salida en este archivo cuando se daemonized.
--ordenar por
tipo: Matriz; predeterminado: Query_time: sum
Ordene los eventos por este atributo y función agregada.
Esta es una lista separada por comas de expresiones ordenadas, una para cada "--group-by"
atributo. El "Query_time: sum" predeterminado se utiliza para los atributos "--group-by" sin
atributos "--order-by" dados explícitamente (es decir, si especifica más "--group-by"
atributos que los atributos "--order-by" correspondientes). La sintaxis es
"atributo: agregado". Consulte "ATRIBUTOS" para conocer los atributos válidos. Los agregados válidos son:
Significado agregado
========= =============================
suma Suma / valor total del atributo
min Valor de atributo mínimo
max Valor de atributo máximo
cnt Frecuencia / recuento de la consulta
Por ejemplo, el "Query_time: sum" predeterminado significa que las consultas en el análisis de consultas
El informe se ordenará (ordenará) por el tiempo total de ejecución de la consulta ("Tiempo de ejecución").
"Query_time: max" ordena las consultas por su tiempo máximo de ejecución de consultas, por lo que
La consulta con el "Query_time" más grande será la primera en la lista. "cnt" se refiere más a
la frecuencia de la consulta en su conjunto, con qué frecuencia aparece; "Count" es su
línea correspondiente en el informe de análisis de consultas. Por tanto, cualquier atributo y "cnt" deberían
generar el mismo informe en el que las consultas se ordenan por el número de veces que aparecen.
Al analizar los registros generales ("--type" "genlog"), el "--order-by" predeterminado se convierte en
"Query_time: cnt". Los registros generales no informan los tiempos de consulta, por lo que solo el agregado "cnt"
tiene sentido porque todos los tiempos de consulta son cero.
Si especifica un atributo que no existe en los eventos, pt-query-digest
vuelve al valor predeterminado "Query_time: sum" e imprime un aviso al comienzo de la
informe para cada clase de consulta. Puede crear atributos con "--filter" y ordenar por
ellos; consulte "ATRIBUTOS" para ver un ejemplo.
- valores atípicos
tipo: matriz; predeterminado: Query_time: 1:10
Informe los valores atípicos por atributo: percentil: recuento.
La sintaxis de esta opción es una lista separada por comas de cadenas delimitadas por dos puntos. El
El primer campo es el atributo por el cual se define un valor atípico. El segundo es un número
que se compara con el percentil 95 del atributo. El tercero es opcional y es
en comparación con el agregado cnt del atributo. Las consultas que pasan esta especificación son
agregado al informe, independientemente de los límites que haya especificado en "--limit".
Por ejemplo, para informar consultas cuyo percentil 95 Query_time es de al menos 60 segundos
y que se ven al menos 5 veces, utilice el siguiente argumento:
--outliers Query_time: 60: 5
Puede especificar una opción --outliers para cada valor en "--group-by".
--producción
tipo: cadena; predeterminado: informe
Cómo formatear e imprimir los resultados del análisis de la consulta. Los valores aceptados son:
FORMATO DE VALOR
======= =============================
informe Informe de análisis de consultas estándar
registro lento de MySQL lento
json JSON, en una matriz por clase de consulta
json-anon JSON sin consultas de ejemplo
La salida completa del "informe" se puede deshabilitar especificando "--no-report" (ver
"- [no] informe"), y sus secciones se pueden deshabilitar o reorganizar especificando
"--formato de informe".
La salida "json" se introdujo en 2.2.1 y todavía está en desarrollo, por lo que los datos
la estructura puede cambiar en versiones futuras.
--contraseña
forma corta: -p; tipo: cadena
Contraseña para usar al conectarse. Si la contraseña contiene comas, deben escaparse
con una barra invertida: "exam \, ple"
--pid
tipo: cadena
Cree el archivo PID dado. La herramienta no se iniciará si el archivo PID ya existe y
el PID que contiene es diferente al PID actual. Sin embargo, si el archivo PID
existe y el PID que contiene ya no se está ejecutando, la herramienta sobrescribirá el PID
archivo con el PID actual. El archivo PID se elimina automáticamente cuando se cierra la herramienta.
--Puerto
forma corta: -P; tipo: int
Número de puerto que se utilizará para la conexión.
--lista de procesos
tipo: DSN
Sondear la lista de procesos de este DSN en busca de consultas, con "--interval" en el medio.
Si la conexión falla, pt-query-digest intenta volver a abrirla una vez por segundo.
--Progreso
tipo: matriz; predeterminado: hora, 30
Imprima informes de progreso en STDERR. El valor es una lista separada por comas con dos partes.
La primera parte puede ser porcentaje, tiempo o iteraciones; la segunda parte especifica cómo
a menudo, se debe imprimir una actualización, en porcentaje, segundos o número de iteraciones.
- tiempo de espera de lectura
tipo: tiempo; predeterminado: 0
Espere tanto tiempo por un evento de la entrada; 0 esperar para siempre.
Esta opción establece el tiempo máximo de espera de un evento desde la entrada. Se aplica a
todos los tipos de entrada excepto "--processlist". Si no se recibe un evento después de la
tiempo especificado, el script deja de leer la entrada e imprime sus informes. Si
"--iterations" es 0 o mayor que 1, comenzará la siguiente iteración, de lo contrario, el script
saldrá
Esta opción requiere el módulo Perl POSIX.
- [no] informe
predeterminado: sí
Imprima informes de análisis de consultas para cada atributo "--group-by". Este es el estándar
funcionalidad de análisis de registros lentos. Consulte "SALIDA" para obtener una descripción de lo que hace
y cómo se ven los resultados.
Si no necesita un informe (por ejemplo, cuando usa "--review" o "--history"), es
es mejor especificar "--no-report" porque esto permite que la herramienta omita algunos costosos
operaciones.
--informe-todo
Informe todas las consultas, incluso las que se hayan revisado. Esto solo afecta al "informe"
"--output" cuando se usa "--review". De lo contrario, siempre se imprimen todas las consultas.
--formato de informe
tipo: Matriz; predeterminado: rusage, fecha, nombre de host, archivos, encabezado, perfil, informe de consulta, preparado
Imprima estas secciones del informe de análisis de consultas.
IMPRESIONES DE LA SECCIÓN
============ ==================================== ================
tiempos de CPU de rusage y uso de memoria informado por ps
fecha Fecha y hora local actual
hostname Nombre de host de la máquina en la que se ejecutó pt-query-digest
archivos Archivos de entrada leer / analizar
encabezado Resumen de toda la ejecución del análisis
perfil Tabla compacta de consultas para una descripción general del informe
query_report Información detallada sobre cada consulta única
Preparado Declaraciones preparadas
Las secciones se imprimen en el orden especificado. El rusage, la fecha, los archivos y el encabezado.
las secciones se agrupan si se especifican juntas; otras secciones están separadas por
líneas en blanco.
Consulte "SALIDA" para obtener más información sobre las distintas partes del informe de consultas.
--informe-histograma
tipo: cadena; predeterminado: Query_time
Grafica la distribución de los valores de este atributo.
El gráfico de distribución se limita a los atributos basados en el tiempo, por lo que los gráficos
"Rows_examined", por ejemplo, producirá un gráfico inútil. Los gráficos se ven así:
Distribución de # Query_time
#1nosotros
#10nosotros
#100nosotros
# 1ms
# 10ms ##########################
# 100ms ############################################################################################################################################ ########
# 1 ########
# 10s +
Consulte "SALIDA" para obtener más información.
--reanudar
tipo: cadena
Si se especifica, la herramienta escribe el último desplazamiento de archivo, si hay uno, en el
Nombre del archivo. Cuando se ejecuta de nuevo con el mismo valor para esta opción, la herramienta lee el último
archivo compensado del archivo, busca esa posición en el registro y reanuda el análisis
eventos a partir de ese momento.
--revisión
tipo: DSN
Guarde las clases de consulta para una revisión posterior y no informe las clases ya revisadas.
La tabla predeterminada es "percona_schema.query_review". Especifique la base de datos (D) y la tabla
(t) Opciones de DSN para anular el predeterminado. La base de datos y la tabla son automáticamente
creado a menos que se especifique "--no-create-review-table" (consulte
"- [no] crear-revisión-tabla").
Si la tabla se creó manualmente, debe tener al menos las siguientes columnas. Ustedes
puede agregar más columnas para sus propios propósitos especiales, pero no serán utilizadas por pt-
resumen de consulta.
CREAR TABLA SI NO EXISTE query_review (
suma de comprobación BIGINT UNSIGNED NOT NULL CLAVE PRIMARIA,
TEXTO de huella dactilar NO NULO,
TEXTO de muestra NO NULO,
visto por primera vez DATETIME,
último_visto DATETIME,
revisado por VARCHAR(20)
revisado_el DATETIME,
comentarios TEXTO
)
Las columnas son:
SIGNIFICADO DE LA COLUMNA
=========== ======================================= =============
suma de comprobación Una suma de comprobación de 64 bits de la huella dactilar de la consulta
huella digital La versión resumida de la consulta; su clave principal
muestra El texto de la consulta de una muestra de la clase de consultas
first_seen La marca de tiempo más pequeña de esta clase de consultas
last_seen La marca de tiempo más grande de esta clase de consultas
revisado_por Inicialmente NULL; si se establece, la consulta se omite a partir de entonces
revisado_on Inicialmente NULL; no se le asigna ningún significado especial
comentarios Inicialmente NULL; no se le asigna ningún significado especial
Tenga en cuenta que la columna "huella digital" es la verdadera clave principal para una clase de consultas.
La "suma de comprobación" es solo un hash criptográfico de este valor, que proporciona una
valor que es muy probable que también sea único.
Después de analizar y agregar eventos, su tabla debe contener una fila para cada
huella dactilar. Esta opción depende de "--group-by fingerprint" (que es el predeterminado).
No funcionará de otra manera.
--tiempo de ejecución
tipo: tiempo
Cuánto tiempo se debe ejecutar para cada "--iteraciones". El valor predeterminado es ejecutarse para siempre (puede
interrumpir con CTRL-C). Dado que "--iterations" se establece de forma predeterminada en 1, si solo especificas
"--run-time", pt-query-digest se ejecuta durante esa cantidad de tiempo y luego sale. Los dos
las opciones se especifican juntas para realizar ciclos de recopilación e informe. Por ejemplo,
especificando "--iterations" 4 "--run-time" "15m" con una entrada continua (como STDIN o
"--processlist") hará que pt-query-digest se ejecute durante 1 hora (15 minutos x 4),
informando cuatro veces, una en cada intervalo de 15 minutos.
--modo de tiempo de ejecución
tipo: cadena; predeterminado: reloj
Establezca en qué opera el valor de "--run-time". A continuación se muestran los posibles valores para
esta opción:
reloj
"--run-time" especifica una cantidad de tiempo de reloj real durante el cual la herramienta debe
ejecutar para cada "--iteraciones".
evento
"--run-time" especifica una cantidad de tiempo de registro. El tiempo de registro está determinado por
marcas de tiempo en el registro. Se recuerda la primera marca de tiempo vista y cada marca de tiempo
después de eso se compara con el primero para determinar cuánto tiempo de registro ha pasado.
Por ejemplo, si la primera marca de tiempo que se ve es "12:00:00" y la siguiente es "12:01:30",
es decir, 1 minuto y 30 segundos de tiempo de registro. La herramienta leerá eventos hasta que
el tiempo de registro es mayor o igual que el valor "--run-time" especificado.
Dado que las marcas de tiempo en los registros no siempre se imprimen, o no siempre se imprimen con frecuencia,
este modo varía en precisión.
intervalo
"--run-time" especifica los límites de intervalo del tiempo de registro en el que se registran los eventos
se dividen y se generan informes. Este modo es diferente a los demás porque
no especifica cuánto tiempo debe ejecutarse. El valor de "--run-time" debe ser un intervalo
que se divide uniformemente en minutos, horas o días. Por ejemplo, "5 m" se divide uniformemente
en horas (60/5 = 12, por lo que 12 intervalos de 5 minutos por hora) pero "7 m" no
(60/7 = 8.6).
Especificar "--run-time-mode interval --run-time 30m --iterations 0" es similar a
especificando "--run-time-mode clock --run-time 30m --iterations 0". En lo ultimo
caso, pt-query-digest se ejecutará indefinidamente, produciendo informes cada 30 minutos, pero
esto solo funciona de manera efectiva con entradas continuas como STDIN y el
lista de procesos. Para entradas fijas, como archivos de registro, el ejemplo anterior produce
múltiples informes dividiendo el registro en intervalos de 30 minutos según
marcas de tiempo.
Los intervalos se calculan a partir del segundo / minuto / hora cero en el que una marca de tiempo
ocurre, no desde cualquier momento que especifique. Por ejemplo, con 30 minutos
intervalos y una marca de tiempo de "12:10:30", el intervalo es No "12:10:30" a
"12:40:30", es "12:00:00" a "12:29:59". O, con intervalos de 1 hora, es
"12:00:00" a "12:59:59". Cuando una nueva marca de tiempo excede el intervalo, se genera un informe.
se imprime y el siguiente intervalo se vuelve a calcular en función de la nueva marca de tiempo.
Dado que "--iterations" es 1 de forma predeterminada, probablemente desee especificar un nuevo valor
de lo contrario, pt-query-digest solo obtendrá e informará sobre el primer intervalo del registro
ya que 1 intervalo = 1 iteración. Si desea obtener e informar cada intervalo en un
log, especifique "--iteraciones" 0.
--muestra
tipo: int
Filtre todas menos las primeras N apariciones de cada consulta. Las consultas se filtran por
el primer valor en "--group-by", por lo que, de forma predeterminada, se filtrará por huella digital de consulta.
Por ejemplo, "--sample 2" permitirá dos consultas de muestra para cada huella digital. Útil
junto con "--output slowlog" para imprimir las consultas. Probablemente quieras configurar
"--no-report" para evitar la sobrecarga de agregar y generar informes si solo está usando
esto para imprimir muestras de consultas. Un ejemplo completo:
pt-query-digest --muestra 2 --sin informe --salida slowlog slow.log
--set-vars
tipo: Matriz
Establezca las variables de MySQL en esta lista separada por comas de pares "variable = valor".
De forma predeterminada, la herramienta establece:
wait_timeout = 10000
Las variables especificadas en la línea de comando anulan estos valores predeterminados. Por ejemplo,
especificar "--set-vars wait_timeout = 500" anula el valor predeterminado de 10000.
La herramienta imprime una advertencia y continúa si no se puede establecer una variable.
--mostrar todo
tipo: Hash
Muestre todos los valores de estos atributos.
De forma predeterminada, pt-query-digest solo muestra tantos valores de un atributo que quepan en un
linea sola. Esta opción le permite especificar atributos para los cuales todos los valores
mostrarse (se ignora el ancho de línea). Esto solo funciona para atributos con valores de cadena
como usuario, host, base de datos, etc. Se pueden especificar varios atributos separados por comas.
--ya que
tipo: cadena
Analizar solo consultas más nuevas que este valor (analizar consultas desde esta fecha).
Esta opción le permite ignorar consultas anteriores a un cierto valor y analizar solo
aquellas consultas que son más recientes que el valor. El valor puede ser de varios tipos:
* Valor de tiempo simple N con sufijo opcional: N [shmd], donde
s = segundos, h = horas, m = minutos, d = días (predeterminado s si no hay sufijo
dado); esto es como decir "desde hace N [shmd]"
* Fecha completa con horas opcionales: minutos: segundos:
AAAA-MM-DD [HH: MM :: SS]
* Fecha corta, estilo MySQL:
AAMMDD [HH: MM: SS]
* Cualquier expresión de tiempo evaluada por MySQL:
FECHA_ACTUAL - INTERVALO DE 7 DÍAS
Si proporciona una expresión de tiempo de MySQL y no ha especificado tampoco un DSN para
"--explain", "--processlist" o "--review", debe especificar un DSN en el
línea de comando para que pt-query-digest pueda conectarse a MySQL para evaluar la expresión.
La expresión de tiempo de MySQL está envuelta dentro de una consulta como "SELECT
UNIX_TIMESTAMP ( ) ", así que asegúrese de que la expresión sea válida dentro de este
consulta. Por ejemplo, no utilice UNIX_TIMESTAMP () because
UNIX_TIMESTAMP (UNIX_TIMESTAMP ()) devuelve 0.
Se supone que los eventos están cronológicos: eventos más antiguos al comienzo del registro
y eventos más recientes al final del registro. "--since" es estricto: ignora todas las consultas
hasta que se encuentre uno que sea lo suficientemente nuevo. Por lo tanto, si los eventos de consulta no son
con una marca de tiempo constante, es posible que se ignoren algunos que en realidad son lo suficientemente nuevos.
Consulte también "--hasta".
--enchufe
formas cortas; tipo: cadena
Archivo de socket que se utilizará para la conexión.
- cronograma
Muestre una cronología de eventos.
Esta opción hace que pt-query-digest imprima otro tipo de informe: una línea de tiempo del
eventos. Cada consulta todavía está agrupada y agregada en clases de acuerdo con
"--group-by", pero luego se imprimen en orden cronológico. El informe cronológico
imprime la marca de tiempo, intervalo, recuento y valor de cada clase.
Si todo lo que desea es el informe de la escala de tiempo, especifique "--no-report" para suprimir el
informe de análisis de consultas predeterminado. De lo contrario, el informe cronológico se imprimirá en la
finalizar antes del perfil de tiempo de respuesta (ver "--formato-informe" y "SALIDA").
Por ejemplo, esto:
pt-query-digest / ruta / a / log --group-by distill --timeline
imprimirá algo como:
# ############################################## #######
# informe de destilación
# ############################################## #######
# 2009-07-25 11:19:27 1 + 00: 00: 01 2 SELECCIONAR foo
# 2009-07-27 11:19:30 00:01 2 SELECCIONAR barra
# 2009-07-27 11:30:00 1 + 06: 30: 00 2 SELECCIONAR foo
--escribe
tipo: Matriz; predeterminado: slowlog
El tipo de entrada que se analizará. Los tipos permitidos son
binlog
Analice un archivo de registro binario que primero se convirtió a texto usando mysqlbinlog.
Por ejemplo:
mysqlbinlog mysql-bin.000441> mysql-bin.000441.txt
pt-query-digest: tipo binlog mysql-bin.000441.txt
genlog
Analizar un archivo de registro general de MySQL. Los registros generales carecen de muchos "ATRIBUTOS", en particular
"Tiempo de consulta". El "--order-by" predeterminado para los registros generales cambia a
"Query_time: cnt".
lento
Analice un archivo de registro en cualquier variación del formato de registro lento de MySQL.
tcpdump
Inspeccione los paquetes de red y decodifique el protocolo del cliente MySQL, extrayendo consultas
y respuestas de él.
pt-query-digest en realidad no mira la red (es decir, NO "olfatea
paquetes "). En su lugar, solo analiza la salida de tcpdump. Usted es responsable
para generar esta salida; pt-query-digest no lo hace por usted. Entonces envías
esto para pt-query-digest como lo haría con cualquier archivo de registro: como archivos en la línea de comando o
a STDIN.
El analizador espera que la entrada se formatee con las siguientes opciones: "-x -n -q
-tttt ". Por ejemplo, si desea capturar la salida de su máquina local,
puede hacer algo como lo siguiente (el puerto debe ser el último en FreeBSD):
tcpdump -s 65535 -x -nn -q -tttt -i cualquier -c 1000 puerto 3306 \
> mysql.tcp.txt
pt-query-digest --tipo tcpdump mysql.tcp.txt
Los otros parámetros de tcpdump, como -s, -c y -i, dependen de usted. Solo hazlo
asegúrese de que la salida se vea así (hay un salto de línea en la primera línea para evitar
problemas de página de manual):
2009-04-12 09:50:16.804849 IP 127.0.0.1.42167
> 127.0.0.1.3306: tcp 37
0x0000: 4508 0059 6eb2 4000 4006 cde2 7f00 0001
0x0010: ....
Recuerde que tcpdump tiene una práctica opción -c para detenerse después de capturar algunos
paquetes! Eso es muy útil para probar su comando tcpdump. Tenga en cuenta que tcpdump
no puede capturar tráfico en un socket Unix. Leer
<http://bugs.mysql.com/bug.php? id = 31577> si está confundido acerca de esto.
Devananda Van Der Veen explicó en el Blog de rendimiento de MySQL cómo capturar
tráfico sin dejar paquetes en servidores ocupados. Los paquetes descartados causan pt-query-
digest para perder la respuesta a una solicitud, luego ver la respuesta a una solicitud posterior
y asigne un tiempo de ejecución incorrecto a la consulta. Puede cambiar el filtro a
algo como lo siguiente para ayudar a capturar un subconjunto de las consultas. (Ver
<http://www.mysqlperformanceblog.com/? p = 6092> para obtener más detalles).
tcpdump -i cualquiera -s 65535 -x -n -q -tttt \
'puerto 3306 y tcp [1] & 7 == 2 y tcp [3] & 7 == 2'
Todos los servidores MySQL que se ejecutan en el puerto 3306 se detectan automáticamente en tcpdump
producción. Por lo tanto, si tcpdump out contiene paquetes de varios servidores en
puerto 3306 (por ejemplo, 10.0.0.1:3306, 10.0.0.2:3306, etc.), todos los paquetes / consultas
de todos estos servidores se analizarán juntos como si fueran un solo servidor.
Si está analizando el tráfico de un servidor MySQL que no se ejecuta en el puerto 3306,
consulte "--watch-server".
También tenga en cuenta que pt-query-digest puede fallar al informar la base de datos para consultas cuando
analizar la salida de tcpdump. La base de datos se descubre solo en la conexión inicial
eventos para un nuevo cliente o cuando es ejecutado. Si la salida tcpdump
no contiene ninguno de estos, entonces pt-query-digest no puede descubrir la base de datos.
Se admiten declaraciones preparadas del lado del servidor. El tráfico cifrado con SSL no se puede
inspeccionado y decodificado.
tronco sin procesar
Los registros sin procesar no son registros de MySQL sino archivos de texto simples con una declaración SQL por línea,
como:
SELECCIONE c DESDE t DONDE id = 1
/* ¡Hola Mundo! * / SELECCIONAR * DESDE t2 LÍMITE 1
INSERTAR EN t (a, b) VALUES ('foo', 'bar')
INSERTAR EN t SELECT * FROM monos
Dado que los registros sin procesar no tienen ninguna métrica, muchas opciones y características de pt-query-
digerir no funciona con ellos.
Un caso de uso de los registros sin procesar es clasificar las consultas por recuento cuando la única información
disponible hay una lista de consultas, desde el sondeo "MOSTRAR LISTA DE PROCESOS", por ejemplo.
--Hasta que
tipo: cadena
Analizar solo consultas anteriores a este valor (analizar consultas hasta esta fecha).
Esta opción le permite ignorar consultas más nuevas que un cierto valor y analizar solo
aquellas consultas que son más antiguas que el valor. El valor puede ser uno de los mismos tipos
enumerado para "--desde".
A diferencia de "--since", "--until" no es estricto: todas las consultas se analizan hasta que una tiene un
marca de tiempo que sea igual o mayor que "--hasta". Entonces todas las consultas posteriores son
ignorado
--usuario
forma corta: -u; tipo: cadena
Usuario para iniciar sesión si no es el usuario actual.
--variaciones
tipo: Matriz
Informe el número de variaciones en los valores de estos atributos.
Las variaciones muestran cuántos valores distintos tenía un atributo dentro de una clase. Lo normal
El valor de esta opción es "arg", que muestra cuántas consultas distintas había en el
clase. Esto puede resultar útil para determinar la capacidad de almacenamiento en caché de una consulta.
Los valores distintos se determinan mediante sumas de comprobación CRC32 de los valores de los atributos. Estos
las sumas de verificación se informan en el informe de consulta para los atributos especificados por esta opción,
como:
# arg crc 109 (1/25%), 144 (1/25%) ... 2 más
En esa clase había 4 consultas distintas. Las sumas de control de los dos primeros
se muestran variaciones, y cada una ocurrió una vez (o el 25% del tiempo).
El recuento de variaciones distintas es aproximado porque solo se
salvado. El mod (%) 1000 de la suma de comprobación CRC32 completa se guarda, por lo que algunos
Las sumas de comprobación se tratan como iguales.
--versión
Mostrar versión y salir.
- [no] verificación de versión
predeterminado: sí
Busque la última versión de Percona Toolkit, MySQL y otros programas.
Esta es una función estándar de "buscar actualizaciones automáticamente", con dos
características. Primero, la herramienta verifica la versión de otros programas en el sistema local en
además de su propia versión. Por ejemplo, verifica la versión de cada servidor MySQL.
se conecta a Perl y al módulo de Perl DBD :: mysql. En segundo lugar, comprueba y advierte
sobre versiones con problemas conocidos. Por ejemplo, MySQL 5.5.25 tenía un error crítico y
fue relanzado como 5.5.25a.
Cualquier actualización o problema conocido se imprime en STDOUT antes de la salida normal de la herramienta.
Esta característica nunca debe interferir con el funcionamiento normal de la herramienta.
Para más información visite .
--servidor de vigilancia
tipo: cadena
Esta opción le dice a pt-query-digest qué dirección IP y puerto del servidor (como
"10.0.0.1:3306") para observar al analizar tcpdump (para "--type" tcpdump); todos los demás
los servidores se ignoran. Si no lo especifica, pt-query-digest observa todos los servidores por
buscando cualquier dirección IP usando el puerto 3306 o "mysql". Si estas viendo un servidor
con un puerto no estándar, esto no funcionará, por lo que debe especificar la dirección IP y el puerto
para ver.
Si desea ver una combinación de servidores, algunos se ejecutan en el puerto estándar 3306 y otros
ejecutándose en puertos no estándar, debe crear salidas tcpdump separadas para el
servidores de puertos no estándar y luego especifique esta opción para cada uno. En la actualidad pt-query-
digest no puede detectar automáticamente los servidores en el puerto 3306 y también se le dice que vigile un servidor en un
puerto no estándar.
DSN OPCIONES
Estas opciones de DSN se utilizan para crear un DSN. Cada opción se da como "opción = valor".
Las opciones distinguen entre mayúsculas y minúsculas, por lo que P y p no son la misma opción. No puede haber
espacios en blanco antes o después del "=" y si el valor contiene espacios en blanco, se debe citar.
Las opciones de DSN están separadas por comas. Consulte la página de manual de percona-toolkit para obtener detalles completos.
· UNA
dsn: juego de caracteres; copia: si
Juego de caracteres predeterminado.
· D
dsn: base de datos; copia: si
Base de datos predeterminada para usar al conectarse a MySQL.
F
dsn: mysql_read_default_file; copia: si
Lea solo las opciones predeterminadas del archivo dado.
· H
dsn: host; copia: si
Conéctese al anfitrión.
· pag
dsn: contraseña; copia: si
Contraseña para usar al conectarse. Si la contraseña contiene comas, deben escaparse
con una barra invertida: "exam \, ple"
· PAG
dsn: puerto; copia: si
Número de puerto que se utilizará para la conexión.
· S
dsn: mysql_socket; copia: si
Archivo de socket que se utilizará para la conexión.
· T
La tabla "--review" o "--history".
· U
dsn: usuario; copia: si
Usuario para iniciar sesión si no es el usuario actual.
MEDIO AMBIENTE
La variable de entorno "PTDEBUG" habilita la salida de depuración detallada a STDERR. Para permitir
depurar y capturar toda la salida en un archivo, ejecute la herramienta como:
PTDEBUG = 1 pt-query-digest ...> ARCHIVO 2> & 1
Tenga cuidado: la salida de depuración es voluminosa y puede generar varios megabytes de salida.
LITE PARA TECHOS PLANOS REQUISITOS
Necesita Perl, DBI, DBD :: mysql y algunos paquetes centrales que deberían instalarse en cualquier
versión razonablemente nueva de Perl.
Use pt-query-digestp en línea usando los servicios de onworks.net