Pythontr

husonet | Tarih: 21.05.2012

Mysql Query Cache ayarları

Mysql Query Cache ayarları nasıl yapılır formuluzasyonu

query_cache_type

1 cache’i açıyor. 0 yapınca kapanıyor.


query_cache_size

toplam cache boyutu


query_cache_limit

her sorgu sonucu için maksimum boyut



Ayarlama yapabilmemiz için değerlerimize bir bakalım.


SHOW VARIABLES LIKE '%query_cache%';
+------------------------------+----------+
| Variable_name | Value |
+------------------------------+----------+
| have_query_cache | YES |
| query_cache_limit | 1048576 |
| query_cache_min_res_unit | 4096 |
| query_cache_size | 77594624 |
| query_cache_strip_comments | OFF |
| query_cache_type | ON |
| query_cache_wlock_invalidate | OFF |
+------------------------------+----------+
7 rows in set (0.01 sec)

{reklam}

Formuluzasyonumuzda kullanacağımız diğer değerler.



SHOW STATUS LIKE '%qcache%';
+-------------------------+----------+
| Variable_name | Value |
+-------------------------+----------+
| Qcache_free_blocks | 659 |
| Qcache_free_memory | 71657360 |
| Qcache_hits | 9104 |
| Qcache_inserts | 11171 |
| Qcache_lowmem_prunes | 11000 |
| Qcache_not_cached | 638 |
| Qcache_queries_in_cache | 3533 |
| Qcache_total_blocks | 7830 |
+-------------------------+----------+
8 rows in set (0.00 sec)

  • Qcache_free_memory - önbellek kullanılabilir alan;
  • Qcache_hits - önbellekten yerine getirilen isteklerin sayısı;
  • Qcache_inserts - önbellek eklenen isteklerin sayısı;
  • Qcache_not_cached - önbelleğe edilemez isteklerin sayısı;
  • Qcache_lowmem_prunes - Vadesi önbellek bütünlüğü bellek sürümleri sayısı.

Geçerli maksimum kullanılabilir size hesaplaması yapalım.


((query_cache_size-Qcache_free_memory)/query_cache_size)*100

Elimizdeki değerlerle örnek hesaplama yapalım
((77594624-71657360)/77594624)*100
Bu sonuç query_cache_size için %7.6 alan işgalini göstermektedir. Bu değer oldukça makul bir değerdir fakat boyutunu arttırmak için başka nedenler olabilir.


Aşağıdaki gibi önbellek yüzdesi hit oranı hesaplanabilir:



((Qcache_hits/(Qcache_hits+Qcache_inserts+Qcache_not_cached))*100)

((9104/(9104+11171+638))*100)
9104 defa cache üzerinden sonuçlar servis edilmiş olarak görüyoruz. Bu yaptığımız işlemlede isabet oranı %43 olarak gözüküyor sonuç %50 nin altında ise tekrar yaptığımız ayarlamaları gözden geçirmeliyiz. %70 gibi oranlar iyi oranlardır.



Qcache_inserts/ Qcache_lowmem_prunes

11171/11000
11171 kez yeni sonuç kümeleri önbellekte yerleştirildi ve 11000 kere mevcut sonuç kümeleri silindi. Bu oran düştükçe query_cache_size arttırmaya düşünebilirsiniz.



Aşağıdaki formul ile oluşan sonuçtan daha az bellek kullanımı performansı azaltabilir ancak daha fazla bellek kullanımıda daha kötü performansa, hatta çökmelere neden olabilir donanım kaynakları bu noktada önemlidir. Genel kaynak tahsis formül:


memory=key_buffer+(sort_buffer_size+read_buffer_size)*max_connections


Aşağıdaki formuluzasyon ile query_cache_min_res_unit değerini belirleyebilirsiniz.


(query_cache_size – Qcache_free_memory) / Qcache_queries_in_cache


Qcache_hit isabet oranı sql olarak hesaplanması


SELECT (SELECT VARIABLE_VALUE           FROM INFORMATION_SCHEMA.GLOBAL_STATUS          WHERE VARIABLE_NAME = 'QCACHE_HITS')      / (SELECT SUM(VARIABLE_VALUE)           FROM INFORMATION_SCHEMA.GLOBAL_STATUS          WHERE VARIABLE_NAME IN ('QCACHE_HITS', 'QCACHE_INSERTS', 'QCACHE_NOT_CACHED'))      * 100 AS QCACHE_HIT_RATIO;
+--------------------+
| QCACHE_HIT_RATIO |
+--------------------+
| 50.609381401065136 |
+--------------------+
1 row in set (0.00 sec)


Ayrıca Mysql Report kullanarak değerleri görebilirsiniz


mysqlreport --user root --password password | less

Not:Bu çıktıda önemli olan Qcache_lowmem_prunes burası hızlı büyüyorsa Cache ayarlarımıza göz atmamız lazım. Çünkü buradaki değerler Cache memory'den dönmeyen query sonuçları gösterir. query_cache_size ayarı gözden geçirilmelidir.