Woocommerce det har blivit en mycket använd modul av fler och fler tidskrift online. SEO, produkt- och lagerhantering, ren och intuitiv kod, enkelt administrationsgränssnitt och de tusentals plugins som utvecklats för Woo, är bara några av anledningarna till att det förtjänar en chans när du tänker på att utveckla en onlinebutik.
Som alla CMS är Woo inte undantagen från konstigheterna som kan dyka upp i olika scenarier för användning eller interaktion med andra WordPress-plugins.
På en server med resurser hårdvara ganska generöst, det märkte jag databastjänst (mysqld) börjar begära nästan 80– 90 % av RAM-minnet. Ett ganska allvarligt problem, eftersom jag helt enkelt inte förstod var felet 110 kommer ifrån periodvis (110: Anslutningen tog timeout).
Vid närmare granskning av SQL-processerna upptäckte jag att en databas har två tabeller med ganska stora volymer: wp_actionscheduler_actions och wp_actionscheduler_logs.
I mod normal schemalagda åtgärder men WooCommerce Action Scheduler de bör raderas automatiskt efter att de har körts. Detta händer inte alltid, och de förblir blockerade i wp_actionsscheduler_actions med statusen: misslyckades, avbruten, i avvaktan på eller komplett.
I bilden ovan, tabellerna “wp_actionsscheduler” de har bara lite över 15 MB. Jag är ledsen att jag inte blev inspirerad att ta en skärmdump när de gjorde det1,2 GB. Trots det är 15 MB ganska mycket för en tabell som innehåller schemalagda WooCommerce-åtgärder.
Dessa tabeller “UPPBLÅST” det härrör från ca WP-Cron tar inte bort poster vård eller status “misslyckades“, “avbruten” och “komplett“. In mod normal aceste intrari trebuie sa fie sterse automat din baza de date.
Actiunile programate si starea lor putem sa o vedem foarte usor si in Woocommerce →Status →Scheduled Actions.
Cum curatam inrarile “misslyckades“, “avbruten” och “komplett” FRÅNwp_actionscheduler_actions och wp_actionscheduler_logs
Accesam baza de date prin phpMyAdmin, apoi la SQL executam pe rand liniile de comanda:
DELETE FROM `wp_actionscheduler_actions` WHERE `status` = 'canceled'
DELETE FROM `wp_actionscheduler_actions` WHERE `status` = 'complete'
DELETE FROM `wp_actionscheduler_actions` WHERE `status` = 'failed'
Odata curatat acest tabel, nu inseamna si ca problema este rezolvata. Asa cum am spus mai sus, principala cauza este dezactivarea din diverse motive a serviciului WP-Cron. Astfel intrarile cu statusuri “zombie” nu mai pot fi sterse.
Det är mycket viktigt att veta att om du har en webbutik på WooCommerce, och den är ansluten till Facebook Shops via plugin “Facebook för WooCommerce“, den synkroniserar automatiskt WooCommerce-produkter med ditt Facebook Shops-konto. Och han gör det var 15:e minut. Om dessa SQL-poster inte kontrolleras kan du få flera hundratusentals rader “wc_facebook_regenerate_feed” i “wp_actionscheduler_actions“.
Detta intervall är ok för butiker som har ett stort antal beställningar och det är nödvändigt att lagret av produkter i Facebook Shops uppdateras ständigt. Om du fortfarande tror att dessa synkroniseringar mellan Facebook och din butik kan göras en gång var 24:e timme, kan kodraden nedan hjälpa dig.
Öppna functions.php-filen för WordPress / WooCommerce-temat som din butik körs på och lägg till:
add_filter( 'wc_facebook_feed_generation_interval', function(){ return HOUR_IN_SECONDS * 24; } );
Därefter kan vi ställa in ett intervall på en vecka för automatisk rengöring:
add_filter( 'action_scheduler_retention_period', 'wpb_action_scheduler_purge' );
function wpb_action_scheduler_purge() {
return WEEK_IN_SECONDS;
}
När dessa ändringar har sparats kommer du inte längre att ha problem med gigantiska tabeller för “wp_actionscheduler_actions”.



@Stealth
Tack för hjälpen. Du räddar min dag och handlar. Jag upptäckte detta först efter en krasch av min webshop. Många plugins har börjat dumpa sin produktion i den tabellen och den fylls upp… Wooping bord på 9,2 GB fick min värd att ge upp sin annars fina mottid. Nu trimmar jag med den fina koden!
Bara en fråga om fallrep detta bord “wpb_action_scheduler_purge” är det en standard i db eller måste jag byta namn på det till något i min (som standard heter min db inte 'wp_’ ) eller är det kanske en funktion?
Tack för hjälpen och den superfina artikeln
Hälsning
Netzie