แก้ไขตาราง SQL ขนาดใหญ่: wp_actionscheduler_actions & wp_actionscheduler_logs [เคล็ดลับ WooCommerce]

WooCommerce ได้กลายเป็นโมดูลที่ใช้กันอย่างแพร่หลาย ร้านค้าออนไลน์. SEO, ผลิตภัณฑ์, การจัดการสินค้าคงคลัง, โค้ดที่สะอาดและใช้งานง่าย, อินเทอร์เฟซการดูแลระบบที่เรียบง่ายและปลั๊กอินนับพันที่พัฒนาขึ้นสำหรับ Woo เป็นเพียงข้อโต้แย้งบางส่วนที่ควรค่าแก่โอกาสเมื่อคุณคิดจะพัฒนาร้านค้าออนไลน์

เช่นเดียวกับ CMS ใด ๆ Woo ไม่มีข้อยกเว้นสำหรับความแปลกประหลาดที่อาจเกิดขึ้นในสถานการณ์การใช้งานที่แตกต่างกันหรือการโต้ตอบกับปลั๊กอิน WordPress อื่น ๆ
บนเซิร์ฟเวอร์ทรัพยากร ฮาร์ดแวร์ ค่อนข้างใจกว้างฉันสังเกตเห็นว่า บริการฐานข้อมูล (mysqld) เริ่มต้องการ RAM เกือบ 80-90% ปัญหาค่อนข้างร้ายแรงเพราะฉันไม่เข้าใจว่าข้อผิดพลาด 110 มาจากไหนเป็นระยะ (110: หมดเวลาการเชื่อมต่อ).
จากการตรวจสอบกระบวนการ SQL อย่างใกล้ชิดฉันพบว่าฐานข้อมูลมีสองตารางที่มีปริมาณค่อนข้างมาก: wp_actionscheduler_actions si wp_actionscheduler_logs.

ปกติ การดำเนินการตามกำหนดเวลา ของ WooCommerce Action Scheduler ควรลบโดยอัตโนมัติหลังจากดำเนินการแล้ว สิ่งนี้ไม่ได้เกิดขึ้นเสมอไปและติดอยู่ใน wp_actionsscheduler_actions พร้อมกับสถานะ: ล้มเหลว, ยกเลิก, คาราคาซัง หรือ สมบูรณ์.

ในภาพด้านบนตาราง "wp_actionsscheduler"พวกเขามีเพียง เพียง 15 ลบ. ฉันขอโทษฉันไม่ได้รับแรงบันดาลใจให้จับภาพหน้าจอเมื่อพวกเขามี 1.2 GB. ถึงกระนั้น 15 MB ก็เพียงพอสำหรับตารางที่มีการดำเนินการตามโปรแกรมของ WooCommerce
ตาราง "บวม" เหล่านี้เป็นผลมาจากสิ่งนั้น WP-Cron ไม่ลบรายการ ผู้มีสถานะ "ล้มเหลว","ยกเลิก"และ"สมบูรณ์“. โดยปกติรายการเหล่านี้ควรถูกลบออกจากฐานข้อมูลโดยอัตโนมัติ
การดำเนินการตามกำหนดเวลาและสถานะของพวกเขาสามารถเห็นได้ง่ายและใน WooCommerce →  สถานะ →  การกระทำที่กำหนดเวลา.

วิธีทำความสะอาดรางน้ำ "ล้มเหลว","ยกเลิก"และ"สมบูรณ์"ใน wp_actionscheduler_actions si wp_actionscheduler_logs

เราเข้าถึงฐานข้อมูลผ่าน phpMyAdmin จากนั้นที่ SQL เราดำเนินการบรรทัดคำสั่งในทางกลับกัน:

DELETE FROM `wp_actionscheduler_actions` WHERE `status` = 'canceled'
DELETE FROM `wp_actionscheduler_actions` WHERE `status` = 'complete'
DELETE FROM `wp_actionscheduler_actions` WHERE `status` = 'failed'

เมื่อทำความสะอาดโต๊ะแล้วก็ไม่ได้หมายความว่าปัญหาจะได้รับการแก้ไข ดังที่ฉันได้กล่าวไว้ข้างต้นสาเหตุหลักคือการปิดใช้งานบริการ WP-Cron ด้วยสาเหตุหลายประการ ดังนั้นจึงไม่สามารถลบรายการที่มีสถานะ "ซอมบี้" ได้อีกต่อไป
เป็นสิ่งสำคัญมากที่จะต้องรู้ว่าหากคุณมีร้านค้าออนไลน์บน WooCommerce และมีการเชื่อมต่อกับ Facebook Shops ผ่านปลั๊กอิน "Facebook สำหรับ WooCommerce"มันจะซิงค์ผลิตภัณฑ์ WooCommerce กับบัญชีร้านค้า Facebook ของคุณโดยอัตโนมัติ และเขาทำในเวลาประมาณ 15 นาที หากรายการ SQL เหล่านี้ไม่ได้รับการควบคุมคุณจะได้รับหลายแสนบรรทัด "wc_facebook_regenerate_feed"ใน"wp_actionscheduler_actions"

ช่วงเวลานี้ใช้ได้สำหรับร้านค้าที่มีคำสั่งซื้อจำนวนมากและต้องมีการอัปเดตสต็อกสินค้าของ Facebook Shops อยู่ตลอดเวลา หากคุณยังคิดว่าการซิงค์เหล่านี้ระหว่าง Facebook และร้านค้าของคุณสามารถทำได้ทุกๆ 24 ชั่วโมงบรรทัดโค้ดด้านล่างนี้สามารถช่วยได้

เปิดไฟล์ฟังก์ชั่น / php ของธีม WordPress / WooCommerce ที่ร้านค้าของคุณกำลังทำงานอยู่และเพิ่ม:

add_filter( 'wc_facebook_feed_generation_interval', function(){ return HOUR_IN_SECONDS * 24; } );

ด้านล่างนี้เราสามารถกำหนดช่วงเวลาหนึ่งสัปดาห์สำหรับการทำความสะอาดอัตโนมัติ:

add_filter( 'action_scheduler_retention_period', 'wpb_action_scheduler_purge' );
function wpb_action_scheduler_purge() {
 return WEEK_IN_SECONDS;
}

เมื่อคุณบันทึกการเปลี่ยนแปลงเหล่านี้คุณจะไม่มีปัญหากับตารางขนาดใหญ่สำหรับ "wp_actionscheduler_actions"

แก้ไขตาราง SQL ขนาดใหญ่: wp_actionscheduler_actions & wp_actionscheduler_logs [เคล็ดลับ WooCommerce]

เกี่ยวกับผู้เขียน

ชิงทรัพย์

หลงใหลในอุปกรณ์และไอทีทุกอย่างฉันเขียนด้วยความสุขในการลักลอบsettings.com ตั้งแต่ปี 2006 และฉันต้องการค้นพบสิ่งใหม่ ๆ เกี่ยวกับคอมพิวเตอร์และระบบปฏิบัติการร่วมกับคุณ macระบบปฏิบัติการลินุกซ์ Windows, iOS และ Android

แสดงความคิดเห็น