MySQL高性能策略——Query Cache

MySQL高性能策略——Query Cache

Query Cache(QC):查询缓存策略

声明

MySQL 8.0 版本后删除了Query Cache,原因是不具备实用性。
所以对时代的眼泪不感兴趣的,可以打住不用往下看了。

原理

MySQL开启了QC后,会以SQL语句为key缓存所有的SELECT语句结果,下一次处理同样的SELECT会从QC取得结果,而不是查表

缺陷

  1. MySQL规定如果数据表被更改(INSERT/UPDATE/DELETE/TRUNCATE/ALTER TABLE/DROP TABLE/DROP DATABASE…),那么和这个数据表相关的全部QC都会被删除,如果数据表更新频繁,会严重影响系统处理能力。
  2. QC只缓存SQL语句的总结果,不会缓存子查询结果,所以不适合JOIN/UNION很多的场景
  3. 所有对于QC的读写,加的都是全局表锁,完全串行,如果QC容量太大,全局锁的竞争会严重影响吞吐量和并发量

适用范围

读多写少,比如blog系统数据库

参数

show variables like '%query_cache%';

  1. query_cache_size:QC内存大小,默认0,会自动调整为1024的整数倍
  2. query_cache_type:控制QC的开关。0(OFF)关闭;1(ON)开启;2(DEMAND),只有SELECT语句中使用了SQL_CACHE提示,才使用QC
  3. query_cache_limit:单条QC的最大容量,默认1M,超过该容量的结果集不会被缓存
  4. query_cache_min_res_unit:设置QC中每次分配内存的最小空间大小
  5. query_alloc_block_size:缓存的块大小
  6. query_cache_wlock_invalidate控制当有写锁加在表上时,是否先让QC失效。1(TRUE),有写锁时将所有QC失效;0(FALSE),有写锁仍允许QC

清空QC

flush query cache;

-------------本文结束感谢您的阅读-------------

本文标题:MySQL高性能策略——Query Cache

文章作者:DragonBaby308

发布时间:2019年07月31日 - 21:52

最后更新:2019年08月31日 - 20:28

原始链接:http://www.dragonbaby308.com/mysql-qc/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

急事可以使用右下角的DaoVoice,我绑定了微信会立即回复,否则还是推荐Valine留言喔( ఠൠఠ )ノ
0%