Änderungen an der Datenbank werden nicht in der Storefront übernommen
Dieser Artikel enthält Lösungen, mit denen Verzögerungen oder Unterbrechungen bei der Anwendung von Entitätenaktualisierungen vermieden werden können. Dazu gehört auch, wie verhindert werden kann, dass Änderungsprotokolltabellen übergroß werden, und wie MySQL Tabellen-Trigger eingerichtet werden.
Betroffene Produkte und Versionen:
- Adobe Commerce auf Cloud-Infrastruktur 2.2.x, 2.3.x
- Adobe Commerce On-Premises 2.2.x, 2.3.x
Problem
Änderungen, die Sie an der Datenbank vornehmen, werden nicht in die Storefront übernommen, oder es kommt zu einer erheblichen Verzögerung bei der Anwendung von Entitätenaktualisierungen. Zu den möglicherweise betroffenen Entitäten gehören Produkte, Kategorien, Preise, Inventar, Katalogregeln, Verkaufsregeln und Zielgruppenregeln.
Ursache
Wenn Ihre Indexer für eine Aktualisierung nach Zeitplan konfiguriert sind kann das Problem durch eine oder mehrere Tabellen mit zu großen Änderungsprotokollen oder nicht eingerichteten MySQL-Triggern verursacht werden.
Übergroße Änderungsprotokolltabellen
Die Änderungsprotokolltabellen werden so groß, wenn der indexer_update_all_views
Cron-Vorgang nicht mehrmals erfolgreich abgeschlossen wurde.
Änderungsprotokolltabellen sind die Datenbanktabellen, in denen die Änderungen an Entitäten verfolgt werden. Ein Datensatz wird in einer Änderungsprotokolltabelle gespeichert, solange die Änderung nicht angewendet wird. Dies wird vom indexer_update_all_views
Cron-Auftrag ausgeführt. Eine Adobe Commerce-Datenbank enthält mehrere Änderungsprotokolltabellen. Sie werden nach dem folgenden Muster benannt: INDEXER_TABLE_NAME + '_cl', z. B. catalog_category_product_cl
, catalog_product_category_cl
. Weitere Informationen zum Tracking von Änderungen in der Datenbank finden Sie im Artikel Indizierungsübersicht > Mview in unserer Entwicklerdokumentation.
MySQL Datenbank-Trigger nicht eingerichtet
Es besteht der Verdacht, dass keine Datenbank-Trigger eingerichtet werden, wenn nach dem Hinzufügen oder Ändern einer Entität (Produkt, Kategorie, Zielregel usw.) keine Datensätze zur entsprechenden Änderungsprotokolltabelle hinzugefügt werden.
Lösung
Vermeidung von Übergrößen von Änderungsprotokolltabellen
Stellen Sie sicher, dass der indexer_update_all_views
Cron-Auftrag immer erfolgreich abgeschlossen wird.
Sie können die folgende SQL-Abfrage verwenden, um alle fehlgeschlagenen Instanzen des indexer_update_all_views
Cron-Auftrags abzurufen:
select * from cron_schedule where job_code = "indexer_update_all_views" and status
<> "success" and status <> "pending";
Alternativ können Sie den Status in den Protokollen überprüfen, indem Sie nach den indexer_update_all_views
Einträgen suchen:
<install_directory>/var/log/cron.log
- für Versionen 2.3.1+ und 2.2.8+<install_directory>/var/log/system.log
- für frühere Versionen
Trigger MySQL Tabelle zurücksetzen
Um die fehlenden MySQL-Trigger einzurichten, müssen Sie den Indexermodus neu einstellen:
- Wechseln Sie zu „Beim Speichern“.
- Zurück zu „Planmäßig“ wechseln.
Verwenden Sie den folgenden Befehl, um diesen Vorgang auszuführen.
php bin/magento indexer:set-mode {realtime|schedule} [indexerName]
Verwandtes Lesen
- MySQL Tabellen sind zu groß in unserer Support-Wissensdatenbank
- Indizierung: Mview in unserer Entwicklerdokumentation
- Best Practices zum Ändern von Datenbanktabellen im Commerce-Implementierungs-Playbook