Ä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.
MySQL databasutlösare 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
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
Återställer MySQL tabellutlösare
Om du vill ställa in de saknade MySQL tabellutlösarna måste du ställa in indexeringsläget igen:
- Växla till Vid sparande.
- Växla tillbaka till Vid schema.
Använd följande kommando för att utföra den här åtgärden.
php bin/magento indexer:set-mode {realtime|schedule} [indexerName]
Relaterad läsning
- MySQL tabeller är för stora i vår kunskapsbas för support
- Indexering: Mview i utvecklardokumentationen
- Metodtips för att ändra databastabeller i Commerce Implementeringspellbook