当前位置: 首页 > news >正文

面试宝典系列-MySQL缓存详解

为什么80%的码农都做不了架构师?>>>   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

相关文章:

  • proto3语法
  • JavaScript变量作用域(Variable Scope)和闭包(closure)的基础知识
  • Spring Data Redis—Pub/Sub(附Web项目源码)
  • 用面对对象方式定tab标签
  • Android 开发小知识点收集(随时更新)
  • 第二阶段冲刺8
  • 用shell脚本写的一个9*9乘法表
  • 导入项目后遇到页面报错如何解决
  • Ubuntu: how to md5sum (适用macOS)
  • Linux 磁盘配额 quota
  • crontab笔记
  • 互联网一线大厂都在用的Java架构师知识体系
  • linux 安全
  • centos中mysql,和配置ansible遇到的错误
  • 博客版权问题
  • 【Leetcode】104. 二叉树的最大深度
  • 2018以太坊智能合约编程语言solidity的最佳IDEs
  • CAP 一致性协议及应用解析
  • CentOS6 编译安装 redis-3.2.3
  • GitUp, 你不可错过的秀外慧中的git工具
  • PHP的类修饰符与访问修饰符
  • Redis字符串类型内部编码剖析
  • SAP云平台里Global Account和Sub Account的关系
  • Spring Cloud Feign的两种使用姿势
  • vue总结
  • 测试如何在敏捷团队中工作?
  • 机器学习学习笔记一
  • 正则表达式小结
  • ionic异常记录
  • raise 与 raise ... from 的区别
  • 支付宝花15年解决的这个问题,顶得上做出十个支付宝 ...
  • ​卜东波研究员:高观点下的少儿计算思维
  • #控制台大学课堂点名问题_课堂随机点名
  • (33)STM32——485实验笔记
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (二)【Jmeter】专栏实战项目靶场drupal部署
  • (附源码)spring boot基于Java的电影院售票与管理系统毕业设计 011449
  • (附源码)springboot“微印象”在线打印预约系统 毕业设计 061642
  • (附源码)计算机毕业设计ssm电影分享网站
  • (三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • (转载)从 Java 代码到 Java 堆
  • .aanva
  • .dwp和.webpart的区别
  • .gitignore文件—git忽略文件
  • .NET关于 跳过SSL中遇到的问题
  • .net和jar包windows服务部署
  • .Net小白的大学四年,内含面经
  • @zabbix数据库历史与趋势数据占用优化(mysql存储查询)
  • [1] 平面(Plane)图形的生成算法
  • [20150321]索引空块的问题.txt
  • [Android View] 可绘制形状 (Shape Xml)
  • [BT]BUUCTF刷题第9天(3.27)