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 un convertitore di marca temporale Unix simile) e inserire 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 (Adobe Commerce Pro: solo architettura cloud)

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

  1. Esegui il pt-query-digest --type=slowlog comando rispetto ai log delle query lente di 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