wp_posts atau wp_postmeta. Yang paling besar justru tabel milik plugin keamanan, berisi catatan setiap request, setiap percobaan login, dan hasil scan file. Plugin keamanan tidak salah apa-apa di sini. Yang perlu kita pilih dengan sadar adalah cara dia menyimpan data, dan itu sebaiknya diputuskan sebelum plugin dipasang, bukan setelah database sudah membengkak.
Kenapa plugin keamanan bisa jadi penghuni terbesar database
INSERT ke database. Situs yang sedang ramai diserang akhirnya sibuk menulis log, bukan melayani pengunjung.
Ada beberapa efek lanjutan yang sering tidak disadari:
- Query di halaman dashboard plugin (grafik serangan, daftar IP, dan sejenisnya) makin berat karena harus membaca tabel yang besar.
- Backup dan migrasi jadi lebih lama, karena isi dump database didominasi log yang sebenarnya tidak penting untuk dipulihkan.
- Di InnoDB, menghapus baris tidak otomatis mengecilkan file tabel di disk. Kuota disk bisa tetap terpakai walaupun log sudah dibersihkan.
- Sebagian plugin menyimpan hasil scan atau konfigurasi besar di
wp_options. Kalau opsi itu ditandai autoload (dimuat otomatis di setiap request), beban itu ikut terbawa ke setiap halaman, termasuk halaman depan.
Tiga pendekatan yang biasanya jadi pilihan
| Pendekatan | Beban ke database | Skill yang dibutuhkan | Biasanya cocok untuk |
|---|---|---|---|
| Plugin all-in-one, log di DB | Tinggi jika log dan live traffic aktif tanpa batas retensi | Rendah, semua dari wp-admin | Situs kecil tanpa akses ke proteksi server, dengan pemilik yang rajin mengatur retensi |
| Plugin ringan dan fokus | Rendah | Rendah sampai sedang | Situs yang servernya sudah punya proteksi dasar, atau yang hanya butuh login aman |
| Proteksi di server/edge + plugin minimal | Paling rendah | Sedang sampai tinggi, atau bergantung pada fitur hosting | VPS, situs ramai, atau hosting yang sudah menyediakan WAF |
Pertanyaan yang perlu dijawab sebelum memasang
wp-content, dan ada yang mengirim data ke dashboard layanan eksternal. Penyimpanan di file atau eksternal tidak membebani database, tapi punya konsekuensi lain. File log di dalam web root harus dilindungi agar tidak bisa diakses publik, dan pengiriman data ke pihak luar perlu kamu setujui dengan sadar.
Apa saja yang dicatat? Mencatat setiap request (live traffic) jauh lebih berat daripada hanya mencatat request yang diblokir atau login yang gagal. Cek apakah fitur pencatatan lengkap bisa dimatikan tanpa mematikan proteksinya. Biasanya kamu tidak butuh rekaman semua pengunjung, cukup kejadian penting saja.
Berapa lama data disimpan, dan apakah pembersihannya benar-benar jalan? Pengaturan retensi seperti 'hapus log lebih dari sekian hari' hanya berguna kalau job pembersihannya dieksekusi. Di banyak plugin, job itu bergantung pada WP-Cron, yang hanya terpicu saat ada kunjungan. Kalau WP-Cron dimatikan tanpa system cron pengganti, log bisa menumpuk terus walaupun pengaturannya terlihat benar.
Hasil scan disimpan di mana? Scanner file biasanya menyimpan daftar file, hash, dan temuan. Kalau disimpan sebagai opsi autoload di wp_options, ukurannya ikut dimuat di setiap request.
Apa yang terjadi saat plugin dihapus? Tidak semua plugin membersihkan tabelnya saat di-uninstall. Kalau sebelumnya sudah gonta-ganti plugin keamanan, sering ada tabel sisa yang masih memakan ruang.
Apakah fungsi yang sama sudah ditangani di level server? Ini pertanyaan yang paling sering terlewat. Kalau server sudah punya WAF dan pembatasan brute force, firewall aplikasi di plugin sering hanya mengulang pekerjaan yang sama, ditambah biaya menulis log ke database. Cek di panel hosting atau tanyakan ke support apa saja yang sudah aktif.
Cara mengecek kondisi database yang sekarang
nama_database dengan nama database situsmu.
SQL
SELECT table_name,
ROUND((data_length + index_length) / 1024 / 1024, 1) AS size_mb,
table_rows
FROM information_schema.tables
WHERE table_schema = 'nama_database'
ORDER BY (data_length + index_length) DESC
LIMIT 15;table_rows di InnoDB hanya estimasi, jadi gunakan untuk melihat gambaran besar saja, bukan angka pasti.
Untuk membersihkan, lakukan dari pengaturan plugin dulu, misalnya mematikan live traffic, menurunkan retensi, atau memakai tombol hapus log kalau tersedia.
Peringatan: jangan langsung menjalankan DROP TABLE atau TRUNCATE pada tabel plugin yang masih aktif. Kedua perintah itu menghapus data secara permanen dan tidak bisa dibatalkan. Plugin juga bisa error kalau tabel yang ia butuhkan tiba-tiba hilang. Selalu buat backup database sebelum menghapus apa pun secara manual.
Kalau setelah pembersihan ukuran file tabel di disk tidak turun, OPTIMIZE TABLE bisa membantu. Hasilnya tergantung konfigurasi MySQL. Perintah ini juga cukup berat untuk tabel besar, jadi sebaiknya dijalankan di jam sepi.
