Performance Tuning Guidelines
Udah lama sekali ga ngeblog yah, ga kerasa udah beberapa bulan ga ada entry. Mungkin karena ramadan ini badan jadi terasa lebih seger, atau karena ramadhan bisa pulang tenggo dan ga terlalu cape sesampainya di rumah? yang manapun ga masalah deh, asal ngeblognya jalan lagi.
Barusan saya posting di JUG tentang performance tuning guidlines, nah karena pentingnya topik ini saya pikir lebih baik diletakkan di blog untuk pengingat kalau suatu saat perlu.
Blog entry ini akan saya terus edit untuk agar lebih lengkap dan ada contoh-contoh kongkritnya, sekarang cukup kerangka umumnya dulu yah.
Optimisasi itu biasanya cukup yang makro, guidlines ini saya urutkan berdasarkan kepentingan sebagai berikut:
1. Buat index untuk semua query agar tidak ada query yang full scan.
Pertama harus dikumpulkan semua query yang sering dieksekusi dan
profile mana aja yang slow query. kemudian gunakan query explain untuk
menjelaskan berapa cost setiap query. baru tentukan index yang harus
dibuat agar query menjadi lebih cepat.
2. Minimisasi disk seek (pembacaan disk).
Kalau punya duit ganti ke hardisk yang jarum dengan hardisk SSD deh database servernya, wush wush wush kenceng abis. Kalau ga bisa ganti SSD ya bikin cache di level aplikasi agar hit ke database minumum, kalau perlu load semua data ke memory dan gunakan database
sebagai backup
) .
Kalau ada upload dan file processing gunakan IO yang ada buffernya (buffered writer / reader).
3. Resource allocation optimization.
gunakan paging untuk menampilkan table / grid, gunakan connection pooling, close semua I/O setelah tidak digunakan, gunakan singleton untuk kasus yang memungkinkan.
4. Asynchronous/background process
Untuk proses yang tidak berhubungan dengan user experience, gunakan @Async (Spring dan EJB punya asynchronous method call) atau buat scheduler framework yang dijalankan dari JVM yang berbeda. Proses-proses yang berat dan melibatkan pengambilan data dari database yang cukup besar seperti End-Of-Day process, report generation, file upload dan audit trail/log, semua
bisa dilakukan di background atau async.
4. Tambah resource / lakukan clustering
5. Tambah Tier aplikasi.
Sekarang kan yang lazim itu ada 2 tier kalau aplikasi web : App server + Database. Nah ini bisa ditambah lagi satu tier : web server + app server + Database.
Semua static content seperti image, javascript dan applet ditaruh di web server ini, kemudian optimisasi http header agar gak semua static content diload setiap kali page dihit.
Gunakan tools yslow dari yahoo di firefox untuk memeriksa skor setiap page, apakah cepet loadnya apa nggak. Ada performance guidlines gimana agar content lebih cepet diload oleh
browser, cek di http://developer.yahoo.com/yslow/help/
6. Pindah ke platform 64 bit
7. Micro optimization
lihat kode di dalam loop, minimalisasi import, cek string concatenation, cari algoritma yang lebih efisien, dst dst. Rata-rata micro optimization bisa dibaca di buku Effective Java. Kalau
aplikasi database sih sepertinya ga sampe ke sini deh optimisasinya. Kecuali aplikasi yang memerlukan latensi / response time yang cueeepet seperti trading atau forex baru deh optimisasinya bener-bener teliti. Karena beda satu atau 2 detik untuk setiap proses bisa mempengaruhi kinerja aplikasi secara keseluruhan, karena biasanya sih proses yang
dihandle bisa ribuan per detik, artinya kalau satu proses bisa dihemat 1 detik, penghematan secara keseluruhan bisa signifikan.
Nah semoga bermanfaat bagi temen-temen yang sedang mengalami response time aplikasi yang lambat atau malah sering kena outofmemoryexception
.
Komentar Terbaru