Sorgu önbelleği, SELECT deyimlerinin sonuç kümelerini bellekte saklar; böylece aynı sorgular ayrıştırma ve çalıştırma aşamalarını tamamen atlayarak sonucu doğrudan önbellekten döndürür. Bu yaklaşım CPU kullanımını azaltır, IOPS değerlerini düşürür ve verilerin sabit olduğu, okuma ağırlıklı ve yazma işlemlerinin az olduğu iş yüklerinde sorgu yanıt sürelerini kısaltır. Yüksek yazma hacmine sahip iş yükleri veya çeşitli sorgu kalıpları için önbellek geçersiz kılma ek yükü genel aktarım hızını azaltabilir; bu nedenle üretim ortamında etkinleştirmeden önce gerçek iş yükünüzle test etmeniz önerilir.
Sorgu önbelleğinin ne zaman kullanılacağı
Sorgu önbelleği, aşağıdaki koşulların tümü geçerli olduğunda en iyi performansı sunar:
Tablo verileri nadiren değişir veya statiktir.
Aynı SELECT deyimi tekrar tekrar çalıştırılır.
Sorgu sonuç kümeleri 1 MB'ın altındadır.
Sorgu önbelleği her zaman yararlı değildir. Sık tablo yazma işlemi içeren veya çeşitli sorgular barındıran iş yüklerinde, önbelleğin geçersiz kılınması ve yeniden doldurulmasıyla oluşan ek yük genel aktarım hızını düşürebilir. Üretim ortamında etkinleştirmeden önce gerçek iş yükünüzle test edin.
Çalışma mantığı
ApsaraDB RDS for MySQL, istemciden alınan her SELECT deyimi için bir karma değeri hesaplar.
Karma değeri önbellekteki bir girişle eşleşirse sonuç anında döndürülür; sorgu hiçbir zaman ayrıştırılmaz veya çalıştırılmaz.
Eşleşme bulunamazsa sorgu normal şekilde çalıştırılır ve karma değeri ile sonuç önbelleğe kaydedilir.
Herhangi bir tabloda değişiklik olduğunda, o tabloya referans veren tüm önbelleğe alınmış sorgular anında geçersiz kılınır ve önbellekten kaldırılır.
Sınırlamalar
Aşağıdaki sorgular önbelleğe alınmaz:
Yalnızca harf büyüklüğü, boşluk, veritabanı bağlamı, protokol sürümü veya karakter kümesi açısından farklılık gösteren sorgular ayrı sorgular olarak kabul edilir ve ayrı ayrı önbelleğe alınır.
Alt sorgu sonuç kümeleri — yalnızca dıştaki sorgunun nihai sonuç kümesi önbelleğe alınır.
Depolanan bir işlev, depolanan yordam, tetikleyici veya olay içinde yürütülen sorgular.
Şu deterministik olmayan işlevlerden herhangi birini çağıran sorgular:
now(),curdate(),last_insert_id()veyarand().mysql,information_schemaveyaperformance_schemaveritabanındaki tablolara referans veren sorgular.Geçici tablolara referans veren sorgular.
Uyarı üreten sorgular.
SELECT … LOCK IN SHARE MODE,SELECT … FOR UPDATEveyaSELECT * FROM … WHERE AUTOINCREMENT_COL IS NULLiçeren sorgular.Kullanıcı tanımlı bir değişkene referans veren sorgular.
SQL_NO_CACHEipucunu kullanan sorgular.
Sorgu önbelleğini yapılandırma
ApsaraDB RDS konsolu nda aşağıdaki üç parametreyi ayarlayın:
| Parametre | Varsayılan | Açıklama |
|---|---|---|
query_cache_type |
— | Önbelleğin aktif olup olmadığını kontrol eder. 0 = kapalı; 1 = açık (SELECT SQL_NO_CACHE kullanan sorgular hariç); 2 = yalnızca talep üzerine (yalnızca SELECT SQL_CACHE sorguları önbelleğe alınır). |
query_cache_size |
3 MB | Önbelleğe ayrılan toplam bellek miktarı (bayt cinsinden). 1024'ün katı olmalıdır. |
query_cache_limit |
1 MB | Tek bir önbelleğe alınmış sorgu için maksimum sonuç kümesi boyutu (bayt cinsinden). Bu değerin üzerindeki sonuçlar önbelleğe alınmaz. |
Sol gezinme bölmesinde Parameters seçeneğine tıklayın. Parametre listesinde query_cache_type parametresini bulun ve değerini hedef değere değiştirin. Değişiklik yalnızca örnek yeniden başlatıldıktan sonra etkili olur. Gerektiğinde query_cache_limit (geçerli değerler: 1 ila 1048576) ve query_cache_size (geçerli değerler: 0 ila 104857600) gibi ilgili parametreleri de değiştirebilirsiniz. Bir parametrenin açıklamasını görüntülemek için parametre yanındaki bilgi simgesine tıklayın.
query_cache_type değerini değiştirmek, RDS örneğinin otomatik olarak yeniden başlatılmasına neden olur. query_cache_size değerini 1024'ün katı olmayan bir değere ayarlarsanız konsol The specified parameter is invalid hatasını döndürür ve hata kodu InvalidParameters.Malformed olur.
Önbelleği etkinleştirme ve devre dışı bırakma
query_cache_size > 0 ve query_cache_type değeri 1 veya 2 olduğunda önbellek etkin durumdadır.
query_cache_size = 0 veya query_cache_type = 0 olduğunda önbellek devre dışı bırakılmış olur.
Öneriler
query_cache_sizedeğerini çok büyük ayarlamayın. Aşırı büyük bir önbellek, örneğin diğer bellek yapılarından bellek çalmanın yanı sıra önbellek aramalarının ek yükünü de artırır. Örnek türünüze göre 10 MB ile 100 MB arasında bir değerle başlayın, ardından gözlemlenen kullanıma göre ayarlayın.Sorgu önbelleğini açıp kapatmak için
query_cache_typeyerinequery_cache_sizedeğerini ayarlayın; çünküquery_cache_typeüzerindeki değişiklikler yalnızca örnek yeniden başlatıldıktan sonra etkili olur.Sorgu önbelleği yalnızca belirli iş yüklerine fayda sağlar. Performans düşüşü veya diğer sorunları önlemek için etkinleştirmeden önce gerçek iş yükünüzle kapsamlı testler yapın.
Önbellek performansını izleme ve doğrulama
Önbellek istatistiklerini kontrol etme
Önbellek kullanımını kontrol etmek için aşağıdaki deyimi çalıştırın:
SHOW GLOBAL STATUS LIKE 'Qcache%';
Çıktı şu durum değişkenlerini içerir:
| Değişken | Açıklama |
|---|---|
Qcache_hits |
Önbellekten sunulan sorgu sayısı |
Qcache_inserts |
Önbelleğe eklenen sorgu sayısı |
Qcache_not_cached |
Önbelleğe alınamayan sorgu sayısı |
Qcache_queries_in_cache |
Şu anda önbellekte bulunan sorgu sayısı |
Örnek çıktı:
mysql>show global status like 'Qca%';
+-------------------------+------------+
| Variable_name | Value |
+-------------------------+------------+
| Qcache_free_blocks | 2763 |
| Qcache_free_memory | 10115160 |
| Qcache_hits | 365589713 |
| Qcache_inserts | 612280336 |
| Qcache_lowmem_prunes | 1257159 |
| Qcache_not_cached | 1805250864 |
| Qcache_queries_in_cache | 9318 |
| Qcache_total_blocks | 22409 |
+-------------------------+------------+
ApsaraDB RDS konsolunu kullanarak doğrulama
Sol gezinme bölmesinde Autonomy Service (formerly CloudDBA) > Performance Trends seçeneğini belirleyin. MySQL CPU/Memory Utilization grafiğini görüntüleyin ve hem CPU kullanımının hem de bellek kullanımının normal aralıkta kaldığını doğrulayın.