ลดความยุ่งยากในการใช้คลาวด์ พูดคุยกับเจ้าหน้าที่

ล้างฐานข้อมูล WordPress ให้เล็กลงและเร็วขึ้น
Home ล้างฐานข้อมูล WordPress ให้เล็กลงและเร็วขึ้น

ล้างฐานข้อมูล WordPress ให้เล็กลงและเร็วขึ้น

ฐานข้อมูล WordPress ที่ใช้งานมาหลายปีมักมีข้อมูลที่ไม่ได้ใช้สะสมมากกว่าข้อมูลจริงหลายเท่า ทั้งรุ่นแก้ไขของบทความที่เก็บทุกครั้งที่กดบันทึก ความคิดเห็นสแปม และข้อมูลของปลั๊กอินที่ถอนไปนานแล้ว

ผลที่ตามมาคือหน้าหลังบ้านช้า การสำรองข้อมูลใช้เวลานาน และการย้ายเว็บลำบาก คู่มือนี้ล้างอย่างเป็นระบบพร้อมข้อควรระวังในแต่ละขั้น

สิ่งที่ต้องเตรียม

  • WP-CLI หรือสิทธิ์เข้าฐานข้อมูล
  • สำรองฐานข้อมูลก่อนทุกครั้ง ทุกคำสั่งในคู่มือนี้ลบข้อมูลถาวร
cd /var/www/example.com
wp db export /var/backups/before-cleanup-$(date +%F).sql
gzip /var/backups/before-cleanup-*.sql

ขั้นตอนที่ 1: ดูว่าอะไรกินพื้นที่

wp db size --tables --human-readable
-- นับข้อมูลที่ลบได้แต่ละประเภท
SELECT post_type, post_status, COUNT(*) AS n
FROM wp_posts GROUP BY post_type, post_status ORDER BY n DESC;

SELECT comment_approved, COUNT(*) FROM wp_comments GROUP BY comment_approved;

SELECT COUNT(*) AS transients FROM wp_options WHERE option_name LIKE '\_transient\_%';

SELECT ROUND(SUM(LENGTH(option_value))/1024/1024,2) AS autoload_mb
FROM wp_options WHERE autoload='yes';

ตัวเลขเหล่านี้บอกว่าควรเริ่มจากตรงไหน หากตาราง wp_postmeta ใหญ่ที่สุดแต่บทความมีไม่กี่ร้อย แปลว่ามีข้อมูลกำพร้าสะสมอยู่มาก

ขั้นตอนที่ 2: ลบรุ่นแก้ไขของบทความ

WordPress เก็บสำเนาทุกครั้งที่กดบันทึก บทความที่แก้ไข 30 ครั้งจะมี 30 แถวในตาราง wp_posts พร้อม meta ของแต่ละแถว

# ดูจำนวนก่อน
wp post list --post_type=revision --format=count

# ลบทั้งหมด
wp post delete $(wp post list --post_type=revision --format=ids) --force

# หรือเก็บไว้เฉพาะ 3 รุ่นล่าสุดของแต่ละบทความ
wp revisions clean 3

จำกัดจำนวนที่เก็บต่อไปด้วยการตั้งใน wp-config.php

define('WP_POST_REVISIONS', 5);
define('AUTOSAVE_INTERVAL', 120);

อย่าปิดทั้งหมดด้วยการตั้งเป็น false เพราะรุ่นแก้ไขคือสิ่งที่ช่วยกู้เนื้อหาเมื่อมีคนแก้ผิด เก็บไว้ 5 รุ่นเป็นค่าที่สมดุล

ขั้นตอนที่ 3: ล้างถังขยะและร่างอัตโนมัติ

wp post delete $(wp post list --post_status=trash --format=ids) --force
wp post delete $(wp post list --post_status=auto-draft --format=ids) --force

# ตั้งให้ล้างถังขยะเองหลัง 15 วัน
wp config set EMPTY_TRASH_DAYS 15 --raw

ขั้นตอนที่ 4: ล้างความคิดเห็นสแปมและถูกปฏิเสธ

wp comment delete $(wp comment list --status=spam --format=ids) --force
wp comment delete $(wp comment list --status=trash --format=ids) --force

wp comment list --format=count

หากไม่ได้เปิดให้แสดงความคิดเห็นเลย ปิดไว้ทั้งระบบเพื่อไม่ให้สะสมอีก

wp option update default_comment_status closed
wp post list --format=ids | xargs -n1 -I% wp post update % --comment_status=closed

ขั้นตอนที่ 5: ล้าง transient ที่ค้าง

wp transient delete --expired
wp transient delete --all --network

# ตรวจผล
wp db query "SELECT COUNT(*) FROM wp_options WHERE option_name LIKE '\_transient\_%';"

transient คือข้อมูลชั่วคราวที่ควรหมดอายุเอง แต่ WordPress ลบเฉพาะตอนที่มีการเรียกใช้ จึงมักค้างสะสม โดยเฉพาะบนเว็บที่ปลั๊กอินสร้าง transient ใหม่ตลอด

ขั้นตอนที่ 6: ลบข้อมูลกำพร้า

ข้อมูลที่อ้างถึงบทความหรือผู้ใช้ที่ถูกลบไปแล้ว

-- meta ของบทความที่ไม่มีอยู่แล้ว
DELETE pm FROM wp_postmeta pm
LEFT JOIN wp_posts p ON p.ID = pm.post_id
WHERE p.ID IS NULL;

