Ändringar i databasen återspeglas inte i butiken

Den här artikeln innehåller lösningar för att undvika fördröjningar eller avbrott i enhetsuppdateringar. Detta inkluderar hur du undviker att ändra loggtabeller från att bli för stora och hur du konfigurerar MySQL-tabellutlösare.

Berörda produkter och versioner:

  • Adobe Commerce om molninfrastruktur 2.2.x, 2.3.x
  • Adobe Commerce lokal 2.2.x, 2.3.x

Problem

Ändringar som du gör i databasen visas inte i butiken, eller så är det en avsevärd fördröjning i tillämpningen av entitetsuppdateringar. De enheter som kan påverkas är produkter, kategorier, priser, lager, katalogregler, försäljningsregler och målregler.

Orsak

Om indexerarna är konfigurerade att uppdateras av schema kan problemet bero på en eller flera tabeller där ändringsloggarna är för stora eller att MySQL-utlösare inte har konfigurerats.

Stora ändringsloggtabeller

Registren för ändringsloggar blir så stora om cron-jobbet indexer_update_all_views inte slutförs flera gånger.

Ändringsloggtabeller är de databastabeller där ändringar av enheter spåras. En post lagras i en ändringsloggtabell så länge ändringen inte tillämpas, vilket utförs av kron-jobbet indexer_update_all_views. Det finns flera ändringsloggtabeller i en Adobe Commerce-databas, de namnges enligt följande mönster: INDEXER_TABLE_NAME + ‘_cl’, till exempel catalog_category_product_cl, catalog_product_category_cl. Mer information om hur ändringar spåras i databasen finns i artikeln Indexeringsöversikt > Mview i utvecklardokumentationen.

Utlösare för MySQL-databas har inte konfigurerats

Du misstänker att databasutlösare inte konfigureras om inga poster läggs till i motsvarande ändringsloggtabell efter att en entitet (produkt, kategori, målregel och så vidare) har lagts till eller ändrats.

Lösning

WARNING
Vi rekommenderar starkt att du skapar en säkerhetskopia av databasen innan du utför några ändringar och undviker dem under stora belastningsperioder.

Undvik att ändra loggtabeller som är stora

Kontrollera att seriejobbet indexer_update_all_views alltid har slutförts.

Du kan använda följande SQL-fråga för att hämta alla misslyckade instanser av cron-jobbet indexer_update_all_views:

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

Du kan också kontrollera dess status i loggarna genom att söka efter indexer_update_all_views-posterna:

  • <install_directory>/var/log/cron.log - för version 2.3.1+ och 2.2.8+
  • <install_directory>/var/log/system.log - för tidigare versioner

Ange MySQL-tabellutlösare igen

Om du vill ställa in de saknade MySQL-tabellutlösarna måste du ställa in indexeringsläget igen:

  1. Växla till Vid sparande.
  2. Växla tillbaka till Vid schema.

Använd följande kommando för att utföra den här åtgärden.

WARNING
Innan du byter indexeringsläge rekommenderar vi att du sätter din webbplats i underhållsläge och inaktiverar cron-jobb för att undvika databaslås.
php bin/magento indexer:set-mode {realtime|schedule} [indexerName]
INFO
De indexerarrelaterade databasutlösarna läggs till när indexeringsläget är inställt på att schemalägga och tas bort när indexeringsläget är inställt på realtid. Om utlösarna saknas i databasen när indexerarna är inställda på att schemalägga, ändrar du indexerarna till realtid och ändrar dem sedan tillbaka till schemat. Detta återställer utlösarna.

Relaterad läsning

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