Verifica delle query lente ed elabora MySQL

In questo articolo vengono descritti alcuni problemi comuni relativi a MySQL (query lente, processi che richiedono troppo tempo) che possono influire negativamente sul sito di un commerciante e sulle soluzioni indicate.

Controllo delle "query lente" MySQL

Descrizione

Se si è verificata un'interruzione potenzialmente causata da un database sovraccarico, questi passaggi consentono di controllare il registro delle query lente del database.

Analizzare le query utilizzando la riga di comando MySQL (Adobe Commerce Cloud/on-premise/Magento Open Source)

  1. Accedi alla riga di comando MySQL (Adobe Commerce on-premise/Magento Open Source) o sul server cloud dalla riga di comando (Adobe Commerce on cloud infrastructure).

  2. Esamina il registro delle query lente per le query di durata superiore a 50 secondi:

    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. Vai a https://www.unixtimestamp.com/ (o a un convertitore di marca temporale Unix simile) e inserisci la marca temporale di quando è stata eseguita la query lenta.

  4. Se il tempo è correlato a qualsiasi interruzione del sito verificatasi, la causa potrebbe essere un database sovraccarico. Verificare i carichi presenti nel database in quel momento. Esempi di tali carichi potrebbero essere:

  • Processi Cron
  • Traffico (bot o persone)
  • Importa/Esporta script
  • Creazione di immagini

Analizzare le query utilizzando Percona Toolkit (solo Adobe Commerce Pro: architettura cloud)

Se il progetto Adobe Commerce è distribuito su architettura Pro, puoi utilizzare Percona Toolkit per analizzare le query.

  1. Eseguire il comando pt-query-digest --type=slowlog nei registri query lente MySQL.

  2. In base ai problemi rilevati, puoi adottare le misure necessarie per correggere la query in modo che venga eseguita più rapidamente.

Controllo dell'"elenco processi" MySQL

Descrizione

In questo modo sarà possibile stabilire se il server MySQL è attivo e se non sono presenti query bloccate.

Passaggi

  1. Accedi alla riga di comando MySQL (Adobe Commerce on-premise/Magento Open Source) o sul server cloud dalla riga di comando (Adobe Commerce on cloud infrastructure).

  2. Accedere a MySQL utilizzando il blocco di codice riportato di seguito. In questo modo verrà automatizzato il processo di accesso.

    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 viene restituito un errore o la risposta richiede più di 30 secondi, contattare il supporto tecnico per controllare il server MySQL.

  4. Esaminare l'output di esempio.

  5. Ecco alcuni esempi di output:

    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. Controllare la colonna "Tempo" per verificare se il tempo è superiore a 1800 secondi; ciò indica che il completamento di un processo richiede potenzialmente troppo tempo. Osservare lo stato dei processi nella colonna "Stato".

  7. Rivedi le query e, se si riscontra che non dovrebbero essere eseguite per un periodo di tempo così lungo, potrebbero terminarle. È possibile che siano previste query con tempi di esecuzione lunghi.

Lettura correlata

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