Manfaat dan catatan penggunaan
Manfaat:
- Mengurangi pemanfaatan CPU.
- Mengurangi IOPS dalam skenario tertentu.
- Mengurangi waktu respons kueri dan meningkatkan throughput sistem.
Catatan penggunaan:
- Tabel yang jarang dimodifikasi atau berisi data statis.
- Kueri yang sangat repetitif (pernyataan SELECT).
- Set hasil berukuran kurang dari 1 MB.
Cara kerja
ApsaraDB RDS for MySQL menghitung nilai hash untuk setiap kueri SELECT dari klien. Nilai hash tersebut kemudian digunakan untuk mencari hasil yang sesuai di dalam query cache.
Jika ditemukan kecocokan (hit), set hasil langsung dikembalikan ke klien tanpa perlu mengurai dan mengeksekusi kueri tersebut.
Jika tidak ditemukan kecocokan, kueri dieksekusi, dan nilai hash beserta set hasilnya disimpan di query cache untuk penggunaan di masa mendatang.
Jika data pada tabel mana pun yang terlibat dalam suatu kueri berubah, ApsaraDB RDS for MySQL membatalkan validitas dan menghapus semua set hasil yang terkait dengan tabel tersebut dari cache.
Batasan
- Kueri harus benar-benar identik agar menghasilkan hit. Perbedaan apa pun dalam kapitalisasi huruf, spasi, database saat ini, versi protokol, atau set karakter dianggap sebagai kueri yang berbeda.
- Set hasil subkueri tidak di-cache. Hanya set hasil akhir dari outer query yang di-cache.
- Kueri yang berada di dalam stored function, stored procedure, trigger, atau event tidak di-cache.
- Kueri yang mengandung fungsi non-deterministik, seperti now(), curdate(), last_insert_id(), dan rand(), tidak di-cache karena hasilnya berubah pada setiap eksekusi.
- Kueri terhadap tabel di database sistem mysql, information_schema, atau performance_schema tidak di-cache.
- Kueri yang menggunakan temporary tables tidak di-cache.
- Kueri yang menghasilkan warning tidak di-cache.
- Kueri yang mengandung SELECT ... LOCK IN SHARE MODE, SELECT ... FOR UPDATE, atau SELECT * FROM ... WHERE autoincrement_col IS NULL tidak di-cache.
- Kueri yang menggunakan user-defined variables tidak di-cache.
- Kueri yang menyertakan hint SQL_NO_CACHE tidak di-cache.
Pengaturan query cache
- Parameter settings
Konfigurasikan parameter berikut di Konsol.
query_cache_limit(Satuan: byte): Ukuran maksimum set hasil kueri tunggal yang dapat disimpan di query cache. Nilai default adalah 1 MB. Set hasil yang lebih besar dari batas ini tidak di-cache.query_cache_size(Satuan: byte): Ukuran total query cache. Nilai default adalah 3 MB.query_cache_type: Menentukan apakah query cache diaktifkan.Nilai 0 menonaktifkan query cache.
Nilai 1 mengaktifkan query cache untuk semua kueri kecuali yang diawali dengan
SELECT SQL_NO_CACHE.Nilai 2 hanya mengaktifkan query cache untuk kueri yang diawali dengan
SELECT SQL_CACHE.
Penting- Modifikasi parameter
query_cache_typememerlukan restart instans secara otomatis. - Nilai parameter
query_cache_sizeharus merupakan kelipatan 1024. Jika tidak, pesan "the specified parameter is invalid" akan dikembalikan.
- Enabled
Query cache diaktifkan ketika parameter
query_cache_sizebernilai lebih dari 0 dan parameterquery_cache_typediatur ke 1 atau 2. - Disabled
Untuk menonaktifkan query cache, atur parameter
query_cache_sizeke 0 atau atur parameterquery_cache_typeke 0. - Recommendations
- Jangan mengatur parameter
query_cache_sizeke nilai yang terlalu besar. Cache yang besar tidak hanya mengonsumsi sumber daya memori yang seharusnya dapat digunakan oleh komponen instans lain, tetapi juga meningkatkan overhead pencarian cache. Tetapkan nilai awal antara 10 MB hingga 100 MB berdasarkan spesifikasi instans Anda, lalu sesuaikan berdasarkan penggunaan waktu proses. - Aktifkan atau nonaktifkan query cache dengan mengatur nilai parameter
query_cache_size. Modifikasi parameterquery_cache_typememerlukan restart instans. - Query cache hanya cocok untuk kasus penggunaan tertentu. Lakukan pengujian menyeluruh sebelum mengaktifkannya untuk menghindari penurunan performa atau masalah lainnya.
- Jangan mengatur parameter
Verifikasi efek
- Console

- SQL command
Jalankan perintah berikut untuk memeriksa status query cache.
show global status like 'Qca%';Qcache_hits: Jumlah hit query cache.
Qcache_inserts: Jumlah kueri yang dimasukkan ke cache.
Qcache_not_cached: Jumlah kueri yang tidak dapat di-cache.
Qcache_queries_in_cache: Jumlah kueri yang saat ini ada di cache.
