Nuevo Servicio: MySQL Slow Query Log
Dicho y hecho, hemos agregado el nuevo servicio de reporte sobre las consultas SQL de tus bases de datos.
Antes de entrar en detalle quiero señalar que desde el equipo de Desarrollo estamos profundamente indignados con la cantidad de respuesta que tuvo el post anterior respecto de los 3 comentarios que nos dejaron en el prelanzamiento de estos nuevos reportes. Qué pasó con los tecnófilos ?
En fin.
Los molesto con que ingresen a su GridPanel y miren la sección MySQL -> Registro de Consultas. Se van a encontrar con un listado dÃa a dÃa, base por base, de todas las consultas SQL que sus sitios hayan ejecutado que hayan superado 1 segundo de ejecución. Pueden ver varios datos asociados a cada consulta, realizar búsquedas por cualquier cadena de texto y lo que es mejor la información se actualiza una vez por minuto, no luego de varias horas.
Cada segundo que ven ahà es un segundo que sus usuarios tuvieron que esperar asà que es una excelente herramienta para optimizar un sitio!
Una guia muy rápida de como optimizar una consulta SQL
ImagÃnense una base de datos como una estanterÃa llena de libros. Cada libro de la estanterÃa es una tabla.
Cada página del libro es un registro (a fines prácticos, sepan que esto es solo una analogÃa)
Si les pido que me busquen en qué página empieza el capÃtulo 2 del libro una forma es abrirlo, y mirar página por página, una por una, hasta encontrar una página que diga “CAPITULO 2″. Me van a decir, el capitulo 2 empieza en la página 40.
Ahora bien, lo más probable es que el libro tenga un Ãndice al principio y mirando solamente el Ãndice y sin mirar el resto del libro me puedan decir también que el capitulo 2, efectivamente empieza en la página 40.
Cuando trabajamos con bases de datos el concepto es exactamente el mismo. Si guardamos muchos registros (páginas), tengamos presente que cuando le pedimos al motor de MySQL que nos traiga un resultado va a tener que leer página por página, la tabla (libro) entero hasta encontrar todo lo que le pedimos.
Pero si armamos un Ãndice, los resultados van a ser mucho más rápidos!
La gran mayorÃa de las consultas que van a encontrar en el Slow Query Log de MySQL tienen que ver con esto. No siempre, pero dirÃa que un 95% de los casos. Y muchas veces un pequeño indice en una columna de datos determinada puede generar enormes diferencias. Hoy mismo trabajamos con un cliente para reducir una consulta de 180 segundos a 0.01 segundos con 2 Ãndices!
Entonces lo que tenemos que hacer es:
1. Identificar las consultas lentas (esto lo hacemos por vos ![]()
2. Ejecutar la consulta anteponiendo la cláusula EXPLAIN.
Por ejemplo si la consulta es “SELECT * FROM usuarios WHERE cumpleanos = ’2008-25-10′”
Ejecutamos lo siguiente: “EXPLAIN SELECT * FROM usuarios WHERE cumpleanos = ’2008-25-10′”
Nos va a dar algo parecido a:
+–+————+———-+——+—————+——-+——–+——-+——-+————-+
| id | select_type | table      | type | possible_keys | key    | key_len | ref    | rows   | Extra        |
+–+————+———-+——+—————+——-+——–+——-+——-+————-+
| 1 | SIMPLE     | usuarios  | ALL | NULL          | NULL |   NULL | NULL | 19063 | Using where |
+–+————+———-+——+—————+——-+——–+——-+——-+————-+
3. Crear los Ãndices adecuados (imaginarse: que columna tendrÃa que leer para filtrar lo que me piden?)
y con un simple “ALTER TABLE usuarios ADD INDEX indice1 (cumpleanos);” la cosa cambia:
+–+————+———-+——+—————+———-+———+——-+—-+————-+
| id | select_type | table      | type | possible_keys | key          | key_len | ref     | rows   | Extra     |
+–+————+———-+——+—————+———-+———+——-+—-+————-+
| 1 | SIMPLE     | usuarios  | ref    | indice1            | indice1    |        8  | const   | 1   | Using where |
+–+————+———-+——+—————+———-+———+——-+—-+————-+
Si se fijan van a ver que la cantidad de registros (rows/páginas) analizadas pasó de 19063 (la cantidad de usuarios que tengo a 1. Mucho, pero mucho más rápido.
4. Probar nuevamente con un EXPLAIN. Si los resultados no son satisfactorio pueden eliminar el Ãndice mediante el comanto ALTER TABLE usuarios DROP INDEX indice1.
Con estos pasos van a lograr que sus sitios funcionen mucho más rápido. Y si sus registros de consultas lentas están vacÃos, quiere decir que están haciendo las cosas bien
(o que las tablas son muy chicas!)
Hay muchas herramientas para este tipo de tareas como el esta, esta o esta otra.
Eso es todo!
pd. Estamos trabajando ahora en una actualización general de todas las instalaciones de PHP en versión 4 y versión 5 en todos nuestros servidores. Vamos a incluir nuevos módulos, lÃmites de memoria y upload más amplios y la posibilidad de elegir entre varias configuraciones php.ini diferentes. Estén atentos para dentro de poco
Buenos Aires (011) 5254.0544
Madrid: (+34) 911895144
DF: (+52) 5540001022
Caracas: (+58) 2123357630
Lima: (+51) 17201710
Miami: (+1) 3055078868
4 Comentarios
Entré pero figura vacÃo el historial de ultimas consultas. Hay que esperar para que figuren?
Saludos!
Francisco
De hecho fueron 2 posts.. ya que uno fue de ustedes…
Vamos a probar a ver que pasa con este nuevo servicio…
Saludos!
Waw, lo que mas me interesó fue el PD, algo que vengo esperando hace tiempo (Y)
Muy bueno, nos va a ayudar a optimizar las consultas que a veces lo dejamos para lo ultimo y es tan importante.
saludos