MySQL Query Cache Ayarları

Daha çok okuma ve sorguya yönelik işlem yapan yazılımlarda kullanılan veritabanının aynı sorgulara vereceği cevapları kullanım sıklığına veya farklı algoritmalara göre saklayıp istemcilere tekrar sunması query cache olarak adlandırılır. Bir projede gerektiği için kullandığım ve sonrasında burada paylaşma gereği duyduğum mysql için query cache ayarları aşağıdaki gibidir. Bellek ve limit değerleri tamamen sisteme bağlı olup ancak çalışan bir sistem ve ayrılmış bir donanım üzerinde zamanla ayarlama ve testler yapılarak en çok performansı sağlayabilecek değerlere ulaşılabilir.

MySQL komut satırına giriş yaptıktan sonra query cache ayarları kontrol edilir.

mysql# show variables like 'have_query_cache';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| have_query_cache | YES   |
+------------------+-------+
1 row in set (0.03 sec)

şeklinde have_query_cache=YES olarak set edilmiş olmalıdır.
Geçerli query cache parametrelerini görmek için:

mysql# show variables like 'query%';
+------------------------------+----------+
| Variable_name                | Value    |
+------------------------------+----------+
| query_alloc_block_size       | 8192     |
| query_cache_limit            | 1048576  |
| query_cache_min_res_unit     | 4096     |
| query_cache_size             | 16777216 |
| query_cache_type             | ON       |
| query_cache_wlock_invalidate | OFF      |
| query_prealloc_size          | 8192     |
+------------------------------+----------+
7 rows in set (0.00 sec)

query_cache_size: byte türünden sistemde saklamak istediğiniz cache miktarı.
query_cache_type=ON/OFF olarak kapalı ya da açık olduğu bilgisi. 1 ya da 0 olarak da set edilebilir.
query_cache_limit= Cache için saklanacak bir sorgunun olabileceği maksimum büyüklük miktarı (byte)

Query cache 80MB kullanmak istediğimizde 10*1024*1024 = 83886080
mysql# SET GLOBAL query_cache_size = 83886080;
Query OK, 0 rows affected (0.06 sec)

mysql# show variables like 'query%';
+------------------------------+----------+
| Variable_name                | Value    |
+------------------------------+----------+
| query_alloc_block_size       | 8192     |
| query_cache_limit            | 1048576  |
| query_cache_min_res_unit     | 4096     |
| query_cache_size             | 83886080 |
| query_cache_type             | ON       |
| query_cache_wlock_invalidate | OFF      |
| query_prealloc_size          | 8192     |
+------------------------------+----------+
7 rows in set (0.01 sec)

mysql# SET GLOBAL query_cache_limit = 1048576;


Query OK, 0 rows affected (0.00 sec)

mysql# SET GLOBAL query_cache_type = 1;

Query OK, 0 rows affected (0.00 sec)

Bu ayarları reboot sonrası da saklamak ve etkinleştirmek için /etc/my.cnf dosyasına

query_cache_size = 268435456
query_cache_type=1
query_cache_limit=1048576

şeklinde ekleme ya da uncomment edilmiş satırları aktifleştirip değiştirmek yeterlidir.


Written on September 11, 2013