A variável do sistema query_cache_type precisa ser definida como não-zero também, porque a presença do cache não significa que ele possa ser usado.
Verifiquei se o cache de consulta está ativado
mysql> SHOW VARIABLES LIKE 'have_query_cache';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| have_query_cache | YES |
+------------------+-------+
1 row in set (0.00 sec)
Mas parece que não está sendo usado
mysql> SHOW STATUS LIKE 'Qcache%';
+-------------------------+----------+
| Variable_name | Value |
+-------------------------+----------+
| Qcache_free_blocks | 1 |
| Qcache_free_memory | 16759648 |
| Qcache_hits | 0 |
| Qcache_inserts | 0 |
| Qcache_lowmem_prunes | 0 |
| Qcache_not_cached | 21555882 |
| Qcache_queries_in_cache | 0 |
| Qcache_total_blocks | 1 |
+-------------------------+----------+
8 rows in set (0.00 sec)
Qualquer motivo?
A variável do sistema query_cache_type precisa ser definida como não-zero também, porque a presença do cache não significa que ele possa ser usado.
Por favor, esteja ciente de que nem todas as consultas são armazenáveis em cache.
Por exemplo, se uma consulta contiver funções como NOW (), ela não será armazenada em cache. Por favor, encontre a descrição detalhada de quais consultas não podem ser armazenadas em cache: link
Você também deve verificar em qual posição você escreveu suas configurações no arquivo de configuração.
Meu problema é que coloquei minhas configurações de qchace no final do arquivo. Embora as configurações tenham sido refletidas com a execução de mysql> SHOW STATUS LIKE 'Qcache%';
, nenhuma consulta foi armazenada em cache.
Após colocar as configurações em uma posição diferente no arquivo e reiniciar o servidor mysql, ele estava funcionando.
Aqui você pode ver minha configuração para o MySQL 5.6:
[mysqld]
bind-address=*
#skip-networking
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
query_cache_type = 1
query_cache_size =256M
thread_concurrency=2
sort_buffer_size=25M
key_buffer=128M
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Recommended in standard MySQL setup
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
Houve um bug do MySQL 5.6 , corrigido em 5.6.9: " if the db name (or table name) has a '-' (minus), it does not work
", apenas no InnoDB.