Verificando consultas e processos lentos MySQL

Este artigo fala sobre alguns problemas comuns do MySQL (consultas lentas, processos demorando muito) que podem afetar negativamente o site de um comerciante e as soluções que eles indicam.

Verificação de "consultas lentas" do MySQL

Descrição

Se você tiver uma interrupção possivelmente causada por um banco de dados sobrecarregado, essas etapas ajudarão a verificar o log de consultas lentas do seu banco de dados.

Analisar consultas usando a linha de comando MySQL (Adobe Commerce Cloud/on-premise/Magento Open Source)

  1. Faça logon na linha de comando do MySQL (Adobe Commerce no local/Magento Open Source) ou no servidor de nuvem na linha de comando (Adobe Commerce na infraestrutura de nuvem).

  2. Examine o log de consulta lenta para consultas com mais de 50 segundos:

    code language-bash
    grep 'Query_time: [5-9][0-9]|Query_time: [0-9][0-9][0-9]' /var/log/mysql/mysql-slow.log -A 3
    
  3. Vá para https://www.unixtimestamp.com/ (ou um Conversor de Carimbo de Data/Hora Unix semelhante) e insira o carimbo de data/hora de quando a consulta lenta foi executada.

  4. Se o tempo estiver correlacionado com qualquer interrupção de site que você tenha experimentado, pode ser causado por um banco de dados sobrecarregado. Verifique quais cargas estavam no banco de dados naquele momento. Exemplos dessas cargas:

  • Processos Cron
  • Tráfego (bots ou people)
  • Scripts de importação/exportação
  • Criação de despejos

Analisar consultas usando o Percona Toolkit (Adobe Commerce Pro: somente arquitetura em nuvem)

Se seu projeto do Adobe Commerce for implantado na arquitetura Pro, você poderá usar o Percona Toolkit para analisar consultas.

  1. Execute o comando pt-query-digest --type=slowlog nos logs de consulta lenta do MySQL.

  2. Com base nos problemas encontrados, siga as etapas para corrigir o query, para que ele seja executado mais rapidamente.

Verificando a "lista de processos" do MySQL

Descrição

Isso ajudará a identificar se o servidor MySQL está ativo e se não há consultas presas.

Etapas

  1. Faça logon na linha de comando do MySQL (Adobe Commerce no local/Magento Open Source) ou no servidor de nuvem na linha de comando (Adobe Commerce na infraestrutura de nuvem).

  2. Faça logon no MySQL usando o bloco de código abaixo. Isso automatizará o processo de logon.

    code language-mysql
    `export DB_NAME=$(grep [\']db[\'] -A 20 app/etc/env.php | grep dbname | head -n1 | sed "s/.*[=][>][ ]*[']//" | sed "s/['][,]//");    export MYSQL_HOST=$(grep [\']db[\'] -A 20 app/etc/env.php | grep host | head -n1 | sed "s/.*[=][>][ ]*[']//" | sed "s/['][,]//");    export DB_USER=$(grep [\']db[\'] -A 20 app/etc/env.php | grep username | head -n1 | sed "s/.*[=][>][ ]*[']//" | sed "s/['][,]//");    export MYSQL_PWD=$(grep [\']db[\'] -A 20 app/etc/env.php | grep password | head -n1 | sed "s/.*[=][>][ ]*[']//" | sed "s/[']$//" | sed "s/['][,]//");    mysql -h $MYSQL_HOST -u $DB_USER --password=$MYSQL_PWD $DB_NAME -U -A -e 'show processlist;`
    
  3. Se você receber um erro de volta ou se a resposta demorar mais de 30 segundos, entre em contato com o suporte para verificar o servidor MySQL.

  4. Observando a saída de exemplo.

  5. Este é um exemplo de saída:

    code language-mysql
    `$ mysql -h $MYSQL_HOST -u $DB_USER --password=$MYSQL_PWD $DB_NAME -U -A -e 'show processlist;'    +-----------+---------------+--------------------+---------------+---------+------+----------------+------------------------------------------------------------------------------------------------------+----------+    | Id        | User          | Host               | db            | Command | Time | State          | Info                                                                                                 | Progress |    +-----------+---------------+--------------------+---------------+---------+------+----------------+------------------------------------------------------------------------------------------------------+----------+    | 123456789 | abcdefghijklm | 192.168.7.10:12345 | abcdefghijklm | Query   |    0 | Writing to net | SELECT `magento_versionscms_hierarchy_node`.*, `page_table`.`title` AS `page_title`, `page_table`.`i |    0.000 |    | 123456788 | abcdefghijklm | 192.168.7.10:12344 | abcdefghijklm | Sleep   |    0 |                | NULL                                                                                                 |    0.000 |    | 123456777 | abcdefghijklm | 192.168.7.10:12333 | abcdefghijklm | Sleep   |    0 |                | NULL                                                                                                 |    0.000 |    | 123456666 | abcdefghijklm | 192.168.5.8:12222  | abcdefghijklm | Sleep   |    0 |                | NULL                                                                                                 |    0.000 |`
    
  6. Verifique a coluna "Tempo" para qualquer tempo superior a 1800 segundos; isso indica que um processo está possivelmente demorando muito para ser concluído. Observe o status dos processos na coluna "Estado".

  7. Revise as consultas e possivelmente elimine-as se elas não forem executadas por esse período. É possível que as consultas de longa execução sejam esperadas.

Leitura relacionada

recommendation-more-help
8bd06ef0-b3d5-4137-b74e-d7b00485808a