我们发现 MariaDB 设置中存在问题,其中作为准备好的语句执行的查询没有被缓存,但是通过 mysql 命令(即文本协议)在本地执行的查询确实被缓存了。
我读过了MySQL 查询缓存已启用但未被使用但它并没有真正的帮助。
我读过一些 2007 年及更早的过时博客文章,其中提到由于尚未实现,所以根本不会缓存准备好的语句。但是,MariaDB 和 MySQL 的文档都提到它应该可以工作。
这是我的配置:
MariaDB [(none)]> SHOW VARIABLES LIKE 'have_query_cache';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| have_query_cache | YES |
+------------------+-------+
MariaDB [(none)]> SHOW STATUS LIKE 'Qcache%';
+-------------------------+-----------+
| Variable_name | Value |
+-------------------------+-----------+
| Qcache_free_blocks | 1 |
| Qcache_free_memory | 268417416 |
| Qcache_hits | 0 |
| Qcache_inserts | 6 |
| Qcache_lowmem_prunes | 0 |
| Qcache_not_cached | 3797 |
| Qcache_queries_in_cache | 0 |
| Qcache_total_blocks | 1 |
+-------------------------+-----------+
MariaDB [(none)]> SHOW VARIABLES LIKE 'query_cache%';
+------------------------------+-----------+
| Variable_name | Value |
+------------------------------+-----------+
| query_cache_limit | 262144 |
| query_cache_min_res_unit | 4096 |
| query_cache_size | 268435456 |
| query_cache_strip_comments | OFF |
| query_cache_type | ON |
| query_cache_wlock_invalidate | OFF |
+------------------------------+-----------+
此外,这是迄今为止执行的查询数,远高于 Qcache_not_cached。我认为,如果缓存使用率为 0,它们至少是相当的。
MariaDB [(none)]> SHOW STATUS LIKE '%queries%';
+-------------------------+---------+
| Variable_name | Value |
+-------------------------+---------+
| Empty_queries | 0 |
| Qcache_queries_in_cache | 0 |
| Queries | 2306776 |
| Slow_queries | 0 |
+-------------------------+---------+
我已经在 my.cnf 中的 [mysqld] 部分开始处打开了缓存,但这也没有太大帮助。
还有其他想法吗?