Mysql应用MySQL高速缓存启动方法及参数详解(query_cache_size)
《Mysql应用MySQL高速缓存启动方法及参数详解(query_cache_size)》要点: MySQL query cache从4.1版本开始提供了,不过值今天本人才对其进行研究.默认配置下,MySQL的该功能是没有启动的,可能你通过show variables like ‘%query_cache%';会发现其变量have_query_cache的值是yes,MYSQL初学者很容易以为这个参数为YES就代表开启了查询缓存,实际上是不对的,该参数表示当前版本的MYSQL是否支持Query Cache,实际上是否开启查询缓存是看另外一个参数的值:query_cache_size,该值为0,表示禁用query cache,而默认配置正是配置为0.MYSQL入门 配置方法:MYSQL入门 在MYSQL的配置文件my.ini或my.cnf中找到如下内容:MYSQL入门 # Query cache is used to cache SELECT results and later return them query_cache_size=0MYSQL入门 以上信息是默认配置,其注释意思是说,MYSQL的查询缓存用于缓存select查询结果,并在下次接收到同样的查询请求时,不再执行实际查询处理而直接返回结果,有这样的查询缓存能提高查询的速度,使查询性能得到优化,前提条件是你有大量的相同或相似的查询,而很少改变表里的数据,否则没有必要使用此功能.可以通过Qcache_lowmem_prunes变量的值来检查是否当前的值满足你目前系统的负载.注意:如果你查询的表更新比较频繁,而且很少有相同的查询,最好不要使用查询缓存.MYSQL入门 具体配置方法:MYSQL入门 1.将query_cache_size设置为具体的大小,具体大小是多少取决于查询的实际情况,但最好设置为1024的倍数,参考值32M.MYSQL入门 2.增加一行:query_cache_type=1MYSQL入门 query_cache_type参数用于控制缓存的类型,注意这个值不能随便设置,必须设置为数字,可选项目以及说明如下:MYSQL入门 如果设置为0,那么可以说,你的缓存根本就没有用,相当于禁用了.但是这种情况下query_cache_size设置的大小系统是否要为其分配呢,这个问题有待于测试?MYSQL入门 如果设置为1,将会缓存所有的结果,除非你的select语句使用SQL_NO_CACHE禁用了查询缓存.MYSQL入门 如果设置为2,则只缓存在select语句中通过SQL_CACHE指定需要缓存的查询.MYSQL入门 OK,配置完后的部分文件如下:MYSQL入门 query_cache_size=128M 保存文件,重新启动MYSQL服务,然后通过如下查询来验证是否真正开启了:MYSQL入门 代码如下:mysql> show variables like ‘%query_cache%'; +――――――――――+―――C+ | Variable_name??????????????? | Value???? | +――――――――――+―――C+ | have_query_cache???????????? | YES?????? | | query_cache_limit??????????? | 1048576?? | | query_cache_min_res_unit???? | 4096????? | | query_cache_size???????????? | 134217728 | | query_cache_type???????????? | ON??????? | | query_cache_wlock_invalidate | OFF?????? | +――――――――――+―――C+ 6 rows in set (0.00 sec) 主要看query_cache_size和query_cache_type的值是否跟我们设的一致:MYSQL入门 这里query_cache_size的值是134217728,我们设置的是128M,实际是一样的,只是单位不同,可以自己换算下:134217728 = 128*1024*1024.MYSQL入门 query_cache_type设置为1,显示为ON,这个前面已经说过了.MYSQL入门 总之,看到上边的显示表示设置正确,但是在实际的查询中是否能够缓存查询,还需要手动测试下,我们可以通过show status like ‘%Qcache%';语句来测试,现在我们开启了查询缓存功能,在执行查询前,我们先看看相关参数的值:MYSQL入门 代码如下:mysql> show status like ‘%Qcache%'; +――――――――-+―――C+ | Variable_name?????????? | Value???? | +――――――――-+―――C+ | Qcache_free_blocks????? | 1???????? | | Qcache_free_memory????? | 134208800 | | Qcache_hits???????????? | 0???????? | | Qcache_inserts????????? | 0???????? | | Qcache_lowmem_prunes??? | 0???????? | | Qcache_not_cached?????? | 2???????? | | Qcache_queries_in_cache | 0???????? | | Qcache_total_blocks???? | 1???????? | +――――――――-+―――C+ 8 rows in set (0.00 sec) 这里顺便解释下这个几个参数的作用: 下边我们测试下:MYSQL入门 比如执行如下查询语句MYSQL入门 代码如下:mysql> select * from user where id = 2; +―-+――-+ | id | name? | +―-+――-+ |? 2 | test2 | +―-+――-+ 1 row in set (0.02 sec) 然后执行show status like ‘%Qcache%',看看有什么变化:MYSQL入门 代码如下:mysql> show status like ‘%Qcache%'; +――――――――-+―――C+ | Variable_name?????????? | Value???? | +――――――――-+―――C+ | Qcache_free_blocks????? | 1???????? | | Qcache_free_memory????? | 134207264 | | Qcache_hits???????????? | 0???????? | | Qcache_inserts????????? | 1???????? | | Qcache_lowmem_prunes??? | 0???????? | | Qcache_not_cached?????? | 3???????? | | Qcache_queries_in_cache | 1???????? | | Qcache_total_blocks???? | 4???????? | +――――――――-+―――C+ 8 rows in set (0.00 sec) 对比前面的参数值,我们发现Qcache_inserts变化了.Qcache_hits没有变,下边我们在执行同样的查询 show status like ‘%Qcache%',看看有什么变化:MYSQL入门 代码如下:mysql> show status like ‘%Qcache%'; +――――――――-+―――C+ | Variable_name?????????? | Value???? | +――――――――-+―――C+ | Qcache_free_blocks????? | 1???????? | | Qcache_free_memory????? | 134207264 | | Qcache_hits???????????? | 1???????? | | Qcache_inserts????????? | 1???????? | | Qcache_lowmem_prunes??? | 0???????? | | Qcache_not_cached?????? | 4???????? | | Qcache_queries_in_cache | 1???????? | | Qcache_total_blocks???? | 4???????? | +――――――――-+―――C+ 8 rows in set (0.00 sec) OK,果然跟我们分析的完全一致.MYSQL入门 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |