WordPress
WordPress Revisions คืออะไรและทำไมต้องจัดการ
WordPress Revisions คือระบบที่ WordPress ใช้บันทึกประวัติการแก้ไขบทความและหน้าเพจทุกครั้งที่คุณกดบันทึก (Save) หรือเผยแพร่ (Publish) ทุกครั้งที่คุณแก้ไขเนื้อหา WordPress จะสร้างสำเนาใหม่ของบทความนั้นเก็บไว้ใน Database โดยอัตโนมัติ ทำให้คุณสามารถย้อนกลับไปดูหรือกู้คืนเนื้อหาเวอร์ชันเก่าได้หากเกิดข้อผิดพลาด
ปัญหาที่เกิดขึ้นคือ WordPress ไม่มีการจำกัดจำนวน Revision โดย Default ทำให้ Database ขยายตัวอย่างรวดเร็ว ยิ่งเว็บไซต์มีบทความมากและแก้ไขบ่อย ตาราง wp_posts ใน Database จะมีแถวข้อมูล Revision สะสมนับพัน นับหมื่นแถว ส่งผลให้ Database มีขนาดใหญ่โดยไม่จำเป็น
ผลกระทบที่เห็นได้ชัดคือความเร็วของเว็บไซต์ลดลง เพราะ Query ที่ WordPress ใช้ดึงข้อมูลต้องสแกนตารางขนาดใหญ่ขึ้น นอกจากนี้ยังกินพื้นที่ Disk Quota ของ Hosting Plan ทำให้อาจต้องอัพเกรดแผนเร็วกว่าที่ควร
- บทความ 1 บทความที่แก้ไข 50 ครั้ง = 50 แถว Revision ใน Database
- เว็บที่มี 200 บทความ แก้ไขเฉลี่ย 30 ครั้ง = 6,000 แถว Revision
- แต่ละ Revision เก็บข้อมูลเต็มของบทความ ไม่ใช่แค่ส่วนที่เปลี่ยน
- Revision ของบทความยาว ๆ อาจมีขนาดหลาย KB ต่อแถว
- ระบบ Autosave ยังสร้าง Draft Revision ทุก 60 วินาที เพิ่มปริมาณข้อมูลอีก
ดู Database Size ผ่าน phpMyAdmin
ก่อนจะลบ Revision ควรตรวจสอบขนาด Database ปัจจุบันก่อน เพื่อให้รู้ว่า Revision ครอบครองพื้นที่มากแค่ไหน และใช้เปรียบเทียบหลังจากทำการลบเสร็จแล้ว วิธีดู Database Size ผ่าน phpMyAdmin ทำได้ง่ายมาก
ให้เข้า cPanel ของ Hosting แล้วคลิก phpMyAdmin ในหมวด Databases เมื่อเข้ามาในหน้า phpMyAdmin ให้คลิกชื่อ Database ของ WordPress ในแถบซ้ายมือ จากนั้นดูที่แถบข้อมูลด้านล่างของหน้า จะเห็นขนาดรวมของ Database แสดงเป็น MB
สามารถดูขนาดเฉพาะตาราง wp_posts ซึ่งเป็นตารางที่เก็บทั้งบทความและ Revision ได้โดยคลิกที่ตาราง wp_posts แล้วดูที่ข้อมูล Table information จะเห็นจำนวนแถวและขนาดตาราง หากตาราง wp_posts มีขนาดใหญ่กว่าตารางอื่น ๆ มาก แสดงว่ามี Revision สะสมมากเกินไป
- เข้า cPanel → phpMyAdmin → เลือก Database WordPress
- คลิกแท็บ "Structure" เพื่อดูรายการตารางและขนาดแต่ละตาราง
- สังเกตขนาด wp_posts เปรียบเทียบกับตารางอื่น
- รัน Query:
SELECT COUNT(*) FROM wp_posts WHERE post_type = 'revision';เพื่อดูจำนวน - บันทึกขนาด Database ก่อนลบ Revision เพื่อเปรียบเทียบผลลัพธ์
จำกัดจำนวน Revision ใน wp-config.php
วิธีที่ดีที่สุดในการป้องกัน Revision สะสมในอนาคตคือการตั้งค่าจำกัดจำนวนผ่านไฟล์ wp-config.php ซึ่งเป็นไฟล์การตั้งค่าหลักของ WordPress คุณสามารถกำหนดได้ว่าต้องการเก็บ Revision ไว้กี่เวอร์ชันต่อบทความ หรือจะปิด Revision ทั้งหมดเลยก็ได้
เปิดไฟล์ wp-config.php ผ่าน File Manager ใน cPanel หรือผ่าน FTP โดยไฟล์นี้อยู่ที่ Root Directory ของ WordPress เช่น /public_html/wp-config.php จากนั้นเพิ่มโค้ดด้านล่างก่อนบรรทัด /* That's all, stop editing! Happy publishing. */
// จำกัด Revision ไว้ 5 เวอร์ชันต่อบทความ
define('WP_POST_REVISIONS', 5);
// หรือปิด Revision ทั้งหมด (ไม่แนะนำสำหรับผู้เริ่มต้น)
define('WP_POST_REVISIONS', false);
// ตั้งค่า Autosave ทุก 120 วินาที (default คือ 60 วินาที)
define('AUTOSAVE_INTERVAL', 120);
ค่า WP_POST_REVISIONS ที่แนะนำสำหรับเว็บทั่วไปคือ 5-10 เวอร์ชัน ซึ่งเพียงพอสำหรับการย้อนกลับในกรณีฉุกเฉิน แต่ไม่มากจนทำให้ Database พองโต การตั้งค่า false เพื่อปิด Revision ทั้งหมดนั้นประหยัดพื้นที่ได้มากที่สุด แต่จะทำให้ไม่สามารถย้อนกลับบทความได้เลย จึงไม่แนะนำสำหรับมือใหม่
define('WP_POST_REVISIONS', 3);— เก็บแค่ 3 เวอร์ชันล่าสุด (ประหยัดพื้นที่)define('WP_POST_REVISIONS', 5);— เก็บ 5 เวอร์ชัน (แนะนำสำหรับทั่วไป)define('WP_POST_REVISIONS', 10);— เก็บ 10 เวอร์ชัน (เหมาะกับบทความสำคัญ)define('WP_POST_REVISIONS', false);— ปิด Revision (ประหยัดที่สุด ไม่มีประวัติย้อนกลับ)define('AUTOSAVE_INTERVAL', 120);— Autosave ทุก 2 นาที แทน 1 นาที
ลบ Revision เก่าด้วย Plugin WP-Sweep
สำหรับผู้ที่ไม่ถนัดการรัน SQL Query โดยตรง Plugin WP-Sweep คือตัวเลือกที่ดีที่สุด เป็น Plugin ฟรีที่ออกแบบมาเพื่อทำความสะอาด Database โดยเฉพาะ รองรับการลบ Revision, Draft เก่า, Auto Draft, Trash, Spam Comments, Transients และ Orphan Data ต่าง ๆ ได้ในคลิกเดียว
วิธีติดตั้งและใช้งาน WP-Sweep ทำได้ง่ายมาก เข้า WordPress Dashboard → Plugins → Add New → ค้นหา "WP-Sweep" → Install Now → Activate เมื่อ Activate แล้ว ไปที่เมนู Tools → Sweep ในแถบด้านซ้าย จะเห็นรายการข้อมูลที่สามารถลบได้พร้อมจำนวนแต่ละประเภท
ในส่วนของ Revisions จะแสดงจำนวน Revision ทั้งหมดใน Database คลิกปุ่ม "Sweep" ข้าง Revisions เพื่อลบทั้งหมด หรือคลิก "Sweep All" เพื่อลบข้อมูลขยะทั้งหมดในครั้งเดียว Plugin จะดำเนินการลบและแสดงผลลัพธ์ว่าลบข้อมูลไปเท่าไร
- ไปที่ Plugins → Add New → ค้นหา "WP-Sweep"
- ติดตั้งและ Activate Plugin
- ไปที่ Tools → Sweep
- ดูจำนวน Revisions ที่แสดงในหน้า Sweep
- คลิก "Sweep" ข้าง Revisions หรือ "Sweep All" เพื่อลบทั้งหมด
- รอให้ Plugin ทำงานเสร็จ (อาจใช้เวลาสักครู่หาก Revision มีจำนวนมาก)
- กลับมาตรวจสอบขนาด Database หลังลบเสร็จ
ลบ Revision ด้วย SQL Query ผ่าน phpMyAdmin
สำหรับผู้ที่ต้องการควบคุมได้มากกว่าหรืออยากลบโดยไม่ต้องติดตั้ง Plugin เพิ่ม สามารถใช้ SQL Query ผ่าน phpMyAdmin ได้โดยตรง วิธีนี้รวดเร็วและมีประสิทธิภาพสูง แต่ต้องระวังเพราะหากพิมพ์ Query ผิด อาจลบข้อมูลผิดตารางได้ ดังนั้นต้อง Backup Database ก่อนเสมอ
เข้า phpMyAdmin → เลือก Database ของ WordPress → คลิกแท็บ "SQL" ที่ด้านบน จะเปิดกล่องข้อความสำหรับพิมพ์ SQL Query จากนั้นพิมพ์ Query ด้านล่างแล้วคลิกปุ่ม "Go" เพื่อรัน โปรดตรวจสอบ Prefix ของตาราง Database ก่อน เนื่องจากบางเว็บอาจไม่ได้ใช้ wp_ เป็น Prefix มาตรฐาน
-- ลบ Revision ทั้งหมด (ทำ Backup Database ก่อนเสมอ!)
DELETE FROM wp_posts WHERE post_type = 'revision';
-- ลบข้อมูล Meta ที่ไม่มี Post อ้างอิงแล้ว
DELETE FROM wp_postmeta WHERE post_id NOT IN (SELECT id FROM wp_posts);
-- Optimize ตาราง wp_posts หลังจากลบเสร็จ
OPTIMIZE TABLE wp_posts;
-- Optimize ตาราง wp_postmeta ด้วย
OPTIMIZE TABLE wp_postmeta;
หลังจากลบ Revision เสร็จแล้ว ควรรัน OPTIMIZE TABLE wp_posts; เพื่อ Defragment ตารางและคืนพื้นที่ที่ว่างกลับมา เพราะการลบข้อมูลใน MySQL ไม่ได้ลดขนาดไฟล์ Database ทันที ต้องรัน OPTIMIZE จึงจะเห็นพื้นที่ลดลงจริง
- Backup Database ก่อนรัน Query ทุกครั้ง (สำคัญที่สุด!)
- ตรวจสอบ Table Prefix ของ Database ก่อน (default คือ wp_)
- รัน DELETE แล้วตามด้วย OPTIMIZE TABLE ทันที
- ตรวจสอบเว็บไซต์หลังรัน Query เพื่อให้แน่ใจว่าทุกอย่างปกติ
ตั้งค่า Auto-Save Interval ให้เหมาะสม
นอกจาก Revision ปกติ WordPress ยังมีระบบ Autosave ที่บันทึก Draft ของบทความที่กำลังเขียนทุก 60 วินาทีโดยอัตโนมัติ ทำให้เกิด Auto Draft หลาย ๆ อัน ซึ่งสะสมใน Database เช่นกัน แม้ว่า Auto Draft จะถูกเขียนทับด้วยอันใหม่ทุกครั้ง แต่ก็ยังกินทรัพยากรในการเขียนและอ่านข้อมูลบ่อยครั้ง
การเพิ่ม Autosave Interval จาก 60 วินาที เป็น 120-180 วินาที จะช่วยลดการเขียน Database ลงครึ่งหนึ่งถึงสองในสาม โดยไม่กระทบประสบการณ์การเขียนบทความมากนัก เพราะยังคง Autosave อยู่เพียงแต่ห่างขึ้นเล็กน้อย สำหรับผู้ที่เขียนบทความบนการเชื่อมต่ออินเทอร์เน็ตที่เสถียร ค่า 120 วินาทีเหมาะสมมาก
สามารถตั้งค่า Autosave Interval ใน wp-config.php ได้ดังนี้ การตั้งค่านี้จะมีผลทันทีหลังบันทึกไฟล์ ไม่จำเป็นต้อง Restart WordPress หรือล้าง Cache ใด ๆ
// ใน wp-config.php — ตั้งค่า Autosave ทุก 2 นาที
define('AUTOSAVE_INTERVAL', 120);
// ตั้ง Autosave ทุก 3 นาที สำหรับเว็บที่มีผู้เขียนหลายคน
define('AUTOSAVE_INTERVAL', 180);
- เปิด wp-config.php ผ่าน File Manager ใน cPanel หรือ FTP
- เพิ่ม
define('AUTOSAVE_INTERVAL', 120);ก่อนบรรทัด "stop editing" - บันทึกไฟล์และทดสอบโดยเปิดบทความแล้วดูว่า Autosave ทำงานปกติ
- ค่า 120-180 วินาทีเหมาะสำหรับส่วนใหญ่
- ไม่ควรตั้งเกิน 300 วินาที เพราะหากเกิดปัญหาจะสูญเสียงานหลายนาที
ตรวจสอบ Database Size หลังลบ Revision
หลังจากลบ Revision และ Optimize Table เสร็จแล้ว ควรตรวจสอบผลลัพธ์เพื่อยืนยันว่า Database Size ลดลงจริง โดยเปรียบเทียบกับขนาดที่บันทึกไว้ก่อนทำการลบ วิธีตรวจสอบที่ง่ายที่สุดคือผ่าน phpMyAdmin ซึ่งแสดงข้อมูลขนาดตารางแบบ Real-time
-- 1. ตรวจสอบจำนวน Revision ที่เหลืออยู่ (ควรเป็น 0 หลังลบทั้งหมด)
SELECT COUNT(*) AS revision_count
FROM wp_posts WHERE post_type = 'revision';
-- 2. ดูขนาด Database รวมทั้งหมดหลัง Optimize
SELECT
ROUND(SUM(data_length + index_length)/1024/1024, 2) AS 'Total DB Size (MB)'
FROM information_schema.tables
WHERE table_schema = DATABASE();
-- 3. ดูขนาดตาราง wp_posts โดยเฉพาะ
SELECT table_name,
ROUND(data_length/1024/1024, 2) AS 'Data MB',
ROUND(index_length/1024/1024, 2) AS 'Index MB'
FROM information_schema.tables
WHERE table_schema = DATABASE() AND table_name = 'wp_posts';
OPTIMIZE TABLE wp_posts; อีกครั้ง เนื่องจาก MySQL ต้องการรัน OPTIMIZE เพื่อคืนพื้นที่จริง ๆ บนดิสก์แก้ปัญหาที่พบบ่อย
ลบ Revision แล้วแต่ DB ไม่ลดขนาด — ต้อง Optimize Table
นี่เป็นปัญหาที่พบบ่อยที่สุด เมื่อคุณรัน DELETE หรือใช้ Plugin ลบ Revision MySQL จะทำเครื่องหมายว่าแถวนั้น "ว่าง" แต่ไม่ได้คืนพื้นที่ให้ทันที ขนาดไฟล์ Database บน Disk จึงยังเท่าเดิม ต้องรัน OPTIMIZE TABLE wp_posts; ผ่าน phpMyAdmin เพื่อ Defragment ตารางและคืนพื้นที่จริง ๆ WP-Sweep มีปุ่ม "Optimize" ให้กดในหน้า Sweep เช่นกัน หรือจะ Optimize ผ่าน cPanel → phpMyAdmin → เลือกตาราง wp_posts → คลิก "Operations" → "Optimize table" ก็ได้
wp-config.php แก้แล้วแต่ยังสร้าง Revision อยู่ — Cache ค้าง
หลังแก้ wp-config.php แล้ว ถ้า WordPress ยังสร้าง Revision เกินจำนวนที่กำหนด อาจเกิดจาก Object Cache หรือ Opcode Cache ที่ Cache ไฟล์ wp-config.php เวอร์ชันเก่าไว้ ให้ล้าง Cache ของ Plugin ที่ใช้งาน เช่น WP Super Cache, W3 Total Cache หรือ LiteSpeed Cache แล้วทดสอบโดยบันทึกบทความหลายครั้งและตรวจสอบจำนวน Revision ใน Database ใหม่ผ่านคำสั่ง SQL Query ที่แนะนำข้างต้น
SQL Query พิมพ์ผิด Delete ข้อมูลผิดตาราง — ต้อง Backup ก่อนเสมอ
การรัน SQL Query โดยตรงใน phpMyAdmin เป็นสิ่งที่ต้องระมัดระวังอย่างมาก โดยเฉพาะคำสั่ง DELETE และ DROP ซึ่งไม่สามารถยกเลิกได้ถ้าไม่มี Backup หากพิมพ์ชื่อตารางผิด เช่น ลบข้อมูลจาก wp_posts ทั้งหมดแทนที่จะลบแค่ type='revision' จะสูญเสียบทความทั้งหมด กฎทองคือต้อง Backup Database ก่อนรัน Query ทุกครั้งโดยไม่มีข้อยกเว้น ทำ Backup ผ่าน cPanel → Backup หรือผ่าน phpMyAdmin → Export
Plugin ลบ Revision ไม่ได้เพราะ User ไม่มีสิทธิ์ DB — ติดต่อ Hosting Support
บาง Hosting Provider จำกัดสิทธิ์ MySQL User ให้ไม่สามารถรัน DELETE หรือ OPTIMIZE บนตารางบางตารางได้ ทำให้ Plugin เช่น WP-Sweep แสดง Error หรือลบข้อมูลได้ไม่ครบ ในกรณีนี้ให้ติดต่อ Hosting Support แจ้งปัญหาและขอให้ทีม Support ดำเนินการลบ Revision และ Optimize Database ให้ หรือขอให้เพิ่มสิทธิ์ให้ MySQL User มีสิทธิ์ DELETE และ OPTIMIZE บน Database ของ WordPress