Fast Query Cache, okuma yoğunluklu iş yüklerinde saniye başına sorgu sayısını (QPS) artıran PolarDB yerel bir önbellek motorudur. Sonuç kümelerini önbelleğe alır ve tekrarlanan sorguları SQL'i yeniden ayrıştırmadan, yeniden optimize etmeden veya yeniden çalıştırmadan doğrudan bellekten sunar.
Nasıl çalışır
Bir sorgu çalıştırıldığında Fast Query Cache sonuç kümesini depolar. Altta yatan veriler değişmeden aynı sorgu tekrar çalıştırılırsa önbelleğe alınmış sonuç anında döndürülür. Veriler değiştirildiğinde önbellek otomatik olarak geçersiz kılınır.
Fast Query Cache, MySQL yerel sorgu önbelleğinin üç temel sınırlamasını çözer:
| Sınırlama | Fast Query Cache bu sorunu nasıl çözer |
|---|---|
| Eşzamanlılık darboğazı: MySQL yerel sorgu önbelleği, yüksek eşzamanlılık altında erişimi seri hale getiren genel bir kilit kullanır; bu durum CPU çekirdek sayısı arttıkça performansın daha da düşmesine neden olur. | Fast Query Cache, genel kilidi kilit içermeyen bir senkronizasyon mekanizmasıyla değiştirerek birden çok CPU çekirdeğinin çekişme olmadan sorguları paralel olarak işlemesine olanak tanır. |
| Zayıf bellek geri kazanımı: MySQL yerel sorgu önbelleği sabit bir bellek bloğu önceden ayırır ve bunu verimli bir şekilde geri kazanamaz; bu durum belleğin yetersiz kullanılmasına yol açar. | Fast Query Cache, geçersiz önbellek girdilerini anında geri kazanmak için dinamik bellek tahsisi kullanır; böylece bellek kullanımı hafif ve esnek kalır. |
| Düşük isabet oranlarında performans düşüşü: MySQL yerel sorgu önbelleği, önbellek isabet oranı düşük olduğunda sorguları yavaşlatabilen ek yük getirir. | Fast Query Cache, önbellek isabet oranlarını gerçek zamanlı olarak izler ve önbellekleme ilkelerini dinamik olarak ayarlayarak isabet oranları düştüğünde veya iş yükü okuma ve yazma işlemlerini karıştırdığında bile kararlı performansı korur. |
MySQL yerel sorgu önbelleği MySQL 8.0'da kaldırılmıştır. Fast Query Cache, özellikle PolarDB için oluşturulmuş bir alternatiftir.
Desteklenen sürümler
Fast Query Cache aşağıdaki PolarDB for MySQL revizyon sürümlerinde kullanılabilir:
| PolarDB sürümü | Minimum revizyon sürümü |
|---|---|
| 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 |
Kümenizin revizyon sürümünü kontrol etmek için bkz. Motor sürümünü sorgulama.
Fast Query Cache ne zaman kullanılır
Fast Query Cache aşağıdaki durumlarda en fazla faydayı sağlar:
İş yükünüz okuma ağırlıklıdır — yazma işlemlerine kıyasla okuma işlemleri önemli ölçüde daha fazladır.
Sorgular sık sık tekrarlanır ve önbellek isabet oranı yüksek (%60'ın üzerinde) kalır.
Büyük sayıda eşzamanlı okuma isteği bellekten sunumdan yararlanır.
Aşağıdaki durumlarda Fast Query Cache'i etkinleştirmekten kaçının veya DEMAND moduna ayarlayın:
Yazma aktarım hızı yüksekse veya veriler sık sık değişiyorsa. Bu senaryoda önbelleği etkinleştirmek QPS'yi yaklaşık %2 oranında azaltabilir.
Tekrarlanan sorgu sayısı azsa ve önbellek isabet oranı düşük kalıyorsa.
Fast Query Cache'i etkinleştirme
Her PolarDB kümesi teknik özelliği, Fast Query Cache için önceden ayrılmış bir bellek kapasitesi içerir. Özelliği etkinleştirmek için küme veya düğüm yapılandırmanızda ilgili parametreyi ayarlayın. Talimatlar için bkz. Küme ve düğüm parametrelerini belirtme.
| PolarDB sürümü | Parametre | Ayarlanacak değer |
|---|---|---|
| PolarDB for MySQL 8.0 | loose_query_cache_type |
ON |
| PolarDB for MySQL 5.6 veya 5.7 | query_cache_type |
1 |
Fast Query Cache yönetimi
loose_query_cache_type ile önbellekleme davranışını kontrol etme
Fast Query Cache'in her zaman aktif mi, isteğe bağlı mı yoksa devre dışı mı olacağını kontrol etmek için loose_query_cache_type parametresini kullanın. Bu parametreyi küme düzeyinde ayarlayın veya belirli iş yükleri için oturum düzeyinde geçersiz kılın.
| Değer | Davranış |
|---|---|
OFF (varsayılan) |
Fast Query Cache devre dışı bırakılır. |
ON |
Fast Query Cache tüm sorgular için aktiftir. Bir sorguyu önbellekleme dışında tutmak için sorguya SQL_NO_CACHE ekleyin. |
DEMAND |
Fast Query Cache varsayılan olarak pasiftir. Bir sorguyu önbelleğe almak için sorguya SQL_CACHE ekleyin. |
İş yükünüze uygun modu seçin:
Yüksek yazma aktarım hızı veya sık veri güncellemeleri — önbellekleme ek yükünden kaçınmak için
OFFkullanın.Çok sayıda tekrarlanan yavaş sorgu veya yüksek önbellek isabet oranı — QPS kazancını en üst düzeye çıkarmak için
ONkullanın.Yalnızca bazı sorguların fayda sağladığı karışık iş yükü —
DEMANDkullanın ve ardından sık tekrarlanan sorgularaSQL_CACHEekleyin:
SELECT SQL_CACHE id, name FROM customer;
query_cache_lease_time ile önbellek girdisi ömrünü kontrol etme
Fast Query Cache belleği dinamik olarak geri kazanır. Önbelleğe alınmış bir sonuç kümesi query_cache_lease_time (saniye cinsinden) tarafından belirtilen süre boyunca referans edilmezse önbellek girdisi serbest bırakılır ve belleği geri kazanılır.
Varsayılan değer 3600 saniyedir (1 saat).
Performans kıyaslamaları
Aşağıdaki kıyaslama, Fast Query Cache'in (PolarDB-QC) etkinleştirilmesinin devre dışı bırakılmasına (QC-OFF) kıyasla QPS üzerindeki etkisini göstermektedir.
Test ortamı:
| Parametre | Değer |
|---|---|
| Küme | PolarDB for MySQL 8.0 Cluster Edition, 8 çekirdek, 64 GB bellek |
| Önbellek belleği | 4 GB |
| Test aracı | Sysbench |
| Test verileri | 25 tablo × 40.000 satır; 25 tablo × 400.000 satır |
| Test senaryoları | oltp_read_only, oltp_point_select, oltp_read_write ile rand-type = special veya uniform |
Tüm sonuçlar yalnızca birincil düğüme dayanmaktadır.
Sonuç özeti:
| Senaryo | Önbellek isabet oranı | QPS değişimi |
|---|---|---|
| Yüksek isabet oranı (Senaryolar 1, 3, 4, 5, 7) | %63–%99 | +%53 ila +%106 |
| Düşük isabet oranı (Senaryolar 2, 6) | Düşük | -%3 veya daha az |
| Karışık okuma-yazma trafiği | — | -%2 veya daha az |
Senaryo 7 (özel oltp_point_select, 400.000 satır) %99 önbellek isabet oranına ulaşır ve en büyük QPS iyileştirmesini gösterir.
Test senaryoları ve grafikler:
Senaryo 1: 25 tablo × 40.000 satır, rand-type = special, oltp_read_only

Senaryo 2: 25 tablo × 40.000 satır, rand-type = uniform, oltp_read_only

Senaryo 3: 25 tablo × 40.000 satır, rand-type = special, oltp_point_select

Senaryo 4: 25 tablo × 40.000 satır, rand-type = uniform, oltp_point_select

Senaryo 5: 25 tablo × 400.000 satır, rand-type = special, oltp_read_only

Senaryo 6: 25 tablo × 400.000 satır, rand-type = uniform, oltp_read_only

Senaryo 7: 25 tablo × 400.000 satır, rand-type = special, oltp_point_select

Senaryo 8: 25 tablo × 400.000 satır, rand-type = uniform, oltp_point_select

Senaryo 9: 25 tablo × 400.000 satır, rand-type = special, oltp_read_write

Uyumluluk
Fast Query Cache, global tutarlılık (yüksek performans modu) özelliğiyle uyumludur. Ancak hem Fast Query Cache hem de global tutarlılık (yüksek performans modu) aynı anda etkinse ve global tutarlılık (yüksek performans modu) için MTT optimizasyonu da etkinleştirilmişse MTT optimizasyonu pasif hale gelir.
Global tutarlılık (yüksek performans modu) hakkında ayrıntılar için bkz. Genel Bakış.