可以使用下面的語句檢查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%';
+-------------------------+--------+
|變量名 |值 |
+-------------------------+--------+
| 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.3.4節,“服務器狀態變量”。這里描述它們的一些應用。
SELECT查詢的總數量等價于:
Com_select
+ Qcache_hits
+ queries with errors found by parser
Com_select的值等價于:
Qcache_inserts
+ Qcache_not_cached
+ queries with errors found during columns/rights check
查詢緩存使用長度可變塊,因此Qcache_total_blocks和Qcache_free_blocks可以顯示查詢緩存內存碎片。執行FLUSH QUERY CACHE后,只保留一個空閑塊。
每個緩存查詢至少需要兩個塊(一個塊用于查詢文本,一個或多個塊用于查詢結果)。并且,每一個查詢使用的每個表需要一個塊。但是,如果兩個或多個查詢使用相同的表,僅需要分配一個塊。
Qcache_lowmem_prunes狀態變量提供的信息能夠幫助你你調整查詢緩存的大小。它計算為了緩存新的查詢而從查詢緩沖區中移出到自由內存中的查詢的數目。查詢緩沖區使用最近最少使用(LRU)策略來確定哪些查詢從緩沖區中移出。調整信息在5.13.3節,“查詢高速緩沖配置”中給出。