Cursos Magento

Encontrando queries lentas no Magento 2

,

Atualizado em 24 de agosto de 2022

Queries e scripts SQL podem deixar lojas e aplicações mais lentas. No Magento isso não é diferente.

Queries lentas?

Como logar queries no Magento 2?

Para habilitar o log de queries no Magento, usamos o seguinte comando:

bin/magento dev:query-log:enable
(e depois bin/magento cache:flush)

Este comando logará todas as queries que levam mais de 0.001 segundo para ser executada e trará toda cadeia (call stack) de código que foi chamado até o momento da execução da query.

Onde o log do SQL é salvo?

Por padrão, o Magento salvará as informações das execuções no syslog. No entanto, em alguns sistemas operacionais, ou quando a opção do syslog estiver desabilitada, o Magento salvará as informações em <pastamagento>/var/debug/db.log.

A partir do Magento 2.3.1 você pode pedir para que o Magento não salve as informações no syslog digitando bin/magento config:set dev/syslog/syslog_logging false.

Logando queries lentas apenas

Se você olhou o seu db.log depois de ativar o log, provavelmente ficou surpreso com a quantidade de coisas gravadas lá. Por isso, o Magento permite logar somente queries que realmente estão demorando mais. Isso pode ser feito através do parâmetro --query-time-threshold.

Exemplo:
bin/magento dev:query-log:enable --query-time-threshold=0.002

Além disso, também é possível não gravar o stack trace das consultas com o parâmetro --include-call-stack=false.

Outras opções de log de queries

$ bin/magento dev:query-log:enable --help
Description:
  Enable DB query logging

Usage:
  dev:query-log:enable [opcoes]

Options:
      --include-all-queries[=INCLUDE-ALL-QUERIES]    Logar todas as consultas. [true|false] [default: "true"]
      --query-time-threshold[=QUERY-TIME-THRESHOLD]  Não logar queries com tempo menor que este. [default: "0.001"]
      --include-call-stack[=INCLUDE-CALL-STACK]      Incluir caminho até a execução. [true|false] [default: "true"]
  -h, --help                                         Mostra esta mensagem
  -q, --quiet                                        Não mostra nenhuma saída
  -V, --version                                      Mostra a versão desta aplicação
      --ansi                                         Force ANSI output
      --no-ansi                                      Disable ANSI output
  -n, --no-interaction                               Do not ask any interactive question
  -v|vv|vvv, --verbose                               Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug

As demais opções são um tanto auto explicativas, e eu traduzi algumas pra facilitar o entendimento.

Exemplo de uso

No vídeo abaixo habilitamos o log de queries no Magento 2, e usamos o comando tail -f para exibir qualquer coisa que é adicionada ao final do arquivo var/debug/db.log.

Note que por estar no Mac, o Magento não gravará no syslog. De qualquer forma, eu havia desabilitado a opção antes como mostrado acima.

Conclusão

O Magento 2 traz uma série de desafios na criação do ambiente e hospedagem. Quando falamos do ambiente de desenvolvimento este problema pode ser ainda maior e mais complexo.

As queries geralmente não são o principal fator de lentidão de lojas Magento 2. Ausência de Disco SSD, pouca memória RAM, utilização incorreta do Redis, configuração da loja, uso de HTTP/1.x, e hospedagem de baixo custo/qualidade podem ser alguns dos problemas de lentidão da sua loja.

A escolha da hospedagem é um fator importante quando falamos de lojas nesta versão. Confira o nosso guia com a lista de hospedagens especializadas em Magento e o nosso teste com a loja que voa na infra de $10.

Quando o assunto é lentidão no ambiente de desenvolvimento, uma série de ferramentas e melhorias podem ajudar. Várias delas são explicadas no Magento 2: O Curso, e frequentemente discutidas no grupo exclusivo de alunos.

Lembre-se de desligar

Lembre-se de desativar o a gravação de queries assim que terminar seu trabalho. Este recurso aumenta o tempo de execução do Magento e pode criar arquivos gigantes em poucos minutos em uma loja em produção.

bin/magento dev:query-log:disable

Últimos posts por Ricardo Martins (exibir todos)
Comentários

Deixe seu comentário

[fbcomments url="https://www.magenteiro.com/blog/magento-2/encontrando-queries-lentas/"]