Untuk situs blog dengan pengguna belasan ribu aktif, penggunaan mesin basis data InnoDB sudah tidak memadai lagi untuk MHS Blog. Setiap pengguna minimal menggunakan lima tabel. Satu tabel ada tiga berkas. Nah, kalikan semua itu dan kita mendapati jumlah yang fantastis dalam sebuah direktori.

Hal ini bisa diatasi dengan menggunakan ReiserFS. Sistemberkas ini mampu menampung banyak berkas kecil dalam sebuah direktori. Tetapi, tetap saja terjadi penurunan performa basisdata. Ketika saya ‘ls’ di direktori tersebut, cukup lama untuk bisa sampai bawah. Padahal, jumlah data tak sampai 3 GB.

Hmm… saya sempat berpikir, seandainya InnoDB punya fasilitas pencacahan, mungkin ia bisa menaruh berkas-berkas tersebut ke sub-sub direktori. Atau, seperti basisdata Oracle yang bisa mempartisi basisdata dalam banyak partisi.

Akhirnya, saya punya solusi satu, memindahkan seluruh tabel ke dalam format InnoDB. Menurut sebuah tautan di Internet, cukup menggunakan perintah:

ALTER TABLE nama_tabel ENGINE = InnoDB;

Wow, mudah sekali. Saya tertarik untuk menjalankannya.

Buat Cadangan Basisdata

Blog MHS sudah ada semenjak 2006, berarti sudah banyak mahasiswa yang menggunakannya. Pengetahuan yang terkoleksi tidak boleh hilang begitu saja. Basisdata perlu disalin. Ada dua cara, mematikan MySQL atau mengunci basisdata.

Saya memilih cara yang kedua, tetapi tampaknya efeknya sama saja. Entahlah…. Yuk, lanjut.

Pertama-tama, masuk ke dalam basisdata yang bersangkutan, saya harus menggunakan “-A” untuk mematikan fasilitas autocomplete agar bisa masuk ke mysql:

$ sudo mysql --defaults-file=/etc/mysql/debian.cnf -A basisdata_ku

Lalu, kunci basisdata:

mysql> FLUSH TABLES WITH READ LOCK

Saatnya menyelamatkan tabel-tabel sebelum dirubah. Tabel-tabel InnoDB dalam sebuah basisdata biasanya disimpan dalam sebuah direktori. Saatnya mengompres satu direktori tersebut:

mysql> SYSTEM tar cfvj /tmp/basisdata_ku.tar.bz2 /var/lib/mysql/basisdata_ku/

Setelah selesai, segera buka kembali kuncinya:

mysql> UNLOCK TABLES;

Ubah Menjadi InnoDB

Ada ratusan ribu tabel dan saya punya kehidupan. Untuk itu, saya menggunakan cara yang disarankan oleh Stackoverflow:

mysql> select concat('alter table ',table_name, ' engine = innodb;')
 -> from information_schema.tables
 -> where table_schema in ('basisdata_ku');

Tidak sampai semenit semua terubah. Nah, tinggal satu langkah lagi.

mysql> quit; -- JANGAN LUPA KELUAR!

Ubah Secara Baku Menggunakan InnoDB

Mulai MySQL 5.5, basisdata baru secara baku menggunakan InnoDB. Pantas saja walau tabel lama sudah InnoDB, tetapi untuk tabel baru bakal InnoDB. Menurut sebuah entri blog, WordPress tidak memilih mesin yang digunakan. Jadi, sepertinya hanya perlu mengganti konfigurasi MySQL.Tambahkan entri di ‘/etc/mysql/my.cnf ‘ sebuah nilai di bawah “[mysqld]” sebagai berikut:

[mysqld]
default-storage-engine = innodb

Letaknya tidak harus tepat sehabis “[mysqld]“. Yang penting di bawah entri tersebut. Lalu, jalanulangkan MySQL:

/etc/init.d/mysql restart

Selesai.

Rencana Masa Depan

Ada beberapa rencana:

  • Pindah dari InnoDB ke XTraDB untuk performa yang lebih baik. (Percona)
  • Atau coba Drizzle?
  • Taklukkan dunia. 🙂