Beberapa saat belakangan ini saya mendapati database yang running pada server produksi terasa lama saat proses query. Ya, tentu saja ketika melakukan query yang kompleks. Saat query yang kita run menampilkan data yang lebih rumit dari biasanya, disaat itulah keahlian kita sebagai database administrator diuji.
Koq bisa database yang sudah berjalan lama di server produksi menjadi lambat disaat – saat sekarang?
Bisa saja, karena saat aplikasi di deploy pada awal – awal masih belum berasa, karena jumlah data yang ditampung juga masih sedikit. Bisa jadi query yang kita jalankan belum ketahuan optimal. Tapi, kalau aplikasi yang terpasang sudah bertahun – tahun running, dan data yang didalamnya sudah sangat banyak, barulah ketahuan ada beberapa cacat query yang akhirnya aplikasi kita menjadi terasa lama.
Apa yang harus dilakukan saat database menjadi berat?
Cek ulang index didalamnya. Ini berlaku untuk semua database ya, index itu perlu banget. Biasanya nih, yang sering terjadi itu kita bikin index di field yang satu, tapi malah melakukan search query “WHERE” didalam field yang tidak kita index, kan jadi percuma.
INDEX jangan terlalu banyak
Index itu seperti lampiran berkas biasa yang kita tandai pake sticker yang disimpan di loker, kalau terlalu banyak malah jadi blunder, berkas tersebut menjadi terlalu banyak tanda. Jadi lakukan index pada field yang benar – benar berpengaruh terhadap hubungan data dan sering digunakan pada kondisi “WHERE”. Jika kamu punya satu table yang memiliki 7 field, jangan ke tujuh tujuhnya dibikin index, itu sama saja dengan gak pake index sama sekali karena semua field malah mendapat prioritas yang sama.
Bedakan prioritas PRIMARY KEY dengan INDEX
Dari judulnya saja sudah berbeda ya, tapi ya kadang juga sih kita sering luput bahwa PRIMARY KEY disamakan dengan INDEX, dikasih PRIMARY KEY iya dikasih INDEX juga iya, terlalu berlebihan mending INDEXnya digunakan ke field yang lain. Walaupun bebas bebas aja sih, gimana style masing – masing Database Administrator, tapi saya tidak melakukan hal ini karena terlalu boros. Tujuan PRIMARY KEY itu kan untuk kunci data yang sifatnya UNIQUE, sedangkan INDEX untuk mempermudah pencarian.
Kalau sudah terlanjur running, harus bagaimana?
Ada beberapa tahapan yang sering saya lakukan, tapi harus dilakukan dengan hati – hati, karena data real sudah masuk dan sistem sudah berjalan. Jadi sebaiknya lakukan secara bertahap seperti ini :
- Backup Database sebelum melakukan apapun
- Selidiki query yang sering menggunakan “WHERE” dan lihat field apa yang sering digunakan, lakukan pengecekan pada tabel tersebut apakah sudah ditandai sebagai INDEX atau belum.
- Selidiki JOIN, SUBQUERY yang masih mungkin untuk bisa dilakukan perampingan Query, lakukan uji ulang query yang sudah dirampingkan tersebut.
- Setelah poin 2 dan 3 dicatat dengan baik, jadwalkan maintenance server dengan penutupan sistem beberapa saat, sebaiknya dilakukan malam hari saat sistem sedikit digunakan pengguna aplikasi.
- Lakukan penambahan INDEX hasil poin 2, penambahan INDEX dengan data yang sudah banyak masuk akan memakan waktu yang sangat lama. Triknya adalah Hilangkan semua INDEX terlebih dahulu, baru buat kembali INDEX dari awal, trik ini cukup memangkas waktu.
- Rubah daftar Query berat pada poin 3 menjadi query hasil perampingan yang sudah kita ujicoba.
- Lakukan simulasi penggunaan aplikasi, kemudian jika mulai berasa ringan dan berhasil, maka sistem aplikasi bisa kita lepas lagi dan run di server produksi
Mudah – mudahan bermanfaat
Bermanfaat sekali tipsnya min keren
makasih gan