Bagaimana cara menggunakan cache mysql?

Saat Anda menjalankan kueri SELECT, MySQL "mengingat" kueri dan hasil yang dikembalikannya. Hal ini dilakukan dengan menyimpan set hasil dalam cache khusus (disebut cache kueri) setiap kali kueri SELECT dijalankan. Kemudian, saat Anda meminta kueri yang sama ke server, MySQL akan mengambil hasilnya dari cache alih-alih menjalankan kueri lagi. Seperti yang dapat Anda bayangkan, ini sangat mempercepat proses

Meskipun diaktifkan secara default, Anda harus selalu memverifikasi bahwa caching kueri diaktifkan, yang dapat dilakukan dengan memeriksa variabel server. Contoh berikut mengilustrasikan

mysql> SHOW VARIABLES LIKE '%query_cache%';
6 rows in set (0.00 sec)
  • Variabel pertama, have_query_cache, menunjukkan server telah dikonfigurasi untuk caching kueri saat diinstal (default)
  • Variabel query_cache_size menunjukkan jumlah memori yang dialokasikan untuk cache dalam byte. Jika nilai ini adalah 0, caching kueri akan dinonaktifkan
  • Nilai untuk variabel query_cache_type berkisar dari 0 hingga 2. Nilai 0 atau MATI menunjukkan bahwa caching kueri dinonaktifkan. ON atau 1 berarti caching kueri dihidupkan, dengan pengecualian pernyataan SELECT menggunakan opsi SQL_NO_CACHE. PERMINTAAN atau 2 menyediakan caching kueri sesuai permintaan untuk pernyataan SELECT yang berjalan dengan opsi SQL_CACHE
  • Variabel query_cache_limit menentukan ukuran kumpulan hasil maksimum yang harus di-cache. Kumpulan hasil yang lebih besar dari nilai ini tidak akan di-cache

Anda dapat mengubah salah satu variabel ini menggunakan pernyataan SET GLOBAL atau SET SESSION, seperti yang ditunjukkan

mysql> SET GLOBAL query_cache_size = 16777216;
Query OK, 0 rows affected (0.00 sec)

Untuk melihat sendiri apa pengaruh cache kueri terhadap kinerja, jalankan kueri yang sama dengan dan tanpa caching kueri untuk membandingkan perbedaan kinerja. Ini versinya tanpa menggunakan cache kueri

mysql> SELECT SQL_NO_CACHE r.RouteID, a1.AirportCode, a2.AirportCode,
    -> r.Distance, r.Duration, r.Status FROM route AS r,
    -> airport AS a1, airport AS a2
    -> WHERE r.From LIKE a1.AirportID
    -> AND r.To LIKE a2.AirportID
    -> AND r.RouteID IN
    ->   (SELECT f.RouteID
    ->   FROM flight AS f, flightdep AS fd
    ->   WHERE f.FlightID = fd.FlightID
    ->   AND f.RouteID = r.RouteID
    ->   AND fd.DepTime BETWEEN '00:00' AND '04:00');
2 rows in set (0.21 sec)

Sekarang lakukan kueri yang sama dengan cache

mysql> SELECT SQL_CACHE r.RouteID, a1.AirportCode,
    -> a2.AirportCode, r.Distance, r.Duration, r.Status FROM
    -> route AS r, airport AS a1, airport AS a2
    -> WHERE r.From LIKE a1.AirportID
    -> AND r.To LIKE a2.AirportID
    -> AND r.RouteID IN
    ->   (SELECT f.RouteID
    ->   FROM flight AS f, flightdep AS fd
    ->   WHERE f.FlightID = fd.FlightID
    ->   AND f.RouteID = r.RouteID
    ->   AND fd.DepTime BETWEEN '00:00' AND '04:00');

Peningkatan dramatis dalam kinerja bukanlah hal yang aneh jika caching kueri diaktifkan pada kueri yang sering diajukan

PERINGATAN

Setelah tabel diubah, kueri yang di-cache yang menggunakan tabel ini menjadi tidak valid dan dihapus dari cache. Ini mencegah kueri mengembalikan data yang tidak akurat dari tabel lama. Meskipun ini membuat caching kueri jauh lebih berguna, tabel yang terus berubah tidak akan mendapat manfaat dari caching. Dalam situasi ini, Anda mungkin ingin mempertimbangkan untuk menghapus cache kueri. Ini dapat dilakukan dengan menambahkan opsi SQL_NO_CACHE, seperti yang ditunjukkan sebelumnya, ke pernyataan SELECT

Saat menggunakan memcached untuk meng-cache data MySQL, aplikasi Anda harus mengambil data dari database dan memuat key-value pair yang sesuai ke dalam cache. Kemudian, pencarian selanjutnya dapat dilakukan langsung dari cache

