查看数据库缓存配置情况
mysql> SHOW VARIABLES LIKE ‘%query_cache%’;
+——————————+———+
| Variable_name | Value |
+——————————+———+
| have_query_cache | YES | –查询缓存是否可用
| query_cache_limit | 1048576 | –-可缓存的最大结果集(字节数)。大于此值的结果集不会被缓存,如果结果集大于此值,则MySQL增加 Qcache_not_cached状态值
| query_cache_min_res_unit | 4096 |--分配内存块的最小体积(字节数)
| query_cache_size | 599040 | –-查询缓存使用的总内存字节数,必须是1024的倍数
| query_cache_type | ON | –阻止或是支持查询缓存
| query_cache_wlock_invalidate | OFF |--是否允许在其它连接处于lock状态时,使用缓存结果,默认为off, 不会影响大部分应用
+——————————+———+
1. 将query_cache_size设置为具体的大小,具体大小是多少取决于查询的实际情况,但最好设置为1024的倍数,参考值32M。如果缓存打开了,这个值如果设为0等同于没有打开。
2. 增加一行:query_cache_type=1
query_cache_type参数用于控制缓存的类型,注意这个值不能随便设置,必须设置为数字,可选项目以及说明如下:
如果设置为0(或off),那么可以说,你的缓存根本就没有用,相当于禁用了。但是这种情况下query_cache_size设置的大小系统是否要为其分配呢,这个问题有待于测试?
如果设置为1(或on),将会缓存所有的结果,除非你的select语句使用SQL_NO_CACHE禁用了查询缓存。
如果设置为2(或demand),则只缓存在select语句中通过SQL_CACHE指定需要缓存的查询。
例如:
select SQL_CACHE count(*) as cnt from vodprogram where bocode='001' AND programcode = '0000000030140000001002' AND offlinetime>'2013.08.01 23:59:59' AND onlinetime<'2013.08.01 23:59:59
配置完后的部分文件如下:
query_cache_size=128M
query_cache_type=1
保存文件,重新启动MYSQL服务
现在我们开启了查询缓存功能,在执行查询前,我们先看看相关参数的值:
mysql> show status like '%Qcache%';
+-------------------------+----------+
| Variable_name | Value |
+-------------------------+----------+
| Qcache_free_blocks | 7 |--缓存中相邻内存块的个数
| Qcache_free_memory | 67090392 |--空闲缓存大小(如果空闲太多,说明你设置的缓存过大了,调小一些)
| Qcache_hits | 132 |--缓存命中数
| Qcache_inserts | 808 |--载入缓存的query数
| Qcache_lowmem_prunes | 0 |--因缓存区满而删除的结果数量
| Qcache_not_cached | 1094536 |--没有没缓存的query数
| Qcache_queries_in_cache | 7 |--当前被缓存的SQL数量
| Qcache_total_blocks | 25 |--在QC中的blocks数。一个query可能被多个blocks存储,而这几个blocks中的最后一个,未用满的内存将会被释放掉
+-------------------------+----------