全部产品
Search
文档中心

ApsaraDB RDS:Cache Kueri Cepat

更新时间:Nov 10, 2025

Cache Kueri Cepat adalah fitur cache kueri yang dikembangkan oleh Alibaba Cloud berdasarkan cache kueri asli MySQL. Fitur ini dirancang dengan pendekatan dan mekanisme implementasi baru untuk meningkatkan performa kueri database Anda.

Prasyarat

Informasi latar belakang

Cache kueri adalah mekanisme yang meningkatkan performa dengan menyimpan set hasil kueri dalam cache. Prinsip utamanya meliputi:

  • Menyimpan set hasil: Untuk kueri yang memenuhi syarat, hasilnya langsung disimpan dalam cache, menghindari proses analisis SQL, optimisasi, dan eksekusi berulang, sehingga mengurangi beban CPU.

  • Tujuan performa: Dengan mengurangi konsumsi sumber daya komputasi, waktu respons untuk kueri sederhana frekuensi tinggi dapat ditingkatkan secara signifikan.

Kekurangan Query Cache MySQL Asli

Query Cache MySQL asli menunjukkan performa buruk dalam skenario konkurensi tinggi karena cacat desain, termasuk masalah berikut:

  • Pemrosesan konkurensi yang buruk. Jika beberapa core CPU dikonfigurasikan, jumlah kueri konkuren yang lebih besar dapat mengakibatkan penurunan performa.

  • Manajemen memori yang buruk, dengan pemanfaatan memori rendah dan pengembalian tertunda, menyebabkan pemborosan memori.

  • Jika rasio hit cache rendah, performa kueri tidak meningkat dan bahkan bisa menurun secara signifikan.

Karena masalah-masalah ini, Query Cache MySQL asli telah sepenuhnya dihapus di MySQL 8.0 dan secara default dinonaktifkan di versi sebelumnya.

Peningkatan inovatif dalam Fast Query Cache Alibaba Cloud

Tim database Alibaba Cloud merancang ulang dan mengimplementasikan Fast Query Cache untuk mengatasi kekurangan Query Cache asli, dengan optimisasi inti berikut:

Bidang perbaikan

Langkah-langkah spesifik

Optimisasi performa konkurensi

Menghilangkan kunci global, mengadopsi desain tanpa kunci dan mekanisme sharding, memungkinkan pemrosesan paralel multi-core dan menghilangkan kontes kunci.

Optimisasi manajemen memori

Memperkenalkan alokasi memori dinamis, mengalokasikan memori sesuai kebutuhan, dikombinasikan dengan kebijakan pengembalian cerdas untuk mengurangi fragmentasi dan meningkatkan pemanfaatan.

Penyesuaian kebijakan cache dinamis

Pemantauan real-time terhadap rasio hit cache dan skenario bisnis, menyesuaikan kebijakan cache secara dinamis (seperti strategi eviksi, periode validitas cache) untuk mencegah cache tidak valid menempati sumber daya.

Kompatibilitas operasi tulis

Melalui mekanisme invalidasi inkremental, hanya sebagian cache kueri yang terpengaruh yang diinvalidasi, mengurangi dampak operasi tulis pada cache.

Fast Query Cache dapat digunakan dalam berbagai skenario bisnis untuk meningkatkan performa kueri. Namun, query cache MySQL asli tidak memberikan dukungan yang sama.

Aktifkan fast query cache

Anda dapat mengaktifkan Fast Query Cache dengan mengonfigurasi parameter query_cache_type dan query_cache_size di Konsol ApsaraDB RDS.

Parameter

Deskripsi

query_cache_type

Saklar yang digunakan untuk mengontrol fast query cache. Nilai valid:

  • 0: menonaktifkan fast query cache. Ini adalah nilai default.

  • 1: mengaktifkan fast query cache. Anda dapat menggunakan opsi SQL_NO_CACHE untuk melewati caching untuk pernyataan SQL.

  • 2: menonaktifkan fast query cache. Anda dapat menggunakan opsi SQL_CACHE untuk menyimpan teks dan set hasil dari pernyataan SQL tertentu saja.

query_cache_size

Ukuran ruang memori yang dialokasikan untuk fast query cache. Nilai valid: 0 hingga 10485760000. Nilai harus kelipatan dari 1024. Unit: byte.

