MySQL查询缓存设置 提高MySQL查询性能

查看mysql缓存相关参数

SHOW VARIABLES LIKE '%query_cache%';
have_query_cache    YES             
query_cache_limit   1048576         
query_cache_min_res_unit    4096    
query_cache_size    0               
query_cache_type    ON
query_cache_wlock_invalidate    OFF

query_cache_min_res_unit 这个变量从 4.1 被引进。 查询的结果 (已被传送到客户端的数据) 在结果检索期间被存储到查询缓存中。因而,数据不会以一个大块地处理。查询缓存在需要时分配块用于处理这个数据,所以当一个块被填充后,一个新的块被分配。甚为内存分配操作是昂贵的,查询缓存以最小的尺寸 query_cache_min_res_unit 分配块。当一个查询执行完成,最后的结果块被修整到实际数据的尺寸大小,以便未使用的内存被释放。

query_cache_min_res_unit 的缺省值为 4 KB,在大多数据情况下已够用了。
如果你有许多查询返回一个较小的结果,缺省的块尺寸可能会引起内存碎片 (显示为一个很大数量的空闲块(Qcache_free_blocks),这将引起查询缓存不得不因缺乏内存(Qcache_lowmem_prunes)而从缓存中删除查询)。在这种情况下,你应该减少 query_cache_min_res_unit。
如果你的主要查询返回的是大的结果集(查看 Qcache_total_blocks 和 Qcache_queries_in_cache),你可以通过增加 query_cache_min_res_unit 来增加性能。然而,要小心不要将它设得太大。

query_cache_size 为了存储老的查询结果而分配的内存数量 (以字节指定) 。如果设置它为 0 ,查询缓冲将被禁止(缺省值为 0 )。

query_cache_type 这个可以被设置为 (只能是数字) 选项 含义
0 (OFF, 不缓存或重新得到结果)
1 (ON, 缓存所有的结果,除了 SELECT SQL_NO_CACHE … 查询)
2 (DEMAND, 仅缓存 SELECT SQL_CACHE … 查询)
在一个线程(连接)内,查询缓存的行为可以被改变。句法如下所示:
QUERY_CACHE_TYPE = OFF | ON | DEMAND QUERY_CACHE_TYPE = 0 | 1 | 2
选项 含义
0 or OFF 不缓存或重新得到结果
1 or ON 缓存所有的结果,除了 SELECT SQL_NO_CACHE … 查询
2 or DEMAND 仅缓存 SELECT SQL_CACHE … 查询

可见本机query_cache_size为0,mysql并未开启缓存,设置一下query_cache_size

set global query_cache_size = 10737418240;

设置缓存为10G

查看mysql缓存的状态

show status like '%Qcache%';
Qcache_free_blocks  4
Qcache_free_memory  10736798216
Qcache_hits 1998
Qcache_inserts  682
Qcache_lowmem_prunes    0
Qcache_not_cached   7
Qcache_queries_in_cache 248
Qcache_total_blocks 558

MySQL 提供了一系列的 Global Status 来记录 Query Cache 的当前状态,具体如下:
Qcache_free_blocks:目前还处于空闲状态的 Query Cache 中内存 Block 数目
Qcache_free_memory:目前还处于空闲状态的 Query Cache 内存总量
Qcache_hits:Query Cache 命中次数
Qcache_inserts:向 Query Cache 中插入新的 Query Cache 的次数,也就是没有命中的次数
Qcache_lowmem_prunes:当 Query Cache 内存容量不够,需要从中删除老的 Query Cache 以给新的 Cache 对象使用的次数
Qcache_not_cached:没有被 Cache 的 SQL 数,包括无法被 Cache 的 SQL 以及由于 query_cache_type 设置的不会被 Cache 的 SQL
Qcache_queries_in_cache:目前在 Query Cache 中的 SQL 数量
Qcache_total_blocks:Query Cache 中总的 Block 数量

猜你喜欢

转载自blog.csdn.net/keyunq/article/details/52700476