合理配置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.通过分区分表,读写分离,来避免数据与数据之间的干扰
- golang 几种字符串的连接方式
- 整理ING
- dg broker校验失败的一个奇怪问题(二) (r8笔记第51天)
- Jdbc知识点全整理,你值得拥有 (2)
- 抓住“新代码”的影子 —— 基于GoAhead系列网络摄像头多个漏洞分析
- Python 用OPEN读文件报错 ,路径以及r
- python 如何设置多线程
- R语言读CSV、txt文件方式以及read.table read.csv 和readr(大数据读取包)
- python 多进程设置 整理版本1
- 11g Dataguard中的snapshot standby特性(r8笔记第49天)
- 物化视图刷新结合ADG的尝试 (r8笔记第47天)
- 关于CPU使用率高的awr分析(r8笔记第46天)
- 图形工具和命令行的博弈-swingbench配置(r8笔记第63天)
- 手把手教你用LDA特征选择
- MySQL 教程
- MySQL 安装
- MySQL 管理与配置
- MySQL PHP 语法
- MySQL 连接
- MySQL 创建数据库
- MySQL 删除数据库
- MySQL 选择数据库
- MySQL 数据类型
- MySQL 创建数据表
- MySQL 删除数据表
- MySQL 插入数据
- MySQL 查询数据
- MySQL where 子句
- MySQL UPDATE 查询
- MySQL DELETE 语句
- MySQL LIKE 子句
- mysql order by
- Mysql Join的使用
- MySQL NULL 值处理
- MySQL 正则表达式
- MySQL 事务
- MySQL ALTER命令
- MySQL 索引
- MySQL 临时表
- MySQL 复制表
- 查看MySQL 元数据
- MySQL 序列 AUTO_INCREMENT
- MySQL 处理重复数据
- MySQL 及 SQL 注入
- MySQL 导出数据
- MySQL 导入数据
- MYSQL 函数大全
- MySQL Group By 实例讲解
- MySQL Max()函数实例讲解
- mysql count函数实例
- MYSQL UNION和UNION ALL实例
- MySQL IN 用法
- MySQL between and 实例讲解
- 进击吧!Pythonista(9/100)
- 数据结构基础(一)数组,矩阵
- pytest 测试框架学习(3):pytest.approx
- pytest 测试框架学习(4):pytest.fail
- SpringBoot 开发秘籍 - 启动时配置校验
- pytest 测试框架学习(5):pytest.skip
- pytest 测试框架学习(6):pytest.importorskip
- Java 自定义注解及使用场景
- pytest 测试框架学习(8):pytest.exit
- Linux傻瓜式四步完美安装Python3.7
- 【译】10 个最有用的 git log 技巧
- Hibernate的入门(Hibernate的环境搭建、Hibernate的API)
- pytest 测试框架学习(9):pytest.main
- 深入了解ActiveMQ!
- 完美解决 python ImportError: Failed to import any qt binding