-- meta ของความคิดเห็นที่ถูกลบ
DELETE cm FROM wp_commentmeta cm
LEFT JOIN wp_comments c ON c.comment_ID = cm.comment_id
WHERE c.comment_ID IS NULL;

-- ความสัมพันธ์หมวดหมู่ที่กำพร้า
DELETE tr FROM wp_term_relationships tr
LEFT JOIN wp_posts p ON p.ID = tr.object_id
WHERE p.ID IS NULL;

-- meta ของผู้ใช้ที่ถูกลบ
DELETE um FROM wp_usermeta um
LEFT JOIN wp_users u ON u.ID = um.user_id
WHERE u.ID IS NULL;

รันทีละคำสั่งและตรวจจำนวนแถวที่ถูกลบทุกครั้ง หากตัวเลขสูงผิดปกติให้หยุดและตรวจสอบก่อน

wp db query "SELECT COUNT(*) FROM wp_postmeta pm LEFT JOIN wp_posts p ON p.ID=pm.post_id WHERE p.ID IS NULL;"

ขั้นตอนที่ 7: ลบตารางของปลั๊กอินที่ถอนไปแล้ว

ปลั๊กอินส่วนใหญ่ไม่ลบตารางของตัวเองตอนถอน ตรวจว่ามีตารางไหนที่ไม่ใช่ของ WordPress เอง

wp db tables --all-tables

ตารางมาตรฐานของ WordPress มี 12 ตาราง ที่เหลือเป็นของปลั๊กอิน ตรวจว่าปลั๊กอินนั้นยังติดตั้งอยู่หรือไม่

wp plugin list --status=active --field=name

ก่อนลบ ให้ส่งออกตารางนั้นเก็บไว้ก่อน

wp db export /var/backups/old-plugin-tables.sql --tables=wp_oldplugin_data,wp_oldplugin_log
wp db query "DROP TABLE wp_oldplugin_data, wp_oldplugin_log;"

ตรวจ option ของปลั๊กอินเก่าด้วย

wp option list --search='oldplugin*' --fields=option_name,size_bytes

ขั้นตอนที่ 8: ปรับปรุงตารางและตรวจผล

wp db optimize
wp db size --tables --human-readable

เทียบขนาดกับตอนเริ่มต้น เว็บที่ไม่เคยล้างมาหลายปีมักลดลงได้ 40-70%

ตรวจว่าเว็บยังทำงานปกติ

wp post list --post_type=page --format=count
wp media list --format=count
curl -sI https://example.com | head -1

ขั้นตอนที่ 9: ตั้งให้ทำอัตโนมัติ

sudo nano /usr/local/bin/wp-cleanup.sh
#!/bin/bash
set -euo pipefail
SITE=/var/www/example.com
cd "$SITE"

wp db export "/var/backups/wp-$(date +%F).sql" --quiet
gzip -f "/var/backups/wp-$(date +%F).sql"

wp transient delete --expired --quiet
wp revisions clean 5 --quiet
wp comment delete $(wp comment list --status=spam --format=ids) --force --quiet 2>/dev/null || true
wp db optimize --quiet

find /var/backups -name 'wp-*.sql.gz' -mtime +30 -delete
echo "cleanup เสร็จ $(date)"
sudo chmod +x /usr/local/bin/wp-cleanup.sh

ตั้งรันสัปดาห์ละครั้งด้วย systemd Timer หรือ Cron

ปัญหาที่พบบ่อย

ลบแล้วเว็บพัง

กู้จากไฟล์สำรองที่ทำไว้ก่อนเริ่ม แล้วทำทีละขั้นพร้อมตรวจเว็บหลังแต่ละขั้น อย่ารันทุกคำสั่งรวดเดียวบนเว็บจริง

zcat /var/backups/before-cleanup-2026-09-25.sql.gz | wp db import -

ขนาดฐานข้อมูลไม่ลดหลังลบข้อมูล

InnoDB ไม่คืนพื้นที่ให้ระบบไฟล์ทันที รัน wp db optimize ซึ่งจะสร้างตารางใหม่ ต้องมีพื้นที่ดิสก์ว่างเท่ากับขนาดตารางที่ใหญ่ที่สุด

ตาราง wp_options ยังใหญ่

หาแถวที่ใหญ่ที่สุดแล้วดูว่าเป็นของอะไร บางปลั๊กอินเก็บ Log ไว้ใน option เดียวที่โตขึ้นเรื่อย ๆ

wp db query "SELECT option_name, ROUND(LENGTH(option_value)/1024) AS kb FROM wp_options ORDER BY LENGTH(option_value) DESC LIMIT 20;"

ไม่แน่ใจว่าตารางไหนลบได้

อย่าลบหากไม่แน่ใจ ส่งออกเก็บไว้ก่อนเสมอ และตรวจชื่อตารางกับชื่อปลั๊กอินที่เคยติดตั้ง ดูได้จากประวัติใน wp-content/plugins/ หรือจากไฟล์สำรองเก่า

ต้องการให้ทีมงานช่วยตรวจสุขภาพเว็บ WordPress ของคุณ ติดต่อ THAI DATA CLOUD ได้ที่ https://thaidata.cloud/contact/

ผู้ให้บริการคลาวด์ไทย
เพื่อธุรกิจของคนไทย

"มุ่งมั่น" และ "มั่นคง"
พร้อมรับมือทุกการเติบโต
Trust Cloud
คลาว์ที่ปลอดภัย
คือรากฐานที่มั่นคง
cloud security