我检查了查询缓存是否已启用
mysql> SHOW VARIABLES LIKE 'have_query_cache';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| have_query_cache | YES |
+------------------+-------+
1 row in set (0.00 sec)
但似乎它没有被使用
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)
任何原因?
系统变量query_cache_type也需要设置为非零,因为缓存的存在并不意味着它可以使用。
另请注意,并非所有查询都是可缓存的。
例如,如果一个查询包含像 NOW() 这样的函数,它就不会被缓存。哪些查询无法缓存的详细说明请查看:https ://dev.mysql.com/doc/refman/5.7/en/query-cache-operation.html
您还应该检查在配置文件中写入设置的位置。
我的问题是我将 qchace 设置放在文件末尾。尽管设置是通过执行反映的,
mysql> SHOW STATUS LIKE 'Qcache%';
但实际上没有缓存任何查询。将设置放在文件中的不同位置并重新启动它正在工作的mysql服务器后。
在这里你可以看到我对 MySQL 5.6 的配置:
有一个MySQL 5.6 错误,在 5.6.9 中修复:“
if the db name (or table name) has a '-' (minus), it does not work
”,仅在 InnoDB 上。