Fast Query Cache membutuhkan ruang memori tambahan. Saat mengonfigurasi Fast Query Cache, kami sarankan Anda juga mengonfigurasi ulang parameter innodb_buffer_pool_size:

  1. Atur parameter innodb_buffer_pool_size menjadi 90% dari nilai aslinya. 10% memori yang dikurangi digunakan sebagai ukuran cache kueri yang ditentukan oleh parameter query_cache_size. Misalnya, jika nilai asli parameter innodb_buffer_pool_size adalah {DBInstanceClassMemory*7/10}, atur parameter ini menjadi {DBInstanceClassMemory*63/100}. Untuk informasi lebih lanjut, lihat Ubah ukuran kolam buffer InnoDB.

  2. Atur parameter query_cache_size. Untuk informasi lebih lanjut, lihat Modifikasi parameter instans.

    • Jika Anda dapat memperkirakan ukuran set hasil dengan akurat, Anda dapat mengatur parameter query_cache_size menjadi nilai yang sama dengan 20% dari ukuran set hasil.

    • Jika Anda tidak dapat memperkirakan ukuran set hasil dengan akurat, Anda dapat mengatur parameter query_cache_size menjadi nilai yang sama dengan 10% dari nilai parameter innodb_buffer_pool_size.

    Catatan

    Saat Anda mengubah spesifikasi instans RDS Anda, nilai parameter query_cache_size tidak berubah berdasarkan spesifikasi baru. Setelah perubahan spesifikasi diterapkan, Anda harus segera mengonfigurasi ulang parameter ini.

  3. Atur parameter query_cache_type menjadi 1. Ini memungkinkan Anda mengaktifkan Fast Query Cache. Untuk informasi lebih lanjut, lihat Modifikasi parameter instans.

Perbandingan performa

