Beranda Internet dan Web Kloxo-MR Perdebatan soal Mysql Query Cache

Perdebatan soal Mysql Query Cache

0
Perdebatan soal Mysql Query Cache

Mysql punya satu fasilitas jadul yang selalu diperdebatkan sampai hari ini, yaitu Query cache. Mengingat fungsi dasar dari Query cache ini adalah, untuk mencache atau menyimpan sementara hasil query agar apabila perintah query yang sama dilakukan secara berulang2, maka hasil yang di kirimkan bukan dari proses panjang query, tapi langsung dari data cache yang tersimpan sebelumnya.

Fitur yang bagus kalau mengingat ada kemungkinan long running query yang secara normal tidak akan selesai misal dalam 20detik. Dengan adanya query cache, bisa di berikan datanya dari cache hanya dalam hitungan nol koma detik saja.

Pangkal perdebatan sebenarnya bukan karena fungsi dari query cache itu sendiri, tapi cara kerja query cache lah yang membakar kisruh di dunia server.

Pasalnya terletak pada mekanisme pengunci alias lock mechanisme. Sebelum data bisa di minta dari cache, mysql harus melakukan penguncian dulu terhadap data cache, sebelum bisa mengambil data cache.

Screenshot_58

Fungsi kunci ini untuk menjaga konsistensi data, jangan sampai ada data cache yang ternyata invalid, yang hasilnya tidak konsisten karena ada proses2 update data sebelumnya.

Kondisi ini diperparah lagi dengan kebutuhan untuk melakukan flush data/penghapusan data cache setiap ada perubahan/update database.

Jadi bayangkan bila ada 1000 request (ini normal untuk 1 blog/domain saja), yang semuanya ingin mengambil data cache, tapi harus menunggu antrian query cache lock. Oh iya, beruntung kalo datanya emang sudah ada dalam cache, kalau tidak bagaimana? php dong, buang2 waktu, buang resource. Terus lagi, baru di cache 1 detik, detik selanjutnya udah di flush lagi gara2 ada update data?

Mungkin literatur detail soal query cache dan lock mechanisme bisa anda baca2 di situs mastah lainnya.

Dari saya sendiri, ada beberapa solusi yang mungkin bisa saya berikan.

1. Matikan query cache, caranya: setting di bagian my.cnf (di centos biasanya berada di /etc/my.cnf), setting saja:

query-cache-type  = 0
query_cache_size = 0

2. Gunakan memcached/apcu sebagai pengganti query cache, memcached/apcu lebih efisien dalam mengelola cache di banding mysql.

3. Tetap gunakan query cache, karena blog anda adalah wordpress, dimana proses query select jauh lebih mendominasi dibanding proses query insert/update. Default timeout dan mutex contention 50ms MariaDB sudah sangat membantu menghindari kisruh antrian query. Tidak ada salahnya mencoba variasi cache limit dan cache size seperti berikut (tergantung memory server anda) :

query_cache_type = 1
query_cache_size = 256M
query_cache_limit = 2M
query_cache_strip_comments =1

*Khusus untuk query_cache_strip_comments hanya akan berfungsi bila anda menggunakan MariaDB (bukan MySQL)

*Tidak disarankan juga untuk memasang angka Gigabyte di size dan limit, walaupun server anda punya banyak free memory. Karena hal ini membebani server untuk mengelola cache, yang semakin rumit dengan semakin besarnya angka cache size yang anda pasang.

Ada 2 tools yang bisa anda gunakan untuk memantau efesiensi mysql/mariadb yang biasa saya pakai:

  1. Mysqltuner ( yum install mysqltuner -y )
  2. Tuning Primer (https://launchpad.net/mysql-tuning-primer)

Monggo di otak atik. Semoga beruntung ^_^

 

Salam Hangat,

Ebo – M.Februriyanto

TINGGALKAN KOMENTAR

Silakan masukkan komentar anda!
Silakan masukkan nama Anda di sini

Situs ini menggunakan Akismet untuk mengurangi spam. Pelajari bagaimana data komentar Anda diproses.