Optimasi MySQL dengan MySQL Query Cache
Optimasi MySQL dengan MySQL Query Cache. Pada kesempatan ini kami ingin membagi pengalaman kami dalam meng-optimasi query MySQL di GuestPro Cloud PMS. Latar belakang permasalahan yang dihadapi oleh GuestPro adalah bagaimana caranya mempercepat loading calendar chart dan dashboard yang sering diakses oleh client. Awalnya kami sempat berfikir untuk memasukkan query untuk calendar chart dan dashboard ke redis cache, namun coba – coba searching solusi lain dan ternyata MySQL memiliki fitur cache sendiri yaitu MySQL Query Cache. Akhirnya pilihan jatuh untuk menggunakan solusi ini. WOWnya akses calendar chart dan dashboard GuestPro Cloud PMS bisa 2-4x lebih cepat.
Introduction
Apa itu MySQL Query Cache? MySQL Query Cache merupakan fitur cache yang dimiliki oleh MySQL yang dapat digunakan untuk mempercepat proses query. Bahasa gampangnya fitur ini akan menyimpan query SELECT beserta hasil query kedalam cache.
Cara Kerja MySQL Query Cache
Sebelum menggunakan fitur ini, ada baiknya kita mengetahui cara kerja dari fitur ini. MySQL query cache akan menyimpan statement select beserta hasil querynya kedalam cache memory. Jika data/table dari query tersebut tidak ada perubahan, ketika ada query yang sama masuk, secara otomatis mysql akan mengembalikan hasil dari cache tersebut. ketika table dari query cache ter-update oleh statement insert/update/delete maka cache query tersebut akan di flush oleh mysql.
Yang menarik dari fitur ini adalah, ketika kita memiliki query yang sering diakses oleh user dan frekuensi perubahan datanya cukup rendah. fitur ini sangat membantu karena hasil querynya langsung dikembalikan dari cache tanpa harus melewati parsing dan fetching dari disk. sangat membantu untuk meningkatkan performa aplikasi.
Hasil dari optimasi ini sangat berpengaruh dari infrastruktur penunjang dari database anda, tentunya besar dari RAM sangat berpengaruh. tenang, anda bisa mengatur besar memory yang digunakan oleh query cache sehingga fitur ini tidak akan membuat server anda mengalami memory overhead.
Cara Setup MySQL Query Cache
Setelah mengerti cara kerja Query Cache, yuk kita coba config fitur ini. cara untuk mengaktifkan fitur query cache ini sangat mudah. sebelumnya kita perlu cek apakah MySQL kita support fitur ini dengan command berikut :
1 2 3 4 5 6 7 |
mysql> SHOW VARIABLES LIKE 'have_query_cache'; +------------------+-------+ | Variable_name | Value | +------------------+-------+ | have_query_cache | YES | +------------------+-------+ 1 row in set (0.00 sec) |
Jika valuenya ‘YES’ Selamat anda bisa menggunakan fitur ini, kita akan menambahkan setingan kedalam config mysql kita, silahkan buka config mysql anda, biasanya ada di direktory ‘/etc/mysql/mysql.conf.d/mysqld.cnf’ jika menggunakan ubuntu, dan tambahkan line berikut :
1 2 3 |
# CACHE # query_cache_size = 256000 #256MB cache size query_cache_type = 1 #set query cache ON |
Setelah itu restart MySQL untuk melihat perubahannya. untuk melihat apakah perubahan yang kita lakukan sudah berjalan, silahkan masukkan command berikut ke mysql :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
mysql> SHOW VARIABLES LIKE 'query_cache_type'; +------------------+-------+ | Variable_name | Value | +------------------+-------+ | query_cache_type | ON | +------------------+-------+ 1 row in set (0.01 sec) mysql> SHOW VARIABLES LIKE 'query_cache_size'; +------------------+--------+ | Variable_name | Value | +------------------+--------+ | query_cache_size | 256000 | +------------------+--------+ 1 row in set (0.00 sec) |
Jika Value query_cache_type sudah ON dan cache size sudah sesuai dengan yang kita masukkan tadi, Selamat… Query Cache anda sudah aktif. silahkan coba untuk menjalankan query select dan lihat perbedaannya :-).
Untuk memonitor performa dari Query Cache anda bisa menggunakan command berikut :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
mysql> SHOW STATUS LIKE "qcache%"; +-------------------------+--------+ | Variable_name | Value | +-------------------------+--------+ | Qcache_free_blocks | 17 | | Qcache_free_memory | 43808 | | Qcache_hits | 231874 | | Qcache_inserts | 251288 | | Qcache_lowmem_prunes | 145221 | | Qcache_not_cached | 449675 | | Qcache_queries_in_cache | 50 | | Qcache_total_blocks | 154 | +-------------------------+--------+ 8 rows in set (0.00 sec) |
Cukup mudah bukan?
Hasil Optimasi MySQL Query Cache
Wow… sangat memuaskan. hanya dengan mengaktifkan fitur ini kecepatan query ngebut hingga 30x lipat. berikut salah satu query yang cukup berat kami jalankan dan hasilnya :
1 2 3 4 5 6 7 |
Select tanpa cache /* Affected rows: 0 Found rows: 300 Warnings: 0 Duration for 1 query: 3.110 sec. */ Select dengan cache /* Affected rows: 0 Found rows: 300 Warnings: 0 Duration for 1 query: 0.125 sec. */ |
Kesimpulan
Kadang mencari solusi yang kita anggap sangat susah ternyata sudah ada solusinya yang sangat simple. terbukti dengan Optimasi MySQL dengan MySQL Query Cache akses calendar chart dan dashboard GuestPro Cloud PMS bisa 2-4x lebih cepat.
Next :
- Optimasi Reporting dengan Query Reporting ke Read Replica
Referensi :
Recommended Posts
Data Center Tier Classification System
May 18, 2021
Pendaftaran Magang GuestPro dan Dicloud Indonesia
November 23, 2019
Acara ITCC 2019 Universitas Udayana
October 31, 2019