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

时间:2022-07-25
本文章向大家介绍合理配置Mysql缓存,提高缓存命中率,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

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

首先打开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.通过分区分表,读写分离,来避免数据与数据之间的干扰