没有合适的资源?快使用搜索试试~ 我知道了~
MSQL问题集合,线上环境到底要不要开启query cache
需积分: 0 0 下载量 155 浏览量
2023-07-20
17:59:17
上传
评论
收藏 21KB DOCX 举报
温馨提示
试读
3页
MSQL问题集合,线上环境到底要不要开启query cache
资源推荐
资源详情
资源评论
线上环境到底要不要开启 query cache
Query Cache(查询缓存,以下简称 QC)存储 SELECT 语句及其产生的数据结果,特别适用于:
频繁提交同一个语句,并且该表数据变化不是很频繁的场景,例如一些静态页面,或者页面中的某
块不经常发生变化的信息。QC 有可能会从 InnoDB Buffer Pool 或者 MyISAM key buffer 里读取
结果。
由于 QC 需要缓存最新数据结果,因此表数据发生任何变化(INSERT、UPDATE、DELETE 或其他
可能产生数据变化的操作),都会导致 QC 被刷新。
根据 MySQL 官方的测试,QC 的优劣分别是:
1、如果对一个表执行简单的查询,但每次查询都不一样的话,打开 QC 后,性能反而下
降了 13%左右。但通常实际业务中,通常不会只有这种请求,因此实际影响应该比这个小
一些。
2、如果对一个只有一行数据的表进行查询,则可以提升 238%,这个效果还是非常不错的。
因此,如果是在一个更新频率非常低而只读查询频率非常高的场景下,打开 QC 还是比较有优势的,
其他场景下,则不建议使用。而且,QC 一般也维持在 100MB 以内就够了,没必要设置超过数百
MB。
QC 严格要求 2 次 SQL 请求要完全一样,包括 SQL 语句,连接的数据库、协议版本、字符集等因
素都会影响,下面几个例子中的 SQL 会被认为是完全不一样而不会使用同一个 QC 内存块:
mysql> set names latin1; SELECT * FROM table_name;
mysql> set names latin1; select * from table_name;
mysql> set names utf8; select * from table_name;
此外,QC 也不适用于下面几个场景:
1、子查询或者外层查询;
2、存储过程、存储函数、触发器、event 中调用的 SQL,或者引用到这些结果的;
3、包含一些特殊函数时,例如:BENCHMARK()、CURDATE()、
CURRENT_TIMESTAMP()、NOW()、RAND()、UUID()等等;
4、读取 mysql、INFORMATION_SCHEMA、performance_schema 库数据的;
5、类似 SELECT…LOCK IN SHARE MODE、SELECT…FOR UPDATE、SELECT..INTO
OUTFILE/DUMPFILE、SELECT..WHRE…IS NULL 等语句;
6、SELECT 执行计划用到临时表(TEMPORARY TABLE);
7、未引用任何表的查询,例如 SELECT 1+1 这种;
8、产生了 warnings 的查询;
资源评论
红尘︶炼心
- 粉丝: 20
- 资源: 32
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功