Mysql 5.7 vs 5.5: consulta simples leva 50 vezes mais tempo para executar

4

Eu tenho um banco de dados "álgebra" com uma tabela "perguntas" com 1.033.990 linhas. Os registros têm um atributo 'resolvido' que é INT. Eu tenho uma consulta simples

select count(*) from questions where solved = 0

Eu tenho dois servidores com CPUs semelhantes. Nos dois servidores, as tabelas são as mesmas. (banco de dados é uma réplica de produção). Eles estão em SSDs. Um servidor tem o Ubuntu 14.04 com o MySQL 5.5.49, e outro servidor tem o Ubuntu 16.04 com o MySQL 5.7.12.

O problema é que esta consulta leva apenas 0,009s no MySQL 5.5, mas leva 0.304s no MySQL 5.7. Que é 34 vezes mais lento !!!

Os planos de consulta são aproximadamente semelhantes:

Servidor lento:

id      select_type     table   partitions      type    possible_keys   key     key_len ref     rows    filtered        Extra
1       SIMPLE  questions       NULL    index   NULL    by_topic_solved 97      NULL    1033990 10.00   Using where; Using index

Servidor rápido:

id  select_type table   type    possible_keys   key key_len ref rows    Extra
1   SIMPLE  questions   index   NULL    by_topic_solved 97  NULL    1033989 Using where; Using index

Por que isso pode ser o caso me deixa confuso. Vi outros problemas de desempenho mais complicados com essa nova configuração do 5.7, mas esse é o problema mais simples a ser resolvido em termos da consulta subjacente.

Eu estou tentando encontrar a explicação para isso ou por onde começar. my.cnf foi aproximadamente semelhante entre os dois. Qualquer sugestão seria aceita com gratidão.

    
por Igor Chudov 13.06.2016 / 02:52

1 resposta

5

Eu entendi completamente esse problema. O que mudou é que no novo mysql, o cache de consulta está desabilitado devido à configuração padrão de query_cache_type = OFF. Quando reativei o cache de consulta definindo query_cache_type = 1, o melhor desempenho veio de volta. Como meu site usa 100 vezes mais consultas SELECT do que consultas INSERT / UPDATE, usar cache de consulta faz sentido para mim. Obrigado por me apontar para olhar nessa direção!

    
por 13.06.2016 / 18:34