จัดการ WordPress Revisions ลด Database ขนาดใหญ่

WordPress เก็บประวัติแก้ไขทุกครั้งทำให้ DB พองโต ตั้งค่าจำกัด Revision ช่วยเพิ่มความเร็วได้ทันที

จัดการ WordPress Revisions 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 ทำให้อาจต้องอัพเกรดแผนเร็วกว่าที่ควร

ดู 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 สะสมมากเกินไป

จำกัดจำนวน 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 ทั้งหมดนั้นประหยัดพื้นที่ได้มากที่สุด แต่จะทำให้ไม่สามารถย้อนกลับบทความได้เลย จึงไม่แนะนำสำหรับมือใหม่

ลบ 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 จะดำเนินการลบและแสดงผลลัพธ์ว่าลบข้อมูลไปเท่าไร

ลบ 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 จึงจะเห็นพื้นที่ลดลงจริง

ตั้งค่า 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);

ตรวจสอบ 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';
Tip: เข้า phpMyAdmin → เลือก Database ของ WordPress → ดูคอลัมน์ Size ที่ด้านล่าง ควรลดลงเห็นได้ชัดหลังลบ Revision หากขนาดยังไม่ลดลง ให้รัน 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

คำถามที่พบบ่อย

ถ้าลบ Revision ออกหมด จะ Undo การแก้ไขบทความได้ไหม?
ไม่ได้ครับ เมื่อลบ Revision ออกทั้งหมดแล้ว จะไม่สามารถย้อนกลับไปดูหรือกู้คืนเนื้อหาเวอร์ชันเก่าได้อีก เพราะ Revision คือข้อมูลที่ใช้ย้อนกลับบทความโดยตรง อย่างไรก็ตาม เนื้อหาบทความที่เผยแพร่อยู่ในปัจจุบันจะยังคงอยู่ครบถ้วน แค่ประวัติการแก้ไขเก่า ๆ จะหายไปเท่านั้น แนะนำให้ Backup Database ก่อนลบ Revision ทุกครั้ง และพิจารณาตั้งค่า WP_POST_REVISIONS ให้เก็บไว้ 3-5 เวอร์ชันแทนการลบทั้งหมด
ควรเก็บ Revision ไว้กี่ Version ถึงจะเหมาะสม?
สำหรับเว็บทั่วไปแนะนำให้เก็บไว้ 3-5 เวอร์ชัน ซึ่งเพียงพอสำหรับกรณีที่ต้องย้อนกลับบทความ เช่น แก้ไขผิดพลาดหรือต้องการดูเนื้อหาเก่า แต่ไม่มากจนทำให้ Database พองโต สำหรับเว็บที่มีบทความสำคัญมาก เช่น เนื้อหากฎหมายหรือเอกสารทางการ อาจเพิ่มเป็น 10 เวอร์ชัน ส่วนเว็บ Blog ทั่วไปที่แก้ไขบ่อย ๆ ค่า 3 เวอร์ชันก็เพียงพอแล้ว
Autosave Draft กับ Revision ต่างกันอย่างไร ลบได้ทั้งคู่ไหม?
Autosave Draft คือสำเนาที่ WordPress บันทึกอัตโนมัติทุก 60 วินาทีขณะที่คุณกำลังเขียนบทความ เพื่อป้องกันข้อมูลหายหากเบราว์เซอร์ปิดกะทันหัน ส่วน Revision คือสำเนาที่บันทึกทุกครั้งที่คุณกดปุ่ม Save หรือ Update ด้วยตัวเอง ทั้งสองประเภทเก็บอยู่ในตาราง wp_posts ด้วย post_type เป็น 'revision' และ 'auto-draft' ตามลำดับ สามารถลบได้ทั้งคู่ผ่าน WP-Sweep หรือ SQL Query โดยไม่กระทบเนื้อหาบทความที่เผยแพร่อยู่แล้ว