Bandingkan permintaan per detik (QPS) dengan konfigurasi cache kueri yang berbeda dalam kondisi yang sama di berbagai kasus uji. Konfigurasi cache kueri ini adalah QC-OFF (tidak ada cache kueri yang diaktifkan), MySQL-QC (cache kueri MySQL asli diaktifkan), dan Fast-QC (Fast Query Cache diaktifkan).

  • Lingkungan uji: Instans RDS khusus dengan 4 core CPU dan 8 GB memori.

  • Alat uji: Sysbench.

  • Ukuran data uji: 250 MB (total 25 tabel, 40.000 catatan per tabel).

  • Skenario 1: Semua hit (read-only).

    Skrip oltp_point_select digunakan. Jalankan hanya pernyataan POINT SELECT berdasarkan kunci utama. Selain itu, pastikan Anda mengatur ukuran cache kueri menjadi 512 MB. Ukuran ini lebih besar dari ukuran data uji dan memungkinkan rasio hit cache mencapai 100%. Dalam kasus uji ini, fokus pada berapa banyak QPS meningkat berdasarkan jumlah kueri konkuren.

    Tabel 1. QPS untuk kueri baca dengan rasio hit cache 100%

    Jumlah kueri konkuren

    QC-OFF

    MySQL-QC (Peningkatan QPS dibandingkan QC-OFF)

    Fast-QC (Peningkatan QPS dibandingkan QC-OFF)

    1

    8.093

    8.771 (8,38%)

    9.261 (14,43%)

    8

    62.262

    65.686 (5,50%)

    75.313 (20,96%)

    16

    97.083

    73.027 (-24,78%)

    139.323 (43,51%)

    32

    97.337

    60.567 (-37,78%)

    200.978 (106,48%)

    64

    106.283

    60.216 (-43,34%)

    221.659 (108,56%)

    128

    107.781

    62.844 (-41,69%)

    231.409 (114,70%)

    256

    106.694

    63.832 (-40,17%)

    222.187 (108,25%)

    512

    101.733

    64.866 (-36,24%)

    203.789 (100,32%)

    1.024

    89.548

    62.291 (-30,44%)

    203.542 (127,30%)

    全部命中

    Catatan

    Berdasarkan hasil uji, saat jumlah kueri konkuren meningkat, QPS cache kueri MySQL asli menurun secara signifikan. Namun, QPS Fast Query Cache tidak menurun dan bahkan dapat meningkat hingga 100%.

  • Skenario 2: Tingkat hit tinggi (read-only).

    Skenario uji adalah Sysbench oltp_read_only. Kasus penggunaan mencakup kueri rentang yang mengembalikan beberapa catatan. Saat Query Cache diatur ke 512 MB, memori relatif cukup, dan tingkat hit dapat melebihi 80%. Uji ini berfokus pada peningkatan performa di bawah berbagai beban konkuren.

    Tabel 2. QPS untuk kueri baca dengan rasio hit cache lebih dari 80%

    Jumlah kueri konkuren

    QC-OFF

    MySQL-QC (Peningkatan QPS dibandingkan QC-OFF)

    Fast-QC (Peningkatan QPS dibandingkan QC-OFF)

    1

    5099

    6467 (26,83%)

    7022 (37,71%)

    8

    28782

    28651 (-0,46%)

    45017 (56,41%)

    16

    35333

    31099 (-11,98%)

    66770 (88,97%)

    32

    34864

    27610 (-20,81%)

    67623 (93,96%)

    64

    35503

    27518 (-22,49%)

    75981 (114,01%)

    128

    35744

    27733 (-22,41%)

    80396 (124,92%)

    256

    35685

    27738 (-22,27%)

    80925 (126,78%)

    512

    35308

    27398 (-22,40%)

    79323 (124,66%)

    1024

    34044

    26861 (-22,10%)

    75742 (122,48%)

    高命中率

    Catatan

    Berdasarkan hasil uji, saat jumlah kueri konkuren meningkat, QPS cache kueri MySQL asli menurun secara signifikan. Namun, QPS Fast Query Cache terus meningkat, dan bahkan dapat meningkat lebih dari 100% pada puncaknya.

  • Kasus uji 3: Uji QPS untuk kueri baca dengan rasio hit cache sekitar 10%.

    Skrip oltp_read_only digunakan. Jalankan kueri termasuk kueri rentang yang masing-masing mengembalikan beberapa catatan. Selain itu, pastikan Anda mengatur ukuran cache kueri menjadi 16 MB. Ukuran ini menghasilkan ruang memori yang tidak cukup dan penghapusan sejumlah besar data yang di-cache. Ini memungkinkan rasio hit cache turun menjadi sekitar 10%. Dalam kasus uji ini, fokus pada berapa banyak QPS menurun berdasarkan jumlah kueri konkuren.

    Tabel 3. QPS untuk kueri baca dengan rasio hit cache sekitar 10%

    Jumlah kueri konkuren

    QC-OFF

    MySQL-QC (Peningkatan QPS dibandingkan QC-OFF)

    Fast-QC (Peningkatan QPS dibandingkan QC-OFF)

    1

    5.004

    4.727 (-5,54%)

    5.199 (3,90%)

    8

    28.795

    22.542 (-21,72%)

    28.578 (-0,75%)

    16

    35455

    24.064 (-32,13%)

    35.682 (0,64%)

    32

    34.526

    21.330 (-38,22%)

    35.871 (3,90%)

    64

    35.514

    19.791 (-44,27%)

    36.051 (1,51%)

    128

    35.983

    19.519 (-45,75%)

    36.253 (0,75%)

    256

    35.695

    19.168 (-46,30%)

    36.337 (1,80%)

    512

    35.182

    18.420 (-47,64%)

    35.972 (2,25%)

    1.024

    33.915

    20.168 (-40,53%)

    34.546 (1,86%)

    低命中率

    Catatan

    Berdasarkan hasil uji, QPS cache kueri MySQL asli menurun secara signifikan, dengan kerugian performa mendekati 50% pada sebagian besar kasus. Namun, Fast Query Cache mengoptimalkan skenario dengan rasio hit rendah dan hampir tidak menyebabkan kerugian performa tambahan.

  • Kasus uji 4: Uji QPS untuk kueri baca dan tulis.

    Skrip oltp_read_write digunakan. Jalankan transaksi yang berisi pembaruan ke tabel. Pembaruan sering ini mengakibatkan penghapusan data yang di-cache. Akibatnya, cache kueri yang dikonfigurasikan dianggap tidak valid. Dalam kasus uji ini, fokus pada berapa banyak QPS menurun berdasarkan jumlah kueri konkuren.

    Tabel 4. QPS untuk kueri baca dan tulis

    Jumlah kueri konkuren

    QC-OFF

    Fast-QC (Peningkatan QPS dibandingkan QC-OFF)

    1

    4.152

    4.098 (-1,30%)

    8

    21.359

    21.195 (-0,77%)

    16

    26.020

    25.548 (-1,81%)

    32

    27.595

    26.996 (-2,17%)

    64

    29.229

    28.733 (-1,70%)

    128

    29.265

    28.828 (-1,49%)

    256

    29.911

    29.616 (-0,99%)

    512

    29.148

    28.816 (-1,14%)

    1.024

    29.204

    28.824 (-1,30%)

    读写混合

    Catatan

    Berdasarkan hasil uji, saat jumlah kueri konkuren baca dan tulis meningkat, QPS Fast Query Cache hanya menurun dalam jumlah kecil.

Panduan praktik

Skenario

