8.10.3.4 查询缓存状态和维护
Note
从 MySQL 5.7.20 开始,查询缓存已弃用,并在 MySQL 8.0 中删除。
要检查您的 MySQL 服务器中是否存在查询缓存,请使用以下语句:
mysql> SHOW VARIABLES LIKE 'have_query_cache';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| have_query_cache | YES |
+------------------+-------+
您可以对查询缓存进行碎片整理,以通过冲洗查询缓存语句更好地利用其内存。该语句不会从缓存中删除任何查询。
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可能指示查询缓存内存碎片。在冲洗查询缓存之后,仅剩余一个空闲块。
每个缓存的查询至少需要两个块(一个用于查询文本,一个或多个用于查询结果)。同样,查询使用的每个 table 都需要一个块。但是,如果两个或多个查询使用同一张 table,则只需要分配一个 table 块。
Qcache_lowmem_prunes status 变量提供的信息可以帮助您调整查询缓存的大小。它计算从缓存中删除的查询数,以释放内存以缓存新查询。查询缓存使用最近最少使用(LRU)策略来决定从缓存中删除哪些查询。调整信息在第 8.10.3.3 节“查询缓存配置”中给出。