要检查您的 MySQL 服务器中是否存在查询缓存,请使用以下语句:
mysql> SHOW VARIABLES LIKE 'have_query_cache';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| have_query_cache | YES |
+------------------+-------+
您可以对查询缓存进行碎片整理,以更好地利用FLUSH QUERY
CACHE
语句的内存。该语句不会从缓存中删除任何查询。
该RESET QUERY CACHE
语句从查询缓存中删除所有查询结果。该
FLUSH TABLES
声明也这样做。
要监视查询缓存性能,请使用
SHOW STATUS
查看缓存状态变量:
mysql> SHOW STATUS LIKE 'Qcache%';
+-------------------------+--------+
| Variable_name | Value |
+-------------------------+--------+
| Qcache_free_blocks | 36 |
| Qcache_free_memory | 138488 |
| Qcache_hits | 79570 |
| Qcache_inserts | 27087 |
| Qcache_lowmem_prunes | 3114 |
| Qcache_not_cached | 22989 |
| Qcache_queries_in_cache | 415 |
| Qcache_total_blocks | 912 |
+-------------------------+--------+
第 5.1.9 节“服务器状态变量” 中给出了这些变量中的每一个的描述 。此处描述了它们的一些用途。
查询总数SELECT
由以下公式给出:
Com_select
+ Qcache_hits
+ queries with errors found by parser
该Com_select
值由以下公式给出:
Qcache_inserts
+ Qcache_not_cached
+ queries with errors found during the column-privileges check
查询缓存使用可变长度块,因此
Qcache_total_blocks
可能
Qcache_free_blocks
指示查询缓存内存碎片。之后
FLUSH QUERY CACHE
,只剩下一个空闲块。
每个缓存查询至少需要两个块(一个用于查询文本,一个或多个用于查询结果)。此外,查询使用的每个表都需要一个块。但是,如果两个或多个查询使用同一张表,则只需要分配一个表块。
状态变量提供的信息
Qcache_lowmem_prunes
可以帮助您调整查询缓存大小。它计算已从缓存中删除的查询数,以释放内存来缓存新查询。查询缓存使用最近最少使用 (LRU) 策略来决定从缓存中删除哪些查询。调整信息在
第 8.10.3.3 节,“查询缓存配置”中给出。