lunes, 6 de mayo de 2013

Cómo identificar MySQL consultas lentas y preocupaciones relacionados

Original Post: http://anothermysqldba.blogspot.com/2013/05/how-to-identify-mysql-slow-queries-and.html

Esta entrada de blog es parte de la serie de blog 

¿Qué dice el registro de consultas lentas? ¿Incluye preguntas clave de su aplicación?

¿Cuánto tiempo hace que el servidor MySQL ejecutado consultas en este estado?
¿Ha sido siempre lenta o estas consultas corrió bien hasta hace unas semanas?
¿Qué ha cambiado en todo caso?

Se comienza también siguiendo algunas pautas de Shlomi Noaj .
Él tiene algunas preguntas útiles que figuran en esta entrada del blog.
    • "La consulta siguiente devuelve el tamaño total por motor por base de datos." Shlomi Noaj.
    • "A ver si algún índice es un prefijo de otro (en cuyo caso es redundante)" - Shlomi Noaj.
    •  "A ver si cualquiera de los dos índices son iguales" - Shlomi Noaj.
También me gustaría sugerir la comprensión de los conceptos y las herramientas que se muestran en el post de Ronald

Así que vamos a profundizar un poco más en el problema de consultas lentas.

Este es un ejemplo sencillo para que sus resultados pueden variar.

En primer lugar reunir algunos números:

% Consultas lentas
     Sólo los datos de demostración así los resultados pueden variar. 
show status like 'Slow_queries';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Slow_queries | 7 |
+---------------+-------+

show status like 'Questions';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Questions | 84 |
+---------------+-------+
1 row in set (0.01 sec)

SELECT (7 / 84) * 100 as "% Slow Queries";
+----------------+
| % Slow Queries |
+----------------+
| 8.3333 |
+----------------+ 

slow_query_log
Reúna la ubicación, que el DBA a tiempo completo ya debe saber, pero por si acaso:
show variables like '%slow_query%';
+---------------------+-------------------------------+
| Variable_name | Value |
+---------------------+-------------------------------+
| slow_query_log | ON |
| slow_query_log_file | /var/lib/mysql/mysql-slow.log |
+---------------------+-------------------------------+
2 rows in set (0.00 sec) 

Comience a buscar más de estas consultas y en funcionamiento se explica a ver lo que podría ser el problema.
Si lo deseas, puedes revisar algunas herramientas para ayudar.
"Diferentes caminos conducen a veces a la misma castillo."
George RR Martin , Juego de Tronos

"Alguien que sólo lee los periódicos y en el mejor de los libros de autores contemporáneos a mí me parece una persona muy corto de vista que desprecia anteojos. Él es completamente dependiente de los prejuicios y las modas de su tiempo, ya que él nunca llega a ver ni oír nada más. " 
Albert Einstein

Para obtener los mejores resultados, utilice más de una de estas herramientas y asegurarse de que obtiene el panorama y entender lo que se le presenta.
    Una vez que encuentre las consultas que está después, es necesario evaluar con EXPLICAR. A continuación, tendrá la información necesaria para ayudarle a optimizar los índices de consulta y afines, si es necesario.
    Más información sobre explican se puede encontrar a continuación:

    Algunas preocupaciones adicionales para ayudar a rendimiento de las consultas.

    Eficiencia caché de consultas
    Sólo los datos de demostración así los resultados pueden variar. 

    > SELECT @@have_query_cache;
    +--------------------+
    | @@have_query_cache |
    +--------------------+
    | YES |
    +--------------------+


    >show status like '%Qcache_hits%';
    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | Qcache_hits | 32 |
    +---------------+-------+
    1 row in set (0.00 sec)

    > show status like '%Com_select%';
    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | Com_select | 16 |
    +---------------+-------+
    1 row in set (0.00 sec)

    > SELECT ( 32 / (16 + 32) ) * 100 AS "Query Cache Efficiency";
    +------------------------+
    | Query Cache Efficiency |
    +------------------------+
    | 66.6667 |
    +------------------------+
    1 row in set (0.00 sec) 

    No quiero volver a escribir lo que Pedro ha escrito así que por favor consulte a su blog .
    Evaluar el grado de eficiencia que su caché de consultas es. Cómo determinista son las consultas?

    Se une que necesitan un ÍNDICE
    Sólo los datos de demostración así los resultados pueden variar.   
    > show status like '%Select_range_check%';
    +--------------------+-------+
    | Variable_name | Value |
    +--------------------+-------+
    | Select_range_check | 0 |
    +--------------------+-------+

    > show status like '%Select_full_join%';
    +------------------+-------+
    | Variable_name | Value |
    +------------------+-------+
    | Select_full_join | 1 |
    +------------------+-------+

    > SELECT (0 + 1) AS "# of Joins that need an index";

    #
    This is used below as the numerator in
    "# of Joins that need an index today"
    +-------------------------------+
    | # of Joins that need an index |
    +-------------------------------+
    | 1 |
    +-------------------------------+

    > show status like 'Uptime';
    +---------------+--------+
    | Variable_name | Value |
    +---------------+--------+
    | Uptime | 335243 |
    +---------------+--------+

    > SELECT (1/ (335243/86400 )) as " # of Joins that need an index today" ;
    +-------------------------------------+
    | # of Joins that need an index today |
    +-------------------------------------+
    | 0.2577 |
    +-------------------------------------+ 

    Esperemos que pueda evaluar las consultas lentas encontrados con el registro, así como revisar su eficiencia caché de consultas, así como encontrar las combinaciones que necesitan un índice de todos los de la "select @ @ slow_query_log_file;"

    Esperemos que esto se ha vuelto a empezar en la solución de un problema muy antiguo dentro de MySQL.