Le modifiche nel database non si riflettono nella vetrina

Questo articolo fornisce soluzioni per evitare ritardi o interruzioni nell’applicazione degli aggiornamenti delle entità. Ciò include come evitare che le tabelle di registro delle modifiche vengano sovradimensionate e come impostare i trigger di tabella MySQL.

Prodotti e versioni interessati:

  • Adobe Commerce sull’infrastruttura cloud 2.2.x, 2.3.x
  • Adobe Commerce on-premise 2.2.x, 2.3.x

Problema

Le modifiche apportate nel database non vengono applicate nella vetrina, oppure si verifica un ritardo significativo nell’applicazione degli aggiornamenti delle entità. Le entità che potrebbero essere interessate includono prodotti, categorie, prezzi, scorte, regole di catalogo, regole di vendita e regole target.

Causa

Se gli indicizzatori sono configurati per l'aggiornamento in base alla pianificazione, il problema potrebbe essere causato da una o più tabelle con log delle modifiche troppo grandi o da trigger MySQL non configurati.

Tabelle di log delle modifiche sovradimensionate

Le dimensioni delle tabelle del registro delle modifiche aumentano se il processo cron indexer_update_all_views non viene completato più volte.

Le tabelle di log delle modifiche sono le tabelle di database in cui vengono tracciate le modifiche apportate alle entità. Un record viene archiviato in una tabella del registro delle modifiche finché la modifica non viene applicata, operazione eseguita dal processo cron indexer_update_all_views. In un database Adobe Commerce sono presenti più tabelle di log delle modifiche denominate in base al seguente pattern: INDEXER_TABLE_NAME + ‘_cl’, ad esempio catalog_category_product_cl, catalog_product_category_cl. Per ulteriori dettagli sul tracciamento delle modifiche nel database, consulta l'articolo Panoramica sull'indicizzazione > Mview nella documentazione per gli sviluppatori.

I trigger del database MySQL non sono configurati

Si può sospettare che i trigger del database non siano configurati, se dopo l'aggiunta o la modifica di un'entità (prodotto, categoria, regola di destinazione e così via) - non vengono aggiunti record alla tabella del log delle modifiche corrispondente.

Soluzione

WARNING
Si consiglia vivamente di creare un backup del database prima di eseguire eventuali manipolazioni, evitando di eseguirle durante periodi di caricamento elevati del sito.

Evitare che le tabelle del registro delle modifiche vengano sovradimensionate

Verificare che il processo cron indexer_update_all_views sia sempre completato correttamente.

È possibile utilizzare la query SQL seguente per ottenere tutte le istanze non riuscite del processo cron indexer_update_all_views:

select * from cron_schedule where job_code = "indexer_update_all_views" and status
  <> "success" and status <> "pending";

Oppure puoi controllarne lo stato nei registri cercando le indexer_update_all_views voci:

  • <install_directory>/var/log/cron.log - per le versioni 2.3.1+ e 2.2.8+
  • <install_directory>/var/log/system.log - per versioni precedenti

Reimposta trigger tabella MySQL

Per impostare i trigger della tabella MySQL mancanti, è necessario reimpostare la modalità di indicizzazione:

  1. Passa a "Al salvataggio".
  2. Torna a "In programma".

Utilizzare il comando seguente per eseguire questa operazione.

WARNING
Prima di cambiare modalità di indicizzazione, è consigliabile attivare la modalità manutenzione del sito Web e disabilitare i processi cron per evitare blocchi del database.
php bin/magento indexer:set-mode {realtime|schedule} [indexerName]
INFO
I trigger del database relativi agli indicizzatori vengono aggiunti quando la modalità di indicizzazione è impostata su Pianifica e rimossi quando la modalità di indicizzazione è impostata su In tempo reale. Se i trigger non sono presenti nel database mentre gli indicizzatori sono impostati per la pianificazione, modificare gli indicizzatori in tempo reale e quindi riportarli alla pianificazione. In questo modo vengono ripristinati i trigger.

Lettura correlata

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