ล้างฐานข้อมูล 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/
- Categories:
- Cloud
- Tags:
- Cloud
- Cloud Server
Related Posts
หมวดหมู่ที่น่าสนใจ
- Account Settings
- AD Server
- AI
- Alibaba Cloud
- Anti-Spam Gateway
- AWS Amazon Web Services
- Campaign
- CentOS/AlmaLinux
- Cloud
- Cloud Backup
- Cloud Communication
- Cloud Migration
- Cloud Security
- Cloud Server Management
- Cloud Solution
- Cloud Solution for Government
- Cloud Solutions by Industry
- Cloud Storage
- Cloud VPS App Plus +
- Cloud VPS DirectAdmin
- Cloud VPS Plesk
- CSR
- Cyber Security
- Cybersecurity
- Data Sovereignty
- Database Server
- DDoS
- Digital Tranformation
- Digital Transformation
- Direct Mail
- Directadmin
- Domainname
- Ecommerce
- ERP
- Generative AI
- Getting Started
- Google Cloud
- Google G Suite
- Huawei Cloud
- IT News
- Linux Server
- Managed Cloud Services
- Managed Service Provider
- Manual
- Microsoft
- Microsoft 365
- Microsoft Azure
- News
- On-premise
- Private Mail Server
- Promotion
- Recommend Solution (Enterprise)
- Server
- Sovereign Cloud
- THAI DATA CLOUD Platform
- Ubuntu
- Ubuntu
- Uncategorized
- VMware
- VPS Server
- Web Design
- Web Hosting
- Web Hosting (DirectAdmin)
- Web Hosting (Plesk)
- Web Technologies
- Windows Server
- Wordpress
- Zimbra
- เรื่องราวความประทับใจ
- โซลูชันสำหรับธุรกิจการผลิตและยานยนต์
- โซลูชันสำหรับธุรกิจการศึกษา
- โซลูชันสำหรับธุรกิจการเงิน
- โซลูชันสำหรับธุรกิจขนส่งและกระจายสินค้า
- โซลูชันสำหรับธุรกิจค้าปลีก
- โซลูชันสำหรับธุรกิจท่องเที่ยว
- โซลูชันสำหรับธุรกิจบริการสุขภาพและโรงพยาบาล
- โซลูชันสำหรับธุรกิจประกันภัย
- โซลูชันสำหรับธุรกิจพลังงานและสาธารณูปโภค
- โซลูชันสำหรับธุรกิจสื่อสารมวลชนและเอ็นเตอร์เทนเมนท์
- โซลูชันสำหรับธุรกิจอสังหาริมทรัพย์
- โซลูชันสำหรับธุรกิจเทคโนโลยี








