Estamos tratando de depurar el rendimiento del servidor y me gustaría capturar una instantánea de las consultas que se ejecutan en nuestro servidor MySQL durante un par de minutos.
Estoy familiarizado con MySQL SHOW FULL PROCESSLIST
, sin embargo, me gustaría poder ejecutar esto a través de la línea de comando para poder volcarlo en un archivo y publicarlo.
¿Hay alguna manera de enviar esta consulta a un archivo y hacer que se ejecute cada segundo más o menos?
¿Hay una mejor manera de capturar todas las consultas que se ejecutan?
Tenga en cuenta que no estoy interesado solo en las consultas lentas (estoy familiarizado con el registro de consultas lentas).
echo show full processlist | mysql
mejor o mejorSELECT info FROM information_schema.processlist WHERE Command="Query" AND User!="root"
en un ciclo en bash. Agregue un par de líneas y obtendrá la misma funcionalidad de consulta queinnotop
opt-kill
Respuestas:
Usaría el registro de consulta lento. Captura todas las consultas, no solo las que son lentas, si configura long_query_time = 0.
También captura TODAS las consultas, lo cual no es cierto para las técnicas de rastreo TCP mencionadas aquí; esos no capturarán consultas ejecutadas a través de un socket. Lo mismo para ver SHOW PROCESSLIST; extrañará consultas rápidas.
Si desea capturar consultas a través de la lista de procesos o el tráfico TCP, sugeriría usar pt-query-digest de Percona Toolkit. Puede sondear la lista de procesos por usted (y dar sentido a los resultados, lo cual es muy difícil de hacer si está capturando un montón de muestras usted mismo), y puede interpretar el protocolo TCP de MySQL, por lo que puede obtener algunos TCP traficar y analizarlo. Por supuesto, también es el mejor agregador de consultas / generador de perfiles / reportero jamás escrito, pero no dijo lo que desea hacer con las consultas después de capturarlas.
fuente
La forma más sólida sería utilizar el "registro de consultas generales", que capturará todas las consultas: http://dev.mysql.com/doc/refman/5.1/en/query-log.html
No especifica la versión del servidor MySQL, pero si tiene 5.1.12 o posterior, puede habilitarla y deshabilitarla con una variable global a través de SQL; Vea la documentación para más detalles.
fuente
Pruebe este comando como root (o use
sudo
):Encontrado http://www.mysqlperformanceblog.com/2008/11/07/poor-mans-query-logging/
fuente
Seguro:
Salud
fuente
Este podría ser un lugar para el proxy Mysql . Básicamente le permite capturar (y manipular) las consultas que se envían. Una configuración básica para interceptar es bastante fácil. Luego, simplemente cambie la configuración de su cliente para que apunte al proxy para que pueda capturar todas las solicitudes.
fuente
El programa tshark de Wireshark basado en terminal puede ayudar a:
sudo yum install wireshark
te dará tshark en Amazon Linux ysudo apt-get install tshark
te dará tshark en Ubuntu 14+fuente
Usé la solución de 'Rui Pedro Bernardino. Funciona muy bien, excepto que cambié un par de cosas en la primera línea como se detalla a continuación ...
fuente
Capture sesiones mysql tcp usando tcpdump, tanto consultas como respuestas. Puede analizar un volcado, por ejemplo, utilizando herramientas maatkit:
http://www.maatkit.org/doc/mk-tcp-model.html
http://www.maatkit.org/doc/mk-query-digest.html
fuente
Estaba buscando y buscando y finalmente llegué a MONyog para monitorear todas las consultas en tiempo real que se ejecutan en el servidor mysql. Lo único que se debe tener en cuenta es "Performance_schema" y "declaraciones_digest" para habilitar la tabla y Performance_schema es disponible con MySQL 5.6.14 y superior.
fuente