Fast Query Cache adalah mesin cache native PolarDB yang meningkatkan queries per second (QPS) untuk workload read-heavy. Mesin ini menyimpan set hasil dan melayani kueri berulang langsung dari memori—tanpa perlu melakukan parsing ulang, optimasi ulang, atau eksekusi ulang SQL.
Cara kerja
Saat sebuah kueri dijalankan, Fast Query Cache menyimpan set hasilnya. Jika kueri yang sama dijalankan kembali sebelum data dasarnya berubah, hasil yang tersimpan dalam cache langsung dikembalikan. Cache ini secara otomatis dibatalkan ketika data dimodifikasi.
Fast Query Cache mengatasi tiga keterbatasan utama query cache native MySQL:
| Keterbatasan | Cara Fast Query Cache mengatasinya |
|---|---|
| Bottleneck konkurensi: Query cache native MySQL menggunakan global lock yang membuat akses menjadi serial di bawah beban konkurensi tinggi, sehingga performa semakin menurun seiring peningkatan jumlah core CPU. | Fast Query Cache menggantikan global lock dengan mekanisme sinkronisasi tanpa lock, memungkinkan beberapa core CPU menangani kueri secara paralel tanpa kontensi. |
| Reklamasi memori yang buruk: Query cache native MySQL mengalokasikan blok memori tetap di awal dan tidak dapat mereklamasinya secara efisien, sehingga memori tidak termanfaatkan optimal. | Fast Query Cache menggunakan alokasi memori dinamis untuk segera mereklamasi entri cache yang tidak valid, menjaga penggunaan memori tetap ringkas dan fleksibel. |
| Penurunan performa pada rasio hit rendah: Query cache native MySQL menambahkan overhead yang justru memperlambat kueri ketika rasio hit cache rendah. | Fast Query Cache memantau rasio hit cache secara real time dan menyesuaikan kebijakan caching-nya secara dinamis untuk menjaga performa stabil meskipun tingkat hit turun atau workload mencampurkan operasi baca dan tulis. |
Query cache native MySQL telah dihapus di MySQL 8.0. Fast Query Cache adalah penggantinya yang dibangun khusus untuk PolarDB.
Versi yang didukung
Fast Query Cache tersedia pada versi revisi PolarDB for MySQL berikut:
| Versi PolarDB | Versi revisi minimum |
|---|---|
| PolarDB for MySQL 8.0 | 8.0.1.1.5 |
| PolarDB for MySQL 5.7 | 5.7.1.0.15 |
| PolarDB for MySQL 5.6 | 5.6.1.0.29 |
Untuk memeriksa versi revisi kluster Anda, lihat Query the engine version.
Kapan menggunakan fast query cache
Fast Query Cache memberikan manfaat paling besar ketika:
Workload Anda read-heavy — jumlah operasi baca jauh lebih banyak daripada tulis.
Kueri sering diulang, sehingga rasio hit cache tetap tinggi (di atas ~60%).
Jumlah besar permintaan baca konkuren mendapat manfaat dari pelayanan berbasis memori.
Hindari mengaktifkan Fast Query Cache, atau atur ke mode DEMAND, ketika:
Throughput tulis tinggi atau data sering berubah. Mengaktifkan cache dalam skenario ini dapat mengurangi QPS sekitar 2%.
Hanya sedikit kueri yang diulang, sehingga rasio hit cache tetap rendah.
Aktifkan fast query cache
Setiap spesifikasi kluster PolarDB mencakup kapasitas memori yang telah dialokasikan untuk Fast Query Cache. Untuk mengaktifkan fitur ini, atur parameter yang sesuai dalam konfigurasi kluster atau node Anda. Untuk petunjuknya, lihat Specify cluster and node parameters.
| Versi PolarDB | Parameter | Nilai yang harus diatur |
|---|---|---|
| PolarDB for MySQL 8.0 | loose_query_cache_type | ON |
| PolarDB for MySQL 5.6 atau 5.7 | query_cache_type | 1 |
Kelola fast query cache
Kontrol perilaku caching dengan loose_query_cache_type
Gunakan loose_query_cache_type untuk mengontrol apakah Fast Query Cache selalu aktif, opsional, atau dinonaktifkan. Atur parameter ini di tingkat kluster, atau timpa di tingkat session untuk workload tertentu.
| Nilai | Perilaku |
|---|---|
OFF (default) | Fast query cache dinonaktifkan. |
ON | Fast query cache aktif untuk semua kueri. Tambahkan SQL_NO_CACHE pada kueri untuk mengecualikannya dari caching. |
DEMAND | Fast query cache tidak aktif secara default. Tambahkan SQL_CACHE pada kueri agar disimpan dalam cache. |
Pilih mode yang sesuai dengan workload Anda:
Throughput tulis tinggi atau pembaruan data sering — gunakan
OFFuntuk menghindari overhead caching.Banyak kueri lambat yang diulang atau rasio hit cache tinggi — gunakan
ONuntuk memaksimalkan peningkatan QPS.Workload campuran di mana hanya beberapa kueri yang mendapat manfaat — gunakan
DEMAND, lalu tambahkanSQL_CACHEpada kueri yang sering diulang:
SELECT SQL_CACHE id, name FROM customer;Kontrol masa berlaku entri cache dengan query_cache_lease_time
Fast Query Cache mereklamasi memori secara dinamis. Jika set hasil yang tersimpan dalam cache tidak dirujuk selama durasi yang ditentukan oleh query_cache_lease_time (dalam detik), entri cache tersebut dilepas dan memorinya direklamasi.
Nilai default-nya adalah 3600 detik (1 jam).
Tolok ukur performa
Tolok ukur berikut menunjukkan dampak QPS dari mengaktifkan Fast Query Cache (PolarDB-QC) dibandingkan menonaktifkannya (QC-OFF).
Lingkungan pengujian:
| Parameter | Nilai |
|---|---|
| Kluster | PolarDB for MySQL 8.0 Cluster Edition, 8 core, memori 64 GB |
| Memori cache | 4 GB |
| Tool pengujian | Sysbench |
| Data pengujian | 25 tabel × 40.000 baris; 25 tabel × 400.000 baris |
| Kasus uji | oltp_read_only, oltp_point_select, oltp_read_write dengan rand-type = special atau uniform |
Semua hasil didasarkan hanya pada node primary.
Rangkuman hasil:
| Skenario | Rasio hit cache | Perubahan QPS |
|---|---|---|
| Rasio hit tinggi (Kasus 1, 3, 4, 5, 7) | 63%–99% | +53% hingga +106% |
| Rasio hit rendah (Kasus 2, 6) | Rendah | -3% atau kurang |
| Trafik baca-tulis campuran | — | -2% atau kurang |
Kasus 7 (oltp_point_select special, 400.000 baris) mencapai rasio hit cache 99% dan menunjukkan peningkatan QPS terbesar.
Kasus uji dan grafik:
Kasus 1: 25 tabel × 40.000 baris, rand-type = special, oltp_read_only

Kasus 2: 25 tabel × 40.000 baris, rand-type = uniform, oltp_read_only

Kasus 3: 25 tabel × 40.000 baris, rand-type = special, oltp_point_select

Kasus 4: 25 tabel × 40.000 baris, rand-type = uniform, oltp_point_select

Kasus 5: 25 tabel × 400.000 baris, rand-type = special, oltp_read_only

Kasus 6: 25 tabel × 400.000 baris, rand-type = uniform, oltp_read_only

Kasus 7: 25 tabel × 400.000 baris, rand-type = special, oltp_point_select

Kasus 8: 25 tabel × 400.000 baris, rand-type = uniform, oltp_point_select

Kasus 9: 25 tabel × 400.000 baris, rand-type = special, oltp_read_write

Kompatibilitas
Fast Query Cache kompatibel dengan fitur konsistensi global (mode kinerja tinggi). Namun, jika Fast Query Cache dan konsistensi global (mode kinerja tinggi) diaktifkan secara bersamaan serta optimasi MTT untuk konsistensi global (mode kinerja tinggi) juga diaktifkan, maka optimasi MTT menjadi tidak aktif.
Untuk detail tentang konsistensi global (mode kinerja tinggi), lihat Overview.