博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
面试宝典系列-MySQL缓存详解
阅读量:7067 次
发布时间:2019-06-28

本文共 1427 字,大约阅读时间需要 4 分钟。

  hot3.png

在mysql中,Query Cache默认是打开的,可以提高查询效率。

但这不代表开启Query Cache就对mysql的性能有所提高。因为如果有大量的修改时,由于修改造成cache失效,会给服务器造成更大的开销。

控制缓存的配置是:query_cache_type,0:关闭,1:开启,2:只有select 中明确指定SQL_CACHE才缓存。

需要注意的是Query cache对sql的大小写敏感,因为Query Cache在内存中是以Hash结构来进行映射的,而Hash算法的基础是sql语句的字符,所以任何sql语句的改变会重新cache。

缓存的生成:

  • query cache内容是select的结果集
  • prepared statement永远不会缓存,即使参数完全一致
  • where条件中包含了某些函数永远不会缓存,如current_date, now等
  • 太大的结果集(> query_cache_limit)不会被cache

 缓存的更新和失效:

  • 在Mysql中,可以设置Query Cache所使用的总内存(query_cache_size),MySQL会把默认可以进行缓存的SQL语句的结果集进行缓存,一旦内存塞满后,就会剔除老的Query Cache对象。
  • 表数据进行任何一行的修改,基于该表相关的cache立即全部失效。为什么不做智能些?因为分析cache内容太复杂,影响性能。

缓存的使用场景:

  • 当有大量的查询和大量的修改时,cache机制可能会造成性能下降。因为每次修改会导致系统去做cache失效操作,造成不小的开销。
  • 系统cache的访问由一个单一的全局锁来控制,这时候大量的查询将被阻塞,直至锁释放。

指定使用缓存和不使用缓存:

-- 指定不使用缓存select SQL_NO_CACHE count() from t_user where tell = "153*******";-- 指定使用缓存select SQL_CACHE count() from t_user where tell = "153*******";

监控缓存:

使用命令:show status like ‘qcache%’;

Qcache_free_blocks:缓存中相邻内存块的个数。数目大说明可能有碎片。FLUSH QUERY CACHE会对缓存中的碎片进行整理,从而得到一个空闲块。

Qcache_free_memory:缓存中的空闲内存。

Qcache_hits:每次查询在缓存中命中时就增大

Qcache_inserts:每次插入一个查询时就增大。命中次数除以插入次数就是不中比率。

Qcache_lowmem_prunes:缓存出现内存不足并且必须要进行清理以便为更多查询提供空间的次数。这个数字最好长时间来看;如果这个 数字在不断增长,就表示可能碎片非常严重,或者内存很少。(上面的 free_blocks和free_memory可以告诉您属于哪种情况)

Qcache_not_cached:不适合进行缓存的查询的数量,通常是由于这些查询不是 SELECT 语句或者用了now()之类的函数。

Qcache_queries_in_cache:当前缓存的查询(和响应)的数量。

Qcache_total_blocks:缓存中块的数量。

转载于:https://my.oschina.net/suyain/blog/1926797

你可能感兴趣的文章
PCL点云特征描述与提取(3)
查看>>
一起谈.NET技术,Sql Server性能优化——Partition(管理分区)
查看>>
向前插入迭代器
查看>>
BTrace : Java 线上问题排查神器
查看>>
复杂查询的触发器怎么写啊(账户,客商)3.15更新|最终完成|
查看>>
ARM获得PC指针为何PC=PC+8
查看>>
进程监控树。
查看>>
.html 、.htm 、 .shtml 以及 .shtm 四种扩展名的文件区别
查看>>
Flink - DataStream
查看>>
第一类与第二类曲面积分的关系与变换
查看>>
《卑劣的街头》影评
查看>>
10 款非常棒的CSS代码格式化工具推荐
查看>>
Windows Phone开发之路(5) XAML基础(中)
查看>>
hibernate tool使用备忘
查看>>
使用Hint时的注意事项
查看>>
单源最短路径算法--Dijkstra算法和Bellman-Ford算法
查看>>
UVA 10405 Longest Common Subsequence (动态规划 LCS)
查看>>
CURL常用命令
查看>>
阿里巴巴技术团队博客
查看>>
ASIHTTP
查看>>