Detectar consultas lentas en MySQL

Es posible que, a veces, las páginas web alojadas en nuestro servidor tarden mucho en cargarse. Si nuestras páginas utilizan MySQL, es posible que algunas consultas no sean óptimas y esto sea la causa de la lentitud de las mismas.

A medida que crecen las aplicaciones es más difícil localizar qué consultas son las que están ralentizando nuestro servidor, y localizar el problema puede ser un trabajo largo y complicado.

Afortunadamente, el propio MySQL nos facilita esta tarea, brindándonos la posibilidad de obtener un registro completo de las consultas lentas que se ejecutan en nuestro servidor. Para ello, tan solo debemos activar el log de consultas lentas para que MySQL las vaya recopilando y así poder ver cuáles son aquellas que más se repiten y poder actuar en consecuencia.

Para activar el log de consultas lentas, accedemos por SSH a nuestro servidor y abrimos el archivo de configuración de MySQL para modificarlo:

pico /etc/mysql/my.cnf

Localizamos las líneas donde se configura el log:

# Here you can see queries with especially long duration
#log_slow_queries        = /var/log/mysql/mysql-slow.log
#long_query_time = 2
#log-queries-not-using-indexes

Y descomentamos las líneas que nos interesen. Este es el significado de cada una de ellas:

- log_slow_queries: indicamos el nombre del fichero que creará el servidor.
- long_query_time: indicamos el valor, en segundos, a partir del cual MySQL ha de considerar que una consulta es lenta.
- log-queries-not-using-indexes: si descomentamos esta línea, MySQL también almacenará en el log aquellas consultas que no utilizan ningún índice.

En nuestro ejemplo, solo vamos a descomentar las dos primeras líneas, indícandole que guarde en el log aquellas consultas cuyo tiempo de ejecución supere los 2 segundos. Por tanto, las líneas quedarían así:

# Here you can see queries with especially long duration
log_slow_queries        = /var/log/mysql/mysql-slow.log
long_query_time = 2
#log-queries-not-using-indexes

Guardamos el fichero y reiniciamos el servicio MySQL:

/etc/init.d/mysql restart

A partir del reinicio, MySQL empezará a recoger en el fichero de log aquellas consultas que tarden más de 2 segundos en ejecutarse.

Ahora solo queda esperar a que se recojan los suficientes datos para poder tener un listado completo de aquellas consultas que están dando problemas.

Para consultar el log, MySQL también nos proporciona una herramienta: mysqldumpslow. Con ella, podremos leer el log filtrando y ordenando los resultados de forma que nos resulte fácil interpretar los datos. Por ejemplo, una lectura común es que sólo queramos ver las 15 consultas más lentas almacenadas en el log. Para ello utilizaremos la siguiente línea de comandos:

mysqldumpslow -s c -t 15 /var/log/mysql/mysql-slow.log

Con la opción “-s” indicamos el criterio de ordenación (en el ejemplo, “c” es por número de ejecuciones de la consulta) y con “-t” indicamos el número de consultas que nos ha de mostrar en pantalla (en nuestro ejemplo serán 15).

Para ampliar la información, podéis dirigiros a la página oficial de MySQL sobre el log de consultas lentas o consultar al detalle el uso de mysqldumpslow (en inglés).

¡Esperamos que os sirva de ayuda!

Nota: las rutas utilizadas pueden variar dependiendo de la distribución Linux instalada en el servidor.

Acceso a la base de datos de Plesk 9.x Linux

En ocasiones es necesario el acceso a la base de datos de Plesk para realizar ciertas tareas,  para ello tan solo se ha de acceder al shell de Linux y escribir:

mysql -uadmin -p`cat /etc/psa/.psa.shadow` psa

Con ello se dispone de acceso a la base de datos.

Error en el inicio de sesión plesk MySQL query failed: Can’t find file: ‘./psa/misc.frm’ (errno: 13)

Puede que después de realizar, una copia de ficheros Plesk al intentar entrar en nuestro panel aparezca un error en: sessions.frm

Por otro lado si intentamos arrancar plesk desde la consola:

/etc/init.d/psa start

Nos aparece un error como este: ERROR 1017 (HY000) at line 1: Can’t find file: ‘./psa/sessions.frm’ (errno: 13)

Esto es debido a que se han perdido algunos de los atributos de permisos en, /var/lib/mysql/psa

Por lo tanto hay que reestablecer los permisos con el comando chmod

ej. chmod 777 /var/lib/mysql/psa

Posteriormente iniciamos plesk:

/etc/init.d/psa start

Y al entrar en el panel https://dominio.ext:8443 ya dispondremos de nuevo de la pantalla de login

¿Como puedo conectarme a mi base de datos Mysql desde el exterior con mi hosting?

Por motivos de seguridad, el servidor de base de datos solo permite conexiones desde él mismo.

Si necesita acceder desde el exterior al servidor de base de datos, deberá habilitársele un acceso exprofeso.

Para ello, es necesario que nos proporcione a través de un ticket al departamento de sistemas los siguientes datos:

- Nombre de la base de datos
- Usuario de la base de datos
- Contraseña
- IP fija desde la que acceder

El puerto al cuál tendrá acceso a su Base de datos es el 3306