注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Oracle、MySQL资料及经验

.

 
 
 

日志

 
 

MySQL针对单表的查询缓存设置  

2017-04-12 06:55:11|  分类: MySQL |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

dr_site查询缓存设置

 

 

 

一、查看查询缓存参数:

show variables like '%query_cache%'

针对单表的查询缓存设置 - 熊猫兔 - Oracle、MySQL资料及经验当前没开启

参数含义:

have_query_cache 表示是否支持query cache

query_cache_limit 表示query cache存放的单条query最大结果集,默认值为1M,结果集大小超过该值的query不会被cache

query_cache_min_res_unit 表示query cache 每个结果集存放的最小内存大小,默认4k

query_cache_size 表示系统中用于query cache的内存大小;

query_cache_type 系统是否打开了query cache功能;

query_cache_wlock_invalidate 针对myisam存储引擎,设置当有write lock在某个table上面的时候,读请求是要等待write lock释放资源之后再查询还是允许直接从query cache中读取结果,默认是OFF,可以直接从query cache中取得结果。

 

 

二、检查要缓存的表大小:

select data_length/1024/1024 M,index_length/1024/1024 M from information_schema.tables where table_schema='drnew' and table_name='dr_site'

针对单表的查询缓存设置 - 熊猫兔 - Oracle、MySQL资料及经验


三、设置查询缓存大小:

mysql> set global query_cache_size=50*1024*1024;    50MB

Query OK, 0 rows affected (0.00 sec)

 

四、开启查询缓存:

mysql> set global query_cache_type=2;

ERROR 1651 (HY000): Query cache is disabled; restart the server with query_cache_type=1 to enable it

如果之前没开启,需要重启库。

 

query_cache_type的三个值:

如果设置为0,查询缓存根本就没有用,相当于禁用了。

如果设置为1,将会缓存所有的结果,除非你的select语句使用SQL_NO_CACHE禁用了查询缓存。

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

 

五、查看查询缓存命中情况的状态变量:

show status like '%Qcache%';

针对单表的查询缓存设置 - 熊猫兔 - Oracle、MySQL资料及经验

变量的含义:

Qcache_free_blocks:表示查询缓存中目前还有多少剩余的blocks,如果该值显示较大,则说明查询缓存中的内存碎片过多了,可能在一定的时间进行整理。

Qcache_free_memory:查询缓存的内存大小,通过这个参数可以很清晰的知道当前系统的查询内存是否够用,是多了,还是不够用,DBA可以根据实际情况做出调整。

Qcache_hits:表示有多少次命中缓存。我们主要可以通过该值来验证我们的查询缓存的效果。数字越大,缓存效果越理想。

Qcache_inserts: 表示多少次未命中然后插入,意思是新来的SQL请求在缓存中未找到,不得不执行查询处理,执行查询处理后把结果insert到查询缓存中。这样的情况的次数,次数越多,表示查询缓存应用到的比较少,效果也就不理想。当然系统刚启动后,查询缓存是空的,这很正常。

Qcache_lowmem_prunes:该参数记录有多少条查询因为内存不足而被移除出查询缓存。通过这个值,用户可以适当的调整缓存大小。

Qcache_not_cached: 表示因为query_cache_type的设置而没有被缓存的查询数量。

Qcache_queries_in_cache:当前缓存中缓存的查询数量。

Qcache_total_blocks:当前缓存的block数量。

 

六、查询缓存测试:

mysql> select sql_cache * from dr_site limit 10;

针对单表的查询缓存设置 - 熊猫兔 - Oracle、MySQL资料及经验第一次查询,没有命中。

再次执行sql后,发现已被命中:

mysql> select sql_cache * from dr_site limit 10;

针对单表的查询缓存设置 - 熊猫兔 - Oracle、MySQL资料及经验

 

 

七、查询缓存的害处:http://blog.csdn.net/tonyxf121/article/details/7856361

mysql会对每条接收到的select类型的query进行hash计算然后查找该querycache是否存在,虽然hash计算和查找的效率已经足够高了,一条query所带来的消耗可以忽略,但一旦涉及到高并发,有成千上万条query时,hash计算和查找所带来的开销就的重视了;

 

 



  评论这张
 
阅读(69)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017