前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >合理配置Mysql缓存,提高缓存命中率

合理配置Mysql缓存,提高缓存命中率

作者头像
MickyInvQ
发布2020-09-27 10:52:36
2.6K0
发布2020-09-27 10:52:36
举报
文章被收录于专栏:InvQ的专栏

众所周知,从内存中读取要比从硬盘上速度要快好几百倍。故而,现在绝大部分应用系统都会最大程度的使用缓存(内存中的一个存储区域),来提高系统的运行效率。

首先打开mysql 命令端: 输入 show variables like '%query_cache%';

在这里插入图片描述
在这里插入图片描述

其中: have_query_cache 表明当前版本支持缓存功能,你会发现是它的值是YES。不要以为是yes就代表开启了查询缓存,实际上不是的。该参数表示当前版本的mysql是否支持query cache,实际上是否开启查询缓存是看另外下面两个参数的值。

  • query_cache_size, 该值默认单位为byte,即字节。该值默认为0,表明不开启。改了后表明开启。为缓存的大小。具体设置为多大,取决于实际情况,但是最好设置为1024的倍数,参考值32M。
  • query_cache_type

query_cache_type=0(OFF)禁用cache

query_cache_type=1(ON)缓存所有结果,除非select语句使用SQL_NO_CACHE禁用查询缓存

query_cache_type=2(DEMAND),只缓存select语句中通过SQL_CACHE指定需要缓存的查询

一、什么时候应用系统会从缓存中获取数据?

数据库从服务器上读取数据时,可以从硬盘的数据文件中获取数据,也可以从数据缓存中读取数据。那在什么情况下,系统是从缓存中读取数据,而不是从硬盘的数据文件中读取数据?

简单的说,数据缓存就是内存中的一块存储区域,它存储了用户的sql文件以及相关查询。通常情况下,用户下次查询时,如果使用的sql文本是相同的,并且自从上次查询后,相关的记录没有被更新过,此时数据库就直接采用缓存中的内容。从这个原则,可以看到如果要直接使用缓存中的数据,至少要满足以下几个条件。

1.所采用的sql文本是相同的

当前后两次用户使用了相同的sql语句(假设不考虑其他条件,控制变量法),则服务器会从缓存中读取,而不需要再去解析和执行sql语句。这里的sql文本必须一字不差的完全相同。select后面的字段名称(大小写不敏感)和数量都要求一致。where条件也是一致的。

2.要满足两次查询之间,数据记录包括表结构都没有更改过

如果记录所在的表更改了,比如增删字段。或者是insert都是不行。

3.客户端与服务器之间的字符集要一致

这里强调是一致,不是兼容!

二、提高缓存命中率的建议

从上面的条件可以卡出,想要使用缓存,条件相对比较严格。其实也是合情合理的,主要是为了保障数据的一致性。

  • 1.客户端与服务器端使用相同的字符集
  • 2.在客户端上,要固化查询的sql语句
  • 3.在条件允许的情况下,提高内存的缓存配置
  • 4.通过分区分表,读写分离,来避免数据与数据之间的干扰
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/02/07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、什么时候应用系统会从缓存中获取数据?
    • 1.所采用的sql文本是相同的
      • 2.要满足两次查询之间,数据记录包括表结构都没有更改过
        • 3.客户端与服务器之间的字符集要一致
        • 二、提高缓存命中率的建议
        相关产品与服务
        对象存储
        对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档