ELSERVER.COM
Acceso a clientes
ELSERVER.COM

Bienvenido a nuestro blog.
Aquí charlamos abiertamente con nuestros clientes y seguidores entusiastas.

Buscar

  • Últimos Comentarios
    • carlos lopez: si se gana dinero yo gano en 3$ y 5$ diarios con arroba.com.ve
    • Quimiquero: Tengo otra solicitud: que se puedan cambiar los valores por defecto, a través del ini_set en php, de los...
    • Pablo: Aclaracion, por que necesito esto.. hay veces que no funciona tan bien y va a spam directamente… Grax.
    • Pablo: Poseo un soft de envio masivo que configurandolo funciona bien, no necesito mucho trafico diario, ya que es un...
    • bayrak satisi: Gracias por compartir. Felicitaciones por un sitio muy agradable

Nuevo Servicio: MySQL Slow Query Log

Por Joel Chornik el 4 Sep 2008 en GridPanel, Técnico

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 :)

Ya dejaron 4 opiniones sobre esta nota:

ELSERVER SRL no se responsabiliza por las opiniones vertidas en el presente blog sobre personas físicas o jurídicas, siendo las mismas exclusiva responsabilidad de quien las vierte. Asimismo las opiniones dadas por los usuarios del blog no reflejan necesariamente la opinión de ELSERVER SRL.

  1. Francisco Mosse el 05 Sep 2008 a las 11:50 am #

    Entré pero figura vacío el historial de ultimas consultas. Hay que esperar para que figuren?

    Saludos!
    Francisco

  2. Andres el 05 Sep 2008 a las 3:56 pm #

    De hecho fueron 2 posts.. ya que uno fue de ustedes…

    Vamos a probar a ver que pasa con este nuevo servicio…

    Saludos!

  3. Nazareno el 08 Sep 2008 a las 4:24 pm #

    Waw, lo que mas me interesó fue el PD, algo que vengo esperando hace tiempo (Y)

  4. Jose Maria Pando el 10 Sep 2008 a las 4:32 pm #

    Muy bueno, nos va a ayudar a optimizar las consultas que a veces lo dejamos para lo ultimo y es tan importante.
    saludos

Trackback URI | Seguir comentarios vía RSS

Dejá tu opinión!