Como identificar MySQL consultas lentas e preocupações relacionadas
Dicas MySQL

Como identificar MySQL consultas lentas e preocupações relacionadas


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

Este blog é parte da série de posts 

  • MySQL Sintonia Pergunta
    • Como identificar MySQL consultas lentas e preocupações relacionadas
    • Como sintonizar o Servidor MySQL
O que faz o log de consultas lentas dizer? Será que inclui consultas para a sua aplicação?

Há quanto tempo o servidor MySQL executado consultas neste estado?
Tem sido sempre lento ou essas consultas funcionou muito bem até algumas semanas atrás?
O que mudou, se alguma coisa?

Você começa também seguindo algumas orientações por Shlomi Noach .
Ele tem algumas consultas úteis listados neste post do blog.
  • http://code.openark.org/blog/mysql/useful-database-analysis-queries-with-information_schema
    • "A consulta a seguir retorna o tamanho total por motor por banco de dados." - Shlomi Noach.
    • "Veja se algum índice é um prefixo de outro (caso em que é redundante)" - Shlomi Noach.
    •  "Veja se quaisquer dois índices são idênticos" - Shlomi Noach.
Também gostaria de sugerir a compreensão dos conceitos e ferramentas mostrada no post de Ronald
  • http://ronaldbradford.com/blog/10x-performance-improvements-in-mysql-a-case-study-2010-02-07/

Então, vamos cavar um pouco mais sobre o problema de consultas lentas.

Este é um exemplo simples para que seus resultados podem variar.

Primeiro reunir alguns números:

% De consultas lentas
     Apenas dados de demonstração para os seus resultados irão 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 a localização, que o DBA em tempo integral já deve saber, mas apenas no caso de:
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) 

Comece a olhar sobre estas consultas e funcionando explica para ver o que poderia ser o problema.
Se você quiser, pode rever algumas ferramentas para ajudar.
  • http://dev.mysql.com/doc/refman/5.6/en/mysqldumpslow.html
    • ou seja: # mysqldumpslow-t 10-s em-r mysql-slow.log
  • http://www.percona.com/doc/percona-toolkit/2.2/pt-query-digest.html
    • ou seja: # pt-query-digest mysql-slow.log
  • http://hackmysql.com/mysqlsla
    • . isto é: # / bin / mysqlsla - de log lento / var / lib / mysql / mysql-slow.log
  • http://www.fromdual.com/tools
"Caminhos diferentes, por vezes, levam ao mesmo castelo."
- George RR Martin , A Game of Thrones

"Alguém que só lê jornais e na melhor das hipóteses livros de autores contemporâneos olha para mim como uma pessoa extremamente míope que despreza óculos. Ele é completamente dependente dos preconceitos e modas de seu tempo, já que ele nunca chega a ver ou ouvir qualquer outra coisa. " 
- Albert Einstein

Para obter os melhores resultados, use mais de uma dessas ferramentas e garantir que você obtenha o retrato grande e entender o que está sendo apresentado a você.
    Depois de encontrar as consultas que são depois, é preciso avaliá-los com EXPLAIN. Então você vai ter as informações necessárias para ajudá-lo a otimizar os índices de consulta e relacionada, se necessário.
    Mais informações sobre a explicar pode ser encontrado abaixo:
    • http://dev.mysql.com/doc/refman/5.6/en/using-explain.html
    • http://www.lornajane.net/posts/2011/explaining-mysqls-explain
    • http://www.slideshare.net/myxplain/explaining-the-mysql-explain
    • http://www.slideshare.net/ligaya/explain
    • http://www.techrepublic.com/article/three-easy-ways-to-optimize-your-mysql-queries/6137168

    Algumas preocupações adicionais para ajudar o desempenho da consulta.

    Eficiência Cache de Consultas
    Apenas dados de demonstração para os seus resultados irão 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) 

    Eu não quero reescrever o que Pedro já escreveu para consultar seus posts .
    Avaliar a eficiência do seu cache de consultas é. Como determinista são as suas dúvidas?
    • http://www.mysqlperformanceblog.com/2006/09/29/what-to-tune-in-mysql-server-after-installation/
    • http://www.mysqlperformanceblog.com/2006/07/27/mysql-query-cache/

    Junta que precisa de um índice
    Apenas dados de demonstração para os seus resultados irão 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 |
    +-------------------------------------+ 

    Esperamos que você possa avaliar as consultas lentas encontrados com o log, bem como rever a sua eficiência do cache de consulta, bem como encontrar a junta que precisa de um índice de tudo a partir do "select @ @ slow_query_log_file";

    Esperemos que este tenha chegado a começar a resolver um problema muito antigo no MySQL.



    loading...



    Dicas MySQL




    



    .