Karen Guadalupe Orozco Luis Emma Laura Vera Aragn Ervin Aquino Lpez MONITOREO EN TIEMPO REAL Y DETENCIN DE PROCESOS EN MYSQL
Es necesario analizar el consumo de memoria,
disco y CPU en los servidores (particularmente el de base de datos) para determinar en qu estado se encontraban durante la ejecucin de la misma. Se trata de una aplicacin desarrollada por terceros, implementada utilizando Java (corriendo sobre un servidor Glassfish) y bases de datos MySQL. Al verificar el estado del sistema y los procesos en el servidor de aplicacin (Glassfish), no se detect un consumo elevado de CPU, memoria, ni disco. En cambio, al monitorear el estado del servidor de bases de datos MySQL (utilizando la herramientaatop) se detect un elevado consumo de CPU y lecturas a disco (correspondiente a una larga consultaSELECT, como demostrar ms adelante).
MySQL utiliza un hilo de ejecucin para cada conexin al motor de base de datos. Desde la consola de MySQL es posible listar los hilos en ejecucin mediante la consultaSHOW PROCESSLIST: Cada fila representa una conexin. Se observa que la aplicacin Java en cuestin mantiene 8 conexiones a la base de datos "db1", desde el servidor Glassfish. Y sobre una de las conexiones (cuyo "Id" de hilo es "24782") se est ejecutando la consulta que provoca la demora en la respuesta desde el servidor Web Glassfish. La consultaSHOW PROCESSLISTslo muestra los primeros caracteres de la consulta en el campo "Info". Para ver la consulta completa, ejecutarSHOW FULL PROCESSLIST. Es posible terminar conexiones utilizando el comandoKILLespecificando el "Id" de thread, por ejemplo: Se observa que la conexin en cuestin ha sido finalizada: Lgicamente, este comando, adems de finalizar la consulta, cierra la conexin con el cliente. Por ende se provocan errores en el servidor de aplicacin:
Por esta razn, probablemente ser necesario reiniciar
la aplicacin (en este caso reiniciar el servidor Glassfish). Esto implica que el comandoKILLslo debe ser utilizado como una medida drstica para recuperar un servidor de bases de datos comprometido o sobrecargado. Por otro lado, si se ejecuta el comandoKILLa una conexin en la cual se est ejecutando una consultaREPAIR_TABLEuOPTIMIZE_TABLEsobre una tabla MyISAM, se provocar la corrupcin o destruccin de dicha tabla. Cuando ejecutshow full processlist(antes de haber matado el hilo):
Pude comprobar que la consulta ejecutada era la
siguiente (para mantener la confidencialidad de la aplicacin modifiqu los nombres de todas las bases de datos, tablas, campos y valores): https:// www.linuxito.com/gnu-linux/nivel-alto/508-monito reo-en-tiempo-real-y-detencion-de-procesos-mysql