Uma das melhores maneiras de acelerar seu aplicativo da web é habilitar o cache de consulta em seu banco de dados, o cache armazena os resultados consultas SQL em memória para acesso praticamente instantâneo pela próxima página que faz com que o mesmo pedido.
Este método é tão eficaz que você não precise fazer qualquer alteração no seu aplicativo web, você só tem que sacrificar um pouco de memória. Isso é ideal para um aplicativo que faz bastantes consultas no banco de dados, como um blog em WordPress.
Antes de tudo, você deve verificar se sua versão tem suporte a cache de consultas. Para isso abra um terminal, conecte no mysql e digite:
mysql> show variables like ‘have_query_cache’;
+——————+——-+
| Variable_name | Value |
+——————+——-+
| have_query_cache | YES |
+——————+——-+
1 row in set (0.00 sec)
Agora que você ja sabe que tem suporte, habilite o cache com o seguinte comando:
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 | 0 |
| query_cache_type | ON |
| query_cache_wlock_invalidate | OFF |
| query_prealloc_size | 8192 |
+——————————+———+
7 rows in set (0.00 sec)
o que importa aqui e o que significa:
query_cache_size – é o tamanho do cache em bytes. O valor como 0 desativa o cache.
query_cache_type – este valor deve ser ON ou 1 para que o cache de consulta seja habilitado.
query_cache_limit – tamanho máximo de consulta (em bytes) que vai ser armazenada em cache.
Sabendo que o valor é em bytes, então para 8MB calcula-se 1024*1024*8 = 8388608.
Para calcular o tamanho em MegaBytes “preguiçosamente” use:
mysql> select sum(1024*1024*8);
+——————+
| sum(1024*1024*8) |
+——————+
| 8388608 |
+——————+
1 row in set (0.00 sec)
use o seguinte comando para setar os valores para as variáveis:
mysql> SET GLOBAL query_cache_size = 8388608;
Da mesma forma, as outras opções podem ser definidas com a mesma sintaxe:
mysql> SET GLOBAL query_cache_limit = 1048576;
mysql> SET GLOBAL query_cache_type = 1;
Agora você pode verificar se está obtendo acertos de cache (hits) com o comando:
mysql> SHOW STATUS like ‘Qc%’;
+————————-+———+
| Variable_name | Value |
+————————-+———+
| Qcache_free_blocks | 1 |
| Qcache_free_memory | 8378312 |
| Qcache_hits | 290 |
| Qcache_inserts | 1 |
| Qcache_lowmem_prunes | 0 |
| Qcache_not_cached | 1 |
| Qcache_queries_in_cache | 1 |
| Qcache_total_blocks | 4 |
+————————-+———+
8 rows in set (0.00 sec)
Para manter essas configurações quando MySQL for iniciado, adicione essas opções no seu /etc/mysql/my.cnf, o local do arquivo pode mudar dependendo da sua distro.
query_cache_size = 134217728
query_cache_type = 1
query_cache_limit = 1048576
Monitore com o tempo para verificar os resultados.
Abraço.