Karena MySQL memiliki mekanisme caching dalam memorinya sendiri untuk data yang diminta, seperti InnoDB dan cache kueri MySQL, cari peluang di luar memuat nilai kolom atau baris individual ke dalam cache. Lebih suka meng-cache nilai komposit, seperti yang diambil dari beberapa tabel melalui kueri gabungan, atau kumpulan hasil yang disusun dari beberapa baris

Batasi informasi dalam cache untuk data yang tidak sensitif, karena tidak diperlukan keamanan untuk mengakses atau memperbarui informasi dalam instance memcache. Siapa saja yang memiliki akses ke mesin memiliki kemampuan untuk membaca, melihat, dan berpotensi memperbarui informasi. Untuk menjaga keamanan data, enkripsi informasi sebelum menyimpannya dalam cache. Untuk membatasi pengguna yang dapat terhubung ke server, nonaktifkan akses jaringan, atau gunakan IPTables atau teknik serupa untuk membatasi akses ke port memcache ke sekumpulan host tertentu

Anda dapat memperkenalkan memcached ke aplikasi yang sudah ada, meskipun caching bukan bagian dari desain aslinya. Dalam banyak bahasa dan lingkungan, perubahan pada aplikasi hanya beberapa baris, pertama mencoba membaca dari cache saat memuat data, kembali ke metode lama jika informasi tidak di-cache, dan memperbarui cache dengan informasi sekali

Urutan umum untuk menggunakan memcached dalam bahasa apapun sebagai solusi caching untuk MySQL adalah sebagai berikut

  1. Minta item dari cache

  2. Jika item ada, gunakan data item

  3. Jika item tidak ada, muat data dari MySQL, dan simpan nilainya ke dalam cache. Ini berarti nilainya tersedia untuk klien berikutnya yang memintanya dari cache

Untuk diagram alir urutan ini, lihat

Gambar 16. 6 Bagan Alir Aplikasi memcache biasa

Bagaimana cara menggunakan cache mysql?


Mengadaptasi Praktik Terbaik Database ke Aplikasi memcache

Cara paling langsung untuk meng-cache data MySQL adalah dengan menggunakan tabel 2 kolom, di mana kolom pertama adalah a. Karena persyaratan keunikan untuk kunci memcache, pastikan skema database Anda menggunakan kunci utama dan

Jika Anda menggabungkan beberapa nilai kolom ke dalam satu nilai item memcache, pilih tipe data untuk memudahkan penguraian kembali nilai ke dalam komponennya, misalnya dengan menggunakan karakter pemisah antara nilai numerik

Kueri yang paling mudah memetakan pencarian memcache adalah kueri dengan klausa WHERE tunggal, menggunakan operator = atau IN. Untuk klausa WHERE yang rumit, atau yang menggunakan operator seperti <, >, BETWEEN, atau LIKE, memcache tidak menyediakan cara sederhana atau efisien untuk memindai atau memfilter kunci atau nilai terkait, jadi biasanya Anda melakukan operasi tersebut sebagai kueri SQL di

Bagaimana cara menggunakan cache di MySQL?

MySQL menentukan kueri untuk di-cache dengan memeriksa variabel query_cache_type . Menyetel nilai ini ke 0 atau MATI mencegah caching atau pengambilan kueri yang disimpan dalam cache. Anda juga dapat menyetelnya ke 1 untuk mengaktifkan caching untuk semua kueri kecuali yang dimulai dengan pernyataan SELECT SQL_NO_CACHE.

Bagaimana cara mengatur cache kueri MySQL?

Untuk menyetel ukuran cache kueri, setel variabel sistem query_cache_size . Menyetelnya ke 0 akan menonaktifkan cache kueri, seperti halnya menyetel query_cache_type=0. Secara default, cache kueri dinonaktifkan. Ini dicapai dengan menggunakan ukuran default 1M, dengan default untuk query_cache_type dari 0.

Bagaimana cara menggunakan cache kueri?

Anda dapat membuat Kueri Tembolok langsung dari Penjelajah. Untuk meng-cache kueri, lanjutkan dan simpan kueri terlebih dahulu. Gambar 1. Tekan tombol untuk "Simpan" kueri. Kemudian, untuk meng-cache kueri terpenting Anda, pilih kotak centang "Aktifkan Caching" dan masukkan kecepatan penyegaran

Bagaimana cara memeriksa penggunaan cache di MySQL?

Untuk memastikan MySQL Query Cache diaktifkan gunakan. mysql> TAMPILKAN VARIABEL SEPERTI 'have_query_cache'; Untuk memantau statistik cache kueri, gunakan. mysql> TAMPILKAN STATUS SEPERTI 'Qcache%';