Fast Query Cache terutama digunakan untuk meningkatkan performa dalam skenario intensif baca. Direkomendasikan untuk lingkungan di mana pembacaan jauh lebih banyak daripada penulisan:

  • Operasi bisnis yang didominasi oleh kueri dengan frekuensi penulisan rendah (seperti halaman detail produk e-commerce, kueri laporan).

  • Menggunakan SQL_CACHE untuk secara eksplisit mengaktifkan caching untuk tabel tertentu (seperti tabel dengan rasio baca-tulis tinggi). Anda juga dapat melihat rasio baca-tulis tingkat tabel melalui tabel TABLE_STATISTICS dan secara eksplisit mengaktifkan Fast Query Cache menggunakan kata kunci SQL_CACHE untuk tabel dengan rasio baca-tulis tinggi. Untuk informasi tentang cara menanyakan tabel TABLE_STATISTICS, lihat Performance Insight.

Tidak direkomendasikan untuk:

  • Skenario intensif penulisan (seperti sistem transaksi frekuensi tinggi): Invalidasi cache yang sering dapat menyebabkan penurunan performa.

  • Skenario yang memerlukan akurasi data real-time tinggi (seperti kutipan pasar saham): Data yang di-cache mungkin tidak konsisten dengan data real-time.

  • Sebelum mengaktifkan secara global, disarankan untuk memeriksa rasio hit InnoDB Buffer Pool (rasio hit = 1 - Innodb_buffer_pool_reads/Innodb_buffer_pool_read_requests). Jika rasio hit kurang dari 80%, mengaktifkan Fast Query Cache tidak direkomendasikan.

Metode penggunaan cache (Query_cache_type)

Parameter query_cache_type mendukung modifikasi tingkat sesi. Pengguna dapat mengonfigurasinya secara fleksibel berdasarkan skenario bisnis aktual. Silakan merujuk pada rekomendasi berikut:

Nilai parameter

Deskripsi

Skenario yang berlaku

0

Nonaktifkan Fast Query Cache secara global

Skenario intensif penulisan atau skenario dengan rasio hit cache sangat rendah

1

Aktifkan secara global, otomatis menyimpan semua kueri yang memenuhi syarat

Skenario intensif baca dengan frekuensi pembaruan data rendah

2

Hanya aktifkan caching untuk kueri dengan kata kunci SQL_CACHE eksplisit

Volume data besar, pola akses tidak stabil, atau skenario yang memerlukan kontrol granular halus

Pengaturan ukuran cache (Query_cache_size)

query_cache_size erat kaitannya dengan kueri SQL. Jika cache berisi kueri yang mengembalikan beberapa catatan, cache mungkin perlu beberapa kali lebih besar dari volume data. Jika kueri SQL tidak termasuk kueri rentang, Anda dapat merujuk pada tes berikut untuk mengevaluasi hubungan antara volume data dan query_cache_size.

  • Lingkungan uji: Instans RDS khusus dengan 4 core CPU dan 8 GB memori (innodb_buffer_pool_size = 6 GB).

  • Alat uji: Sysbench.

  • Ukuran data uji: 10 GB (total 100 tabel, 400.000 catatan per tabel).

Kasus uji: Tentukan ukuran cache yang berbeda menggunakan parameter query_cache_size dan jalankan skrip oltp_point_select untuk setiap ukuran cache. Pastikan 64 thread berjalan bersamaan untuk menanyakan data. Dalam hal ini, data uji mencakup 20% data panas. Dengan cara ini, Anda dapat memperoleh dampak dari ukuran cache yang berbeda (query_cache_size) terhadap QPS. Ukuran set hasil aktual adalah 2,5 GB berdasarkan ukuran data uji.

Tabel 5. QPS dengan ukuran cache yang berbeda

query_cache_size (MB)

QC-OFF

Fast-QC hit ratio

Fast-QC (Peningkatan QPS dibandingkan QC-OFF)

64

98.236

22%

99.440 (1,23%)

128

98.236

45%

114.155 (16,21%)

256

98.236

72%

140.668 (43,19%)

512

98.236

82%

151.260 (53,98%)

1.024

98.236

84%

153.866 (56,63%)

2.048

98.236

87%

159.597 (62,46%)

4.096

98236

92%

169.412 (72,45%)

Performa Fast Query Cache tidak menurun terlepas dari nilai parameter query_cache_size. Secara spesifik, Fast Query Cache memberikan performa yang jauh lebih tinggi daripada Query Cache MySQL asli untuk kueri kunci utama tanpa memandang rasio hit cache. Dalam beberapa keadaan, performa bahkan bisa meningkat lebih dari 90%. Jika rasio hit cache kurang dari 90%, Fast Query Cache memberikan performa yang lebih tinggi daripada Query Cache MySQL asli dan menghemat banyak sumber daya CPU untuk kueri rentang dan kueri yang berisi klausa ORDER BY.