Best practice per risolvere i problemi di prestazioni del database

Questo articolo illustra come risolvere i problemi del database che influiscono negativamente sulle prestazioni del database in Adobe Commerce sui siti dell’infrastruttura cloud.

Versioni interessate

Adobe Commerce sull’infrastruttura cloud

Identificare e risolvere query con tempi di esecuzione lunghi

Determinare se l'esecuzione delle query MySQL è lenta. A seconda del piano Adobe Commerce per l’infrastruttura cloud e quindi della disponibilità degli strumenti, puoi effettuare le seguenti operazioni.

Analizzare le query del database con MySQL

È possibile utilizzare MySQL per identificare e risolvere query con tempi di esecuzione lunghi su qualsiasi progetto di infrastruttura cloud di Adobe Commerce.

  1. Eseguire l'istruzione SHOW \[FULL\] PROCESSLIST.
  2. Se vengono visualizzate query con tempi di esecuzione lunghi, eseguire MySQL EXPLAIN e EXPLAIN ANALYZE per ciascuna di esse, per individuare gli elementi che rendono la query eseguita per un periodo di tempo prolungato.
  3. In base ai problemi rilevati, procedi alla correzione della query in modo che venga eseguita più rapidamente.

Analizzare le query utilizzando Percona Toolkit (solo per l'architettura Pro)

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

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

    • Per trovare il percorso dei registri di query lente, consulta Log locations > Service Logs(https://devdocs.magento.com/cloud/project/log-locations.html#service-logs) nella documentazione per gli sviluppatori.
    • Consulta la documentazione di Percona Toolkit > pt-query-digest.
  2. In base ai problemi rilevati, procedi alla correzione della query in modo che venga eseguita più rapidamente.

Verifica che tutte le tabelle abbiano una chiave primaria

La definizione delle chiavi primarie è un requisito per una corretta progettazione del database e della tabella. Le chiavi primarie consentono di identificare in modo univoco una singola riga in qualsiasi tabella.

Se sono presenti tabelle senza una chiave primaria, il modulo di gestione di database predefinito per Adobe Commerce (InnoDB) utilizza come chiave primaria la prima chiave univoca non null. Se non è disponibile alcuna chiave univoca, InnoDB crea una chiave primaria nascosta (6 byte). Il problema relativo a una chiave primaria definita in modo implicito è che non è possibile controllarla. Inoltre, il valore implicito viene assegnato a livello globale per tutte le tabelle senza chiavi primarie. Questa configurazione può causare problemi di conflitto se si eseguono scritture simultanee su queste tabelle. Ciò potrebbe causare problemi di prestazioni perché le tabelle condividono anche l'incremento globale dell'indice della chiave primaria nascosta.

Per evitare questi problemi, definisci una chiave primaria per le tabelle che non ne hanno una.

Identificare e aggiornare le tabelle senza una chiave primaria

  1. Identificare le tabelle senza una chiave primaria utilizzando la seguente query SQL:

    code language-sql
    SELECT table_catalog, table_schema, table_name, engine FROM information_schema.tables        WHERE (table_catalog, table_schema, table_name) NOT IN (SELECT table_catalog, table_schema, table_name FROM information_schema.table_constraints  WHERE constraint_type = 'PRIMARY KEY') AND table_schema NOT IN ('information_schema', 'pg_catalog');
    
  2. Per qualsiasi tabella senza una chiave primaria, aggiungere una chiave primaria aggiornando db_schema.xml (schema dichiarativo) con un nodo simile al seguente:

    code language-html
    <constraint xsi:type="primary" referenceId="PRIMARY">         <column name="id_column"/>     </constraint>
    

    Quando aggiungi il nodo, sostituisci le variabili referenceID e column name con i valori personalizzati.

Per ulteriori informazioni, consulta Configurare lo schema dichiarativo nella documentazione per gli sviluppatori.

Identificare e rimuovere gli indici duplicati

Identifica eventuali indici duplicati nel database e rimuovili.

Verifica la presenza di indici duplicati

Per verificare la presenza di indici duplicati nell'architettura cloud Pro o Starter, eseguire la seguente query SQL.

SELECT s.INDEXED_COL,GROUP_CONCAT(INDEX_NAME) FROM (SELECT INDEX_NAME,GROUP_CONCAT(CONCAT(TABLE_NAME,'.',COLUMN_NAME) ORDER BY CONCAT(SEQ_IN_INDEX,COLUMN_NAME)) 'INDEXED_COL' FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_SCHEMA = 'db?' GROUP BY INDEX_NAME)as s GROUP BY INDEXED_COL HAVING COUNT(1)>1

La query restituisce i nomi delle colonne e i nomi di eventuali indici duplicati.

I commercianti dell'architettura Pro possono eseguire il controllo anche utilizzando il comando Percona Toolkit [pt-duplicate-key checker](https://www.percona.com/doc/percona-toolkit/LATEST/pt-duplicate-key-checker.html%C2%A0).

Rimuovere gli indici duplicati

Utilizzare l'istruzione SQL DROP INDEX per rimuovere gli indici duplicati.

DROP INDEX

Informazioni aggiuntive

Best practice per la configurazione del database per le distribuzioni cloud

recommendation-more-help
754cbbf3-3a3c-4af3-b6ce-9d34390f3a60