mysql中的SQL_CACHE(性能更优化)

mysql中的sql_cache是个容易忽视的地方,要
使用的话,必须先设置query_cache_size,
以及设置query_cache_type ,其中
query_cache_type 这个可以被设置为 (只能是数字) 选项  含义 
0  (OFF, 不缓存或重新得到结果) 
1  (ON, 缓存所有的结果,除了 SELECT SQL_NO_CACHE ... 查询) 
2  (DEMAND, 仅缓存 SELECT SQL_CACHE ... 查询) 

所以设置为1时,可以如下这样查询的话,会用到缓存
SELECT SQL_CACHE something FROM table

强制不使用缓存
SELECT SQL_NO_CACHE id,field FROM table WHERE 1

使用 FLUSH QUERY CACHE 命令,你可以整理查询缓存,以更好的利用它的内存。这个命令不会从缓存中移除任何查询。FLUSH TABLES 会转储清除查询缓存。

RESET QUERY CACHE 使命从查询缓存中移除所有的查询结果。

你可以检查查询缓存在你的 MySQL 是否被引进:

mysql> SHOW VARIABLES LIKE 'have_query_cache';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| have_query_cache | YES   |
+------------------+-------+
1 row in set (0.00 sec)

在 SHOW STATUS 中,你可以监视查询缓存的性能:

变量  含义 
Qcache_queries_in_cache  在缓存中已注册的查询数目 
Qcache_inserts  被加入到缓存中的查询数目 
Qcache_hits  缓存采样数数目 
Qcache_lowmem_prunes  因为缺少内存而被从缓存中删除的查询数目 
Qcache_not_cached  没有被缓存的查询数目 (不能被缓存的,或由于 QUERY_CACHE_TYPE) 
Qcache_free_memory  查询缓存的空闲内存总数 
Qcache_free_blocks  查询缓存中的空闲内存块的数目 
Qcache_total_blocks  查询缓存中的块的总数目 

Total number of queries = Qcache_inserts + Qcache_hits + Qcache_not_cached.

查询缓存使用变长的块,因而 Qcache_total_blocks 和 Qcache_free_blocks 可能显示查询缓存的碎片。在 FLUSH QUERY CACHE 之后,只有剩余一个单独的(大的)空闲块。

注意:每个查询最小需要两个块(一个用于存储查询文本,另一个或多个用于存储查询结果)。同样的,每个被一个查询使用的表需要一个块,但是,如果有两个或更多的查询使用同一张表,仅仅只需要分配一个块就行了。

你可以使用状态变量 Qcache_lowmem_prunes 来谐调查询缓存尺寸。它计数被从缓存中移除的查询,该查询的移除是为了释放内存,以缓存新建的查询。查询缓存使用一个 least recently used (LRU) 策略来判断从缓存中移除哪个查询。

posted on 2017-04-20 17:14  梦魇一生  阅读(671)  评论(0编辑  收藏  举报