现在的位置:首页>网站SEO>正文

query_cache_type:Mysql缓存设置的注意事项

2017年03月29日 ⁄ 共 3546字 暂无评论

query_cache_type在几年前,是一个非常被大家认同的缓存方法,而部落发现,现在一些系统,默认情况下,居然提关闭了query_cache_type的.有一些地方的说法是,从 MySQL4开始,出现了QueryCache查询缓存,如果使用了QueryCache,当查询接收到一个和之前同样的查询,服务器将会从查询缓存种检索结果,而不是再次分析和执行上次的查询,这样就大大提高了性能,节省时间,非常有用,但我们在实际应用中,就不是这么简单的一种说法了,像部落安装的lnmp1.2版本,默认就是关闭的.

前两天,部落准备查看一下这玩意,发现居然是关闭的,然后网上搜索了一些相关的贴子.发现这个默认的关闭设置,还是有一定道理的.

query_cache_type:Mysql缓存设置的注意事项

query_cache_type缓存设置

需要用到这个功能的朋友,可以看看,当然,是否需要这个功能,后面会讲.

你设置Mysql允许查询缓存,但是如果你设置的查询缓存大小为了0,这和没有允许没什么区别。所以必须是几个步骤的设置才能真正打开查询缓存这个功能,具体设置方法如下:

1.进入mysql

[root@server ~]# mysql -u root -p

然后输入mysql的密码即可进入mysql:Enter password:

  1. Welcome to the MySQL monitor. Commands end with ; or \g.
  2. Your MySQL connection id is 351
  3. Server version: 5.5.37 Source distribution
  4. Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the buffer.
  5. mysql>

如果没有开启,那么在MYSQL的配置文件my.ini(window)或my.cnf(linux)中找到如下内容:

  1. # Query cache is used tocache SELECT results and later return them
  2. # without actualexecuting the same query once again. Having the query
  3. # cache enabled mayresult in significant speed improvements, if your
  4. # have a lot of identicalqueries and rarely changing tables. See the
  5. # “Qcache_lowmem_prunes”status variable to check if the current value
  6. # is high enough for yourload.
  7. # Note: In case yourtables change very often or if your queries are
  8. # textually differentevery time, the query cache may result in a
  9. # slowdown instead of aperformance improvement.
  10. query_cache_size=0

以上信息是默认配置,其注释意思是说,MYSQL的查询缓存用于缓存select查询结果,并在下次接收到同样的查询请求时,不再执行实际查询处理而直接返回结果,有这样的查询缓存能提高查询的速度,使查询性能得到优化,前提条件是你有大量的相同或相似的查询,而很少改变表里的数据,否则没有必要使用此功能。可以通过Qcache_lowmem_prunes变量的值来检查是否当前的值满足你目前系统的负载。注意:如果你查询的表更新比较频繁,而且很少有相同的查询,最好不要使用查询缓存。

具体配置方法:

1.将query_cache_size设置为具体的大小,具体大小是多少取决于查询的实际情况,但最好设置为1024的倍数,参考值32M。

2.增加一行:query_cache_type=1

query_cache_type参数用于控制缓存的类型,注意这个值不能随便设置,必须设置为数字,如果设置为0,那么可以说,你的缓存根本就没有用,相当于禁用了。
如果设置为1,将会缓存所有的结果,除非你的select语句使用SQL_NO_CACHE禁用了查询缓存。

如果设置为2,则只缓存在select语句中通过SQL_CACHE指定需要缓存的查询。

OK,配置完后的部分文件如下:

query_cache_size=128M

query_cache_type=1

保存文件,重新启动MYSQL服务,然后通过如下查询来验证是否真正开启了:

2.query_cache_type 使用查询缓存的方式:

如果query_cache_type 设置为 ON了,上面的方法就能实现,那么执行语句的话,就能看到:

  1. mysql> select @@query_cache_type;
  2. +——————–+
  3. | @@query_cache_type |
  4. +——————–+
  5. | ON |
  6. +——————–+

这样 当我们执行 select id,name from tableName; 这样就会用到查询缓存。在 query_cache_type 打开的情况下,如果你不想使用缓存,需要指明select sql_no_cache id,name from tableName;当然也可以禁用查询缓存: mysql> set session uery_cache_type=off;

3.系统变量 have_query_cache 设置查询缓存是否可用

  1. mysql> show variables like ‘have_query_cache’;
  2. +——————+——-+
  3. | Variable_name | Value |
  4. +——————+——-+
  5. | have_query_cache | YES |
  6. +——————+——-+

上面的显示,表示设置查询缓存是可用的。

系统变量 query_cache_size

表示查询缓存大小,也就是分配内存大小给查询缓存,如果你分配大小为0,

那么第一步和 第二步起不到作用,还是没有任何效果,这个可以自行调试了.可以用最上面开启的方法来操作.

禁用mysql query cache

这里,我们再来看看网上的另一种说法,那就是禁用mysql query cache

当你的数据库打开了Query Cache(简称QC)功能后,数据库在执行SELECT语句时,会将其结果放到QC中,当下一次处理同样的SELECT请求时,数据库就会从QC取得结果,而不需要去数据表中查询。

在这个“Cache为王”的时代,我们总是通过不同的方式去缓存我们的结果从而提高响应效率,但一个缓存机制是否有效,效果如何,却是一个需要好好思考的问题。在MySQL中的Query Cache就是一个适用较少情况的缓存机制。在上图中,如果缓存命中率非常高的话,有测试表明在极端情况下可以提高效率238%。但实际情况如何?Query Cache有如下规则,如果数据表被更改,那么和这个数据表相关的全部Cache全部都会无效,并删除之。这里“数据表更改”包括: INSERT, UPDATE, DELETE, TRUNCATE, ALTER TABLE, DROP TABLE, or DROP DATABASE等。举个例子,如果数据表posts访问频繁,那么意味着它的很多数据会被QC缓存起来,但是每一次posts数据表的更新,无论更新是不是影响到了cache的数据,都会将全部和posts表相关的cache清除。如果你的数据表更新频繁的话,那么Query Cache将会成为系统的负担。有实验表明,糟糕时,QC会降低系统13%的处理能力。

如果你的应用对数据库的更新很少,那么QC将会作用显著。比较典型的如博客系统,一般博客更新相对较慢,数据表相对稳定不变,这时候QC的作用会比较明显。

以上很多的数据来源自CSDN上一些比较经典的专栏,在部落看来,算是比较权威了.

那么我们到底是否需要开启query_cache_type缓存呢?

依部落的看法来,如果您是一个星期更新两次到三次的话,可以尝试开启,如果您一天更新的文章达到一篇以上,那么还是暂时关闭吧.实话说,副作用要大.

毕竟我们的站点,大多数朋友都开启了各种缓存插件,或者是主机配置了缓存功能.

 

 

小结

文章内容引用自网络,由免费部落整理发布.

给我留言