Neu ban da bat cache, toi uu hinh anh, nang cap PHP len 8.4 ma site van cham, thu dat co the dang an trong database. Dac biet la bang wp_options voi cot autoload. Mình da giam TTFB tu 1.2s xuong 180ms chi bang cach don dep bang nay tren mot site khach hang. Bai nay minh se huong dan ban tu A den Z, bang SQL queries va WP-CLI cu the.
wp_options Autoload La Gi Va Tai Sao No Lam Site Cham?
wp_options la bang luu tat ca cai dat cua WordPress: site URL, email admin, settings plugin, theme, widget, transient cache. Cot autoload co gia tri “yes” hoac “no”. Khi autoload = “yes”, WordPress tu dong load dong do vao bo nho tren moi page load ca frontend lan admin.
Van de xay ra khi plugin cu de lai data, hoac plugin dang luu nhieu du lieu khong can thiet voi autoload = “yes”. WordPress phai unserialize tung dong, an RAM va CPU, ke ca khi ban da bat page cache. Ly do: nhieu truong hop wp_load_alloptions() chay truoc khi cache kick in.
Cach Kiem Tra Autoloaded Data Dang Bang Bao Nhieu
Ban can biet tong kich thuoc autoload hien tai. Co 2 cach: phpMyAdmin hoac WP-CLI. Mình neu ca hai.
Cach 1: Dung WP-CLI (khuyen dung tren VPS)
wp db query "SELECT SUM(LENGTH(option_value)) as autoload_size FROM wp_options WHERE autoload='yes';"Ket qua tra ve dang bytes. VD: 249025 bytes = ~0.25 MB. Tot.
Cach 2: Dung SQL trong phpMyAdmin
SELECT SUM(LENGTH(option_value)) as autoload_size
FROM wp_options WHERE autoload='yes';Them mot query huu ich hon, hien thi kich thuoc, so dong, va top 10 entries lon nhat:
SELECT 'Autoload size (KB)' as name,
ROUND(SUM(LENGTH(option_value))/ 1024) as value
FROM wp_options WHERE autoload='yes'
UNION
SELECT 'Autoload count', count(*)
FROM wp_options WHERE autoload='yes'
UNION
(SELECT option_name, length(option_value)
FROM wp_options WHERE autoload='yes'
ORDER BY length(option_value) DESC LIMIT 10);Lu y: neu WordPress cua ban dung tien to khac wp_, hay doi lai cho dung. Kiem tra trong wp-config.php dong $table_prefix.
Bao Nhieu MB Autoload La Qua Nhieu?
Dua tren kinh nghiem lam voi hang chuc site WordPress tren VPS, minh danh gia nhu sau:
- Duoi 1 MB: Tot, khong can lo lang.
- 1-3 MB: Chap nhan duoc, nhung nen kiem tra xem co gi don duoc khong.
- 3-10 MB: Bat dau anh huong hieu nang, dac biet tren VPS nho (1-2GB RAM). Can cleanup.
- Tren 10 MB: Phai xu ly ngay. Minhm da thay site co den 137 MB autoload data, TTFB len den 3-5 giay.
Mot site khach hang cua minh chay WooCommerce co 18 MB autoload data chi tu mot plugin import san pham da go roi. Sau cleanup, TTFB giam tu 2.1s xuong 0.4s.
Tim Top Autoloaded Options Nang Nhat
Chay query nay de xem 50 entries autoload lon nhat, sap xep theo kich thuoc:
SELECT option_name,
ROUND(LENGTH(option_value) / 1024, 2) AS size_kb
FROM wp_options
WHERE autoload='yes'
ORDER BY size_kb DESC
LIMIT 50;Ghi lai nhung option lon hon 100 KB. Day la nhung ung cu vien can don dep. Thuong ban se thay cac pattern nhu:
_transient_*— transient cache khong tu dong xoaum_cache_userdata_*— Ultimate Member cache301_redirects— redirect rules luu trong databasejetpack_*— Jetpack data khi da xoa pluginwpurp_custom_template_*— plugin da go nhung van de lai
Don Dep Transients Het Han Nhu The Nao?
Transients la cache entries tam thoi luu trong wp_options (tru khi ban dung Redis/Memcached object cache). Mac dinh WordPress se tu don dep khi het han, nhung bug hoac plugin issue de lai hang ngan dong transient cu.
Kiem tra so luong transient:
SELECT COUNT(*) AS transient_count
FROM wp_options
WHERE option_name LIKE '\_transient\_%'
OR option_name LIKE '\_site\_transient\_%';May nghin dong la binh thuong. Hang chuc ngan dong la bat thuong.
Xoa transient het han bang WP-CLI (an toan nhat):
wp transient delete-expiredXoa tat ca transients (can than, chi dung khi can):
wp transient delete --allLu y: delete --all se xoa ca transient con han. Phan lon plugin se tao lai khi can, nhung nen test tren staging truoc. Ban co the doc them ve toi uu toc do WordPress voi Redis Object Cache de hieu ro hon cach Redis giup giam tai database.
Xoa Options Cua Plugin Da Go Nhu The Nao?
Day la nguong nhan nhat. Plugin da xoa nhung options van nam lai, autoload = “yes”, an RAM moi ngay. Minh da thay site co 300 KB options cua Jetpack da go 2 nam truoc.
Buoc 1: Tim options cua plugin da go
VD ban da go Jetpack, tim tat ca options lien quan:
SELECT option_name,
ROUND(LENGTH(option_value) / 1024, 2) AS size_kb
FROM wp_options
WHERE option_name LIKE '%jetpack%'
AND autoload = 'yes';Buoc 2: Kiem tra plugin co cong cu cleanup khong
Mot so plugin (nhu Jetpack, Yoast SEO) co option “xoa data khi uninstall” trong settings. Cach tot nhat: cai lai plugin, bat tùy chon do, roi uninstall lan nua. An toan hon SQL.
Buoc 3: Xoa bang SQL neu can
DELETE FROM wp_options
WHERE option_name LIKE '%jetpack%'
AND autoload = 'yes';Lu y: tung plugin mot. Dung xoa hang loat. Mot so prefix giong nhau giua cac plugin khac nhau.
Chuyen Autoload = Yes Sang No Khi Nao?
Mot so option can luu nhung khong can load tren moi page. Vi du: settings cua contact form chi can khi nguoi dung mo trang contact. Ban co the giu nguyen data nhung doi autoload thanh “no”.
UPDATE wp_options
SET autoload = 'no'
WHERE option_name = 'ten_option_can_doi';Luc nay data van nam trong database, plugin lay duoc khi can, nhung khong con an RAM tren moi page load. Day la fix nhanh nhat va an toan nhat.
De biet option thuoc plugin nao, ban co the chay:
grep -Ri "ten_option" /var/www/thienlv.com/public_html/wp-content/Hoac mo phpMyAdmin, nhan Edit vao dong do, WordPress thuong hien thi duong dan plugin trong gia tri.
Don Dep wp_postmeta Bloat Va Revisions
Ngoai wp_options, wp_postmeta la bang lon thu 2 hay bi vo. Dac biet site chay WooCommerce, page builder nhu Elementor, hoac SEO plugin tao hang tram ngan dong meta.
Kiem tra orphaned postmeta (meta cua post da xoa):
SELECT COUNT(*) AS orphan_count
FROM wp_postmeta m
LEFT JOIN wp_posts p ON m.post_id = p.ID
WHERE p.ID IS NULL;Xoa orphaned postmeta:
DELETE m
FROM wp_postmeta m
LEFT JOIN wp_posts p ON m.post_id = p.ID
WHERE p.ID IS NULL;Don dep revisions (can than voi WooCommerce):
wp post delete $(wp post list --post_type='revision' --format=ids)Hoac gioi han so revisions trong wp-config.php:
define('WP_POST_REVISIONS', 3);Chi giu 3 revisions moi bai viet. Ban nen doc them bai bao mat wp-config.php voi 12 cau hinh de hieu ro cac constant quan trong.
Tao Cron Job Don Dep Database Tu Dong
De khong phai don thu cong moi lan, minh tao cron job chay hang tuan. Tao script /usr/local/bin/wp-db-cleanup.sh:
#!/bin/bash
# WordPress Database Cleanup Script
# Chay hang tuan qua cron
WP_PATH="/var/www/thienlv.com/public_html"
LOG_FILE="/var/log/wp-db-cleanup.log"
echo "[$(date)] Bat dau cleanup..." >> $LOG_FILE
# Xoa transient het han
sudo -u www-data wp transient delete-expired --path=$WP_PATH >> $LOG_FILE 2>&1
# Xoa spam comments
sudo -u www-data wp comment delete $(sudo -u www-data wp comment list --status=spam --format=ids) --path=$WP_PATH >> $LOG_FILE 2>&1
# Xoa trash posts
sudo -u www-data wp post delete $(sudo -u www-data wp post list --post_status=trash --format=ids) --path=$WP_PATH >> $LOG_FILE 2>&1
# Xoa revisions (chi giu 3 moi bai)
sudo -u www-data wp post delete $(sudo -u www-data wp post list --post_type='revision' --format=ids) --path=$WP_PATH >> $LOG_FILE 2>&1
# Optimize tables
sudo -u www-data wp db optimize --path=$WP_PATH >> $LOG_FILE 2>&1
echo "[$(date)] Hoan thanh." >> $LOG_FILEPhan quyen va tao cron:
chmod +x /usr/local/bin/wp-db-cleanup.sh
# Chay moi Sunday luc 3h sang
echo "0 3 * * 0 root /usr/local/bin/wp-db-cleanup.sh" | sudo tee /etc/cron.d/wp-db-cleanupLu y: wp db optimize se chay OPTIMIZE TABLE tren tat ca bang. Tren InnoDB, lenh nay thuc chat la ALTER TABLE ... ENGINE=InnoDB de rebuild. Chi chay khi can, vi no lock table trong qua trinh rebuild. Khong chay luc traffic cao.
Kiem Tra Lai Sau Cleanup
Sau khi don xong, chay lai query autoload size de xem ket qua:
SELECT COUNT(*) AS autoload_count,
ROUND(SUM(LENGTH(option_value)) / 1024 / 1024, 2) AS autoload_mb
FROM wp_options WHERE autoload = 'yes';So sanh truoc/sau. Muc tieu: duoi 1-2 MB. Tren site WooCommerce lon, chap nhan den 3-5 MB.
Do TTFB truoc va sau bang curl:
curl -o /dev/null -s -w "TTFB: %{time_starttransfer}s\nTotal: %{time_total}s\n" \
https://thienlv.com/Neu ban da cau hinh Nginx FastCGI Cache va Brotli compression, cleanup wp_options se la lop toi uu cuoi cung giup site cham den muc toi da.
Cac Loi Thuong Gap Khi Cleanup wp_options
Loi 1: Xoa nham option, site hong
Fix: Luon backup truoc khi xoa. Chay wp db export backup.sql --path=/path/to/wp truoc moi thao tac. Neu xoa nham, restore bang wp db import backup.sql.
Loi 2: Site hien “Error establishing database connection”
Nguyen nhan: xoa option quan trong cua WordPress core. Fix: restore tu backup ngay. WordPress core options bat buoc: siteurl, home, blogname, active_plugins, template, stylesheet. Dung bao gio xoa nhung option nay.
Loi 3: Plugin bao “missing settings” sau cleanup
Nguyen nhan: xoa option cua plugin dang hoat dong. Fix: vao settings cua plugin, Save lai. Phan lon plugin se tao lai options mac dinh.
Loi 4: wp transient delete --all lam mat API cache
Nguyen nhan: xoa transient dang dung de cache API response. Fix: plugin se tao lai khi auto-refresh. Tam thoi site co the cham hon trong vai phut dau.
Loi 5: Cron job chay loi “Another update is currently in progress”
Nguyen nhan: wp db optimize lock table trong khi WP cron dang chay. Fix: gioi han wp db optimize chi chay luc traffic thap (3h sang), hoac bo no di neu database nho.
Quy Trinh Don Dep wp_options Tong Hop
Mình tong hop lai 7 buoc ban nen lam theo thu tu:
- Backup database —
wp db exporttruoc moi thao tac. - Kiem tra autoload size — chay query SUM(LENGTH(option_value)).
- Tim top 50 autoload entries — danh sach nhung option nang nhat.
- Xoa transient het han —
wp transient delete-expired. - Xoa options plugin da go — tung plugin mot, kiem tra ky.
- Chuyen autoload = no — cho option khong can load moi page.
- Do lai autoload size va TTFB — so sanh truoc/sau.
Luon lam tren staging truoc, validate xong moi len production. Neu ban chua co staging environment, tao bang cach clone site len subdomain rieng voi HTTP Basic Auth bao ve.
Luu Y Quan Trong Ve Object Cache
Neu ban da cai Redis Object Cache hoac Memcached, transients se duoc luu trong RAM chu khong con trong wp_options. Day la cach tot nhat de giam tai wp_options long term. Tuy nhien, autoloaded options van nam trong MySQL — Redis khong cache wp_load_alloptions() result ma cache tung option rieng le.
Neu chua cai Redis Object Cache, ban nen doc bai toi uu toc do WordPress voi Redis de setup. Ket hop Redis + wp_options cleanup la combo manh nhat cho database performance.
Ket Luan
wp_options autoload bloat la nguyen nhan cham lang cua WordPress ma nhieu nguoi bo qua. Khac voi cache PHP hay nenh hinh anh, loi nay khong hien ra trong PageSpeed Insights nhung an vao TTFB va memory. Quy trinh 7 buoc minh neu tren da giup site khach hang giam TTFB tu 2 giay xuong 0.3 giay. Lam mot lan, dat cron job giu sach, va ban se khong phai lo nua.
Neu ban co cau hoi hoac gap loi trong qua trinh cleanup, cu de lai comment nhe. Mình se tra loi tung cau mot.
