wp_options, tepatnya di opsi yang ditandai autoload. Artikel ini disusun sebagai tanya-jawab dari pertanyaan yang biasanya muncul saat kita mulai menelusuri masalah ini.
Apa itu opsi autoload, dan kenapa bisa bikin lemot?
wp_options adalah tempat WordPress, tema, dan plugin menyimpan pengaturan. Tiap baris punya option_name, option_value, dan kolom autoload. Kalau autoload aktif, opsi itu ikut diambil sekaligus di awal setiap request lewat satu query, lalu disimpan di memori supaya pemanggilan get_option() berikutnya tidak perlu ke database lagi.
Idenya bagus untuk opsi kecil yang hampir selalu dipakai, seperti URL situs atau daftar plugin aktif. Masalahnya, banyak plugin ikut menyimpan data besar dengan autoload aktif: cache internal, log, hasil scan, statistik, atau pengaturan yang ditulis ulang terus. Lebih parah lagi, saat plugin dihapus, datanya sering tertinggal. Akhirnya setiap request harus menarik, mengirim, dan meng-unserialize data dalam jumlah besar yang sebagian besar tidak pernah dipakai. Unserialize di sini artinya mengubah teks yang tersimpan di database kembali menjadi array atau object PHP.
Kenapa yang terasa lemot justru dashboard, bukan halaman depan?
Berapa ukuran autoload yang masih wajar?
Bagaimana cara mengukur total autoload dan menemukan opsi terbesar?
BASH
# Cek prefix tabel (default biasanya wp_)
wp db prefix
# Total byte semua opsi autoload
wp option list --autoload=on --format=total_bytes
# 20 opsi autoload terbesar (ganti wp_ sesuai prefix)
wp db query "SELECT option_name, LENGTH(option_value) AS bytes FROM wp_options WHERE autoload IN ('yes','on','auto-on','auto') ORDER BY bytes DESC LIMIT 20;"
# --- Mengubah data: backup dulu sebelum menjalankan ini ---
wp db export sebelum-autoload.sql
wp option set-autoload nama_opsi no('yes','on','auto-on','auto') dipakai karena WordPress 6.6 mengganti nilai autoload dari yes/no menjadi beberapa varian baru. Situs yang sudah lama berjalan bisa berisi campuran nilai lama dan baru, jadi query perlu mencakup semuanya. Kalau tidak punya SSH, query SELECT yang sama bisa dijalankan di tab SQL phpMyAdmin. Untuk melihat totalnya, ganti bagian kolom dengan SUM(LENGTH(option_value)) lalu hapus ORDER BY dan LIMIT.
Hasil query biasanya langsung bercerita. Perhatikan prefix di option_name. Kebanyakan plugin memakai prefix yang mirip nama plugin, jadi dari situ kita bisa menebak asal data. Opsi yang namanya diawali _transient_ atau _site_transient_ adalah transient, yaitu data cache sementara yang disimpan plugin di database.
Opsi mana yang aman dimatikan autoload-nya?
siteurl, home, active_plugins, template, stylesheet, rewrite_rules, dan wp_user_roles (nama yang terakhir mengikuti prefix tabel). Opsi cron juga sering muncul di daftar teratas. Kalau ukurannya besar, itu tanda event terjadwal menumpuk, misalnya karena WP-Cron tidak berjalan normal. Mematikan autoload tidak menyelesaikan masalah itu, jadi akar masalahnya harus dicari secara terpisah.
Untuk opsi milik plugin yang masih aktif, pertimbangkan trade-off-nya. Mematikan autoload tidak menghapus data. Kalau plugin tetap memanggil get_option(), WordPress akan mengambilnya lewat satu query tambahan saat dibutuhkan. Jadi biasanya tidak ada yang rusak, cuma ada sedikit query ekstra di halaman yang memang memakainya. Tapi kalau opsi itu dibaca di hampir semua halaman, mematikan autoload tidak banyak membantu. Di kasus seperti itu, pilihan yang lebih masuk akal biasanya mengatur ulang plugin, misalnya membatasi log, atau mencari plugin pengganti.
Bagaimana cara menonaktifkan autoload dengan aman, dan apakah lebih baik dihapus saja?
- Backup database dulu, misalnya dengan
wp db exportseperti di contoh di atas, atau lewat fitur backup di panel hosting. - Ubah satu opsi atau satu kelompok opsi sekaligus, jangan semuanya dalam sekali jalan. Dengan begitu, kalau ada fitur yang berubah perilaku, penyebabnya mudah dilacak.
- Pakai
wp option set-autoload. Nilai yang diterima tergantung versi WP-CLI, jadi cek dulu denganwp help option set-autoload. - Kalau situs memakai persistent object cache, kosongkan cache-nya (misalnya dengan
wp cache flush) supaya perubahan langsung terbaca. - Ukur ulang total autoload, lalu bandingkan TTFB di wp-admin sebelum dan sesudah perubahan.
UPDATE langsung di phpMyAdmin. Ubah kolom autoload pada baris yang dituju menjadi off untuk WordPress 6.6 ke atas, atau no untuk versi lama. Developer yang lebih nyaman lewat kode bisa memakai wp_set_option_autoload(), yang tersedia sejak WordPress 6.4.
Soal hapus atau matikan autoload, aku cenderung memilih mematikan autoload dulu, kecuali datanya jelas sisa plugin yang sudah dihapus. Mematikan autoload mudah dibalikkan dan tidak menghilangkan pengaturan. Menghapus opsi milik plugin aktif bisa membuat pengaturannya kembali ke default. Untuk transient yang sudah kedaluwarsa, menghapusnya aman karena plugin akan membuat ulang kalau perlu. Perintah wp transient delete --expired bisa dipakai untuk itu.
Catatan lain soal performa WordPress, seperti cara membaca slow query dan memisahkan masalah plugin dari masalah server, ada di Catatan Praktis WordPress Performance & Debugging untuk Troubleshooting Sehari-hari.
Jadi, kalau wp-admin terasa berat di semua halaman sementara halaman depan normal, cek autoload sebelum menyalahkan server atau menaikkan paket hosting. Ukur totalnya, lihat 20 opsi terbesar, cocokkan prefix-nya dengan plugin yang masih aktif, lalu matikan autoload satu per satu setelah backup. Pekerjaannya biasanya selesai dalam beberapa menit, dan hasilnya langsung bisa diukur.