Ä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

WARNING
Es wird dringend empfohlen, ein Datenbank-Backup zu erstellen, bevor Sie Manipulationen durchführen, und diese in Zeiten hoher Site-Auslastung zu vermeiden.

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:

  1. Wechseln Sie zu „Beim Speichern“.
  2. Zurück zu „Planmäßig“ wechseln.

Verwenden Sie den folgenden Befehl, um diesen Vorgang auszuführen.

WARNING
Bevor Sie den Indexermodus wechseln, empfehlen wir, Ihre Website in den 🔗-Modus zu versetzen und Cron-Aufträge zu deaktivieren um Datenbanksperren zu vermeiden.
php bin/magento indexer:set-mode {realtime|schedule} [indexerName]
INFO
Die Indexer-bezogenen Datenbank-Trigger werden hinzugefügt, wenn der Indexermodus auf „Zeitplan“ festgelegt ist, und entfernt, wenn der Indexermodus auf „Echtzeit“ festgelegt ist. Wenn die Trigger in Ihrer Datenbank fehlen, während die Indexer auf Zeitplan eingestellt sind, ändern Sie die Indexer in Echtzeit und ändern Sie sie dann wieder zurück in Zeitplan. Dadurch werden die Trigger zurückgesetzt.

Verwandtes Lesen

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