ShareThis

miércoles, 28 de octubre de 2009

mtop: monitoreo de carga en MySQL


Recientemente he tenido la necesidad de monitorear en tiempo real el desempeño de una base de datos MySQL. Si bien hasta el momento he utilizado top y mysqladmin la información que obtenía allí era fragmentada y en ocasiones difícil de correlacionar (como consultas lentas, asi como nivel de utilizacion del Query Cache).

Un comando que indica procesos en ejecución en mySQL es el siguiente:
mysqladmin -u processlist -p

Sin embargo, revisando en Internet me encontré con una utilidad denominada mtop que simplifica de gran manera esta labor.

Luego de descargar el archivo .tar.gz se debe proceder a validar las dependencias. En el archivo README se indica lo siguiente:


mtop requires the following perl modules:

Module Available At
------------ --------------------------------------------------------
Curses http://www.cpan.org/authors/id/WPS
DBI Distributed as Bundle::DBI: http://www.cpan.org/authors/id/TIMB
DBD::mysql http://www.cpan.org/authors/id/JWIED
Getopt::Long (Distributed with Perl 5)
Net::Domain Part of libnet: http://www.cpan.org/authors/id/GBARR/

Send bugs/comments to Marc Prewitt


Por tanto, verifique que tenga instalados los paquetes ncurses, ncurses-devel y perl-Curses (Disponible en http://dag.wieers.com/rpm/packages/perl-Curses/)

El proceso de instalación es el siguiente:


perl Makefile.PL
make
make install



Una vez instalado puede ejecutarlo con el comando mtop. Te recomiendo revisar el total de threads, y el numero de estos activos en ejecución en un momento dado: Ej. 37 threads: 1 running.

Elementos de monitoreo

* Habilitar el Slow Query Log: loguea todas las consultas que se excedan de un tiempo dado (log_query_time) o bien, que no utilicen índices (log-queries-not-using-indexes). Para activarlo, se debe editar el archivo my.cnf (habitualmente localizado en la ruta raiz /etc) y agregar en la sección [mysqld] las siguientes directivas:


long_query_time = 1
log-slow-queries = /var/log/mysql/mysql-slow.log
log-queries-not-using-indexes


Se puede revisar en el log de consultas lentas cuales consultas estan tomando tiempo excesivo como punto de inicio para atacar un problema de desempeño.

* Analizar mediante el comando EXPLAIN, el plan de ejecución para una consulta especifica. Este comando permite determinar si se utilizan índices, el número de filas exploradas e información adicional.


EXPLAIN {CONSULTA SQL}




Revisa tambien algunos ejemplos de consultas avanzadas para MySQL







Si su servicio está sobre Amazon Relational Database Service RDS, la siguiente nota puede ser de utilidad para hacer tuning de RDS.
Otros artículos de Interés
*http://www.maxglaser.net/como-mejorar-y-monitorear-el-rendimiento-de-mysql/
*http://www.mysqlperformanceblog.com/
*http://dev.mysql.com/tech-resources/presentations/presentation-oscon2000-20000719/index.html

No hay comentarios:

Publicar un comentario