MySQL查询缓存

MySQL查询缓存

MySQL在查询的时候首先会查询缓存,如果缓存命中的话就直接返回结果,不需要解析sql语句,也不会生成执行计划,更不会执行;如果没有命中缓存,则再进行SQL解析以及进行查询,并将结果返回(也同时将结果放入到缓存中)
MySQL查询过程

缓存查找是利用对大小写敏感的哈希查找来实现的,Hash查找只能进行全值查找(sql完全一致),如果缓存命中,检查用户权限,如果权限允许,直接返回,查询不被解析,也不会生成查询计划,由于在缓存更新的时候会对数据加锁,所以对于读写比较频繁的系统,建议关闭缓存

缓存何时失效

MySQL的查询缓存系统会跟踪查询中涉及的每个表,如果这些表(数据或结构)发生变化,那么和这张表相关的所有缓存数据都将失效。正因为如此,在任何的写操作时,MySQL必须将对应表的所有缓存都设置为失效。如果查询缓存非常大或者碎片很多,这个操作就可能带来很大的系统消耗,甚至导致系统僵死一会儿

查询缓存不仅仅影响写操作,对于读操作中任何的查询语句在开始之前都必须经过检查,即使这条SQL语句永远不会命中缓存;如果查询结果可以被缓存,那么执行完成后,会将结果存入缓存,也会带来额外的系统消耗

可以将query_cache_type设置为DEMAND,可以通过SQL_CACHE和SQL_NO_CACHE来控制某个查询语句是否需要进行缓存,这时只有加入SQL_CACHE的查询才会走缓存,其他查询则不会,这样可以非常自由地控制哪些查询需要被缓存

复制代码
select sql_cache * from user
  • 只有查询sql完全一致时才会走查询缓存
  • 表数据更改会删除表的查询缓存
  • 包含存储过程、函数、用户变量、触发器的查询语句不会走查询缓存

参数配置

query_cache_type 设置查询缓存是否开启,可以设置为OFF/ON/DEMAND have_query_cache 查看是否支持查询缓存 query_cache_size 设置查询缓存的内存大小 query_cache_limit 设置单条查询缓存可用的存储最大值(加上sql_no_cache可以提高效率) query_cache_wlock_invalidate 设置当写锁在某个表上时,读请求是要等待写锁释放资源之后在查询还是允许直接从query cache中读取结果(false表示可以直接从query cache中取得结果)针对MyISAM存储引擎 query_cache_min_res_unit 设置查询缓存分配的内存块的最小单元(每个结果集)

缓存信息

复制代码
show  status  like  'Qcache%';

Qcache_free_blocks 1    查询缓存中的可用内存块数,该值如果较大,说明query cache中的内存岁票较多,需要清理
Qcache_free_memory 16760152 查询缓存的可用内存量
Qcache_hits 0  查询缓存命中数
Qcache_inserts 0  添加到查询缓存的查询数
Qcache_lowmem_prunes 0  由于内存不足而从查询缓存中删除的条数
Qcache_not_cached 102277604   非缓存查询的数量
Qcache_queries_in_cache 0  当前查询缓存中的查询数
Qcache_total_blocks 1 查询缓存总块数

https://zhhll.icu/2021/数据库/关系型数据库/MySQL/进阶/20.MySQL查询缓存/

本文由mdnice多平台发布

相关推荐
程序员清风14 小时前
Claude Code 新手快速上手指南
人工智能·程序人生·ai
可爱系程序猿14 小时前
XML 导入失败并指向 msxml6.dll:用最小样本区分解析错误与组件加载
xml·程序人生·电脑
秋天的怀念_David17 小时前
听故事学语言 · 数据结构篇 · 序章一 算法之问
数据结构·程序人生·算法
柒只猫~01142 天前
直播场控工具怎么选?先过形态、计费、触发这三层
程序人生
秋天的怀念_David3 天前
算法一千零一夜 · 第十七夜 长街点灯
java·程序人生·算法
可爱系程序猿3 天前
佳能 MF645Cx Windows 11 驱动下载安装:UFR II 队列可打印但扫描入口缺失的排查
程序人生·电脑·1024程序员节
郝学胜-神的一滴3 天前
游戏设计:原型与开发 11:用概率与电子表格搞定骰子系统
程序人生·游戏·游戏策划·1024程序员节·游戏设计
burg_xun4 天前
【生命科学 Agent】推理平台(二)
人工智能·程序人生·系统架构
可爱系程序猿5 天前
nvcuvid.dll 加载失败定位:CUDA 视频解码、驱动接口与进程位数逐项核查
运维·服务器·程序人生·电脑·音视频
syagain_zsx5 天前
BRpc 二次封装:Channel 管理、服务管理与回调工厂
c++·学习·程序人生·rpc·谷歌