当前位置:首页 > 文章列表 > 数据库 > MySQL > 《MySQL面试小抄》查询缓存机制终面

《MySQL面试小抄》查询缓存机制终面

来源:SegmentFault 2023-02-16 15:41:49 0浏览 收藏

大家好,今天本人给大家带来文章《《MySQL面试小抄》查询缓存机制终面》,文中内容主要涉及到MySQL、数据库、面试小抄,如果你对数据库方面的知识点感兴趣,那就请各位朋友继续看下去吧~希望能真正帮到你们,谢谢!

《MySQL面试小抄》查询缓存机制终面

我是肥哥,一名不专业的面试官!

我是囧囧,一名积极找工作的小菜鸟!

囧囧表示:小白面试最怕的就是面试官问的知识点太笼统,自己无法快速定位到关键问题点!!!

本期主要面试考点

面试官考点之简述一下什么是查询缓存机制?

面试官考点之查询如何命中缓存?

面试官考点之什么场景下SQL和结果集不会被缓存?

面试官考点之什么场景下会导致MySQL缓存失效?

面试官考点之查询缓存是如何进行内存管理的?

面试官考点之MySQL是一次性分配所有的内存空间吗?

面试官考点之缓存中的内存碎片无法避免,那么有什么办法优化吗?

面试官考点之MySQL4.0提出了查询缓存,它设计出来是为了加速哪些查询场景?

面试官考点之MySQL5.6中默认禁用,8.0以后完全移除,造成这个改变的原因是什么?

面试官考点之生产环境要不要开启MySQL缓存?

qc1

qc2

面试官考点之简述一下什么是查询缓存机制?

MySQL服务器高负载情况下,我们需要采取一种措施给服务器减轻压力,一个复杂的查询是非常消耗性能的,

其中磁盘IO又占据主要资源,缓存是对系统性能优化的一种重要手段。

查询缓存机制设计是为了从根本上减少磁盘IO次数,MySQL开启缓存后,将SQL和结果集以键值对KV的形式存储在内存中。

当相同的SQL再次进入,MySQL识别是相同查询喉,会直接返回缓存在内存中的结果集。

避免再次进行一系列复杂的解析优化和磁盘IO过程。

面试官考点之查询如何命中缓存?

select id from user;

select id FROM user;
上面语句能命中缓存吗?

MySQL缓存命中机制有严格苛刻的要求,在判断命中前,MySQL不会对SQL做任何的解析处理。

SQL上的任何字符的不同,如大小写、空格、注释等都会导致缓存不命中

所以上面查询时无法命中缓存的。

面试官考点之什么场景下SQL和结果集不会被缓存?

或者说缓存规则是什么?

第一种情况:查询语句中包含不确定数据

例如查询语句中包含不确定函数:NOW()、CURRENT_DATE()等。

因为每次执行这类带了不确定数据的查询所返回结果可能是不同的。
第二种情况:超过了query_cache_limit预设阈值

超出了缓存内存能承受的范围,将放弃缓存!

面试官考点之什么场景下会导致MySQL缓存失效?

任何对于表结构或者表数据的更新操作,一定会造成查询缓存中的数据失效,同时查询缓存值的相关条目也会被清空。

MySQL判定有更新操作,就会设置所有的查询缓存失效。

面试官考点之查询缓存是如何进行内存管理的?

MySQL服务启动,缓存机制会在内存中开辟一块内存,

其中会

划分出一块区域
专用来管理维护缓存数据的元数据

例如空间内存、数据表和查询结果的映射,SQL和查询结果的映射

MySQL缓存机制将剩余的空闲空间分为一个个小数据块,用来存储缓存结果。

每个小块中存储自身的类型,大小和查询结果数据,还有指向前后内存块的指针

面试官考点之MySQL是一次性分配所有的内存空间吗?

MySQL因为无法预知查询结果大小,所以无法为每个查询结果精确分配大小恰好匹配的缓存空间。

MySQL缓存机制采用的是边查边存,动态的去申请缓存内存。

一条SQL查询缓存分配内存过程是怎么样的?

当有查询结果需要缓存的时候,MySQL缓存机制会在SQL查询开始(还未得到结果)时就去申请一块内存空间(小数据块),在不断查询中,

如果发现不够则继续申请
如果存储完时有空余则释放多余的内存空间

如果余下的需要回收的空间很小,小于query_cache_min_res_unit,不能再次被使用,可能会造成内存碎片,影响查询性能。

面试官考点之缓存中的内存碎片无法避免,那么有什么办法优化吗?

没有什么办法能够完全避免内存碎片,但是选择合适的

query_cache_min_res_unit

可以减少由碎片导致的内存空间浪费。

值太小,则浪费的空间更少,但是会导致频繁的内存块申请操作

如果设置得太大,那么碎片会很多

调整合适的值其实是在平衡内存浪费和CPU消耗
那么我如何确定这个平衡值?

可以通过内存实际消耗,计算单个查询的平均缓存大小

(query_cache_size - Qcache_free_memory)/ Qcache_queries_in_cahce

通过查看闲置内存块数量(Qcahce_free_blocks)来观察碎片。

如果产生的碎片过多,通过什么方法可以整理碎片?

通过FLUSH_QUERY_CAHCE清理碎片

这个命令将所有的查询缓存重新排序,

并将所有的空闲空间都聚焦到查询缓存的一块区域上。

面试官考点之MySQL4.0提出了查询缓存,它设计出来是为了加速哪些查询场景?

1、并发性和查询QPS不高
2、被访问的底层数据本质上是静态或半静态的
3、查询密集型应用,更新频率非常低而只读查询频率非常高的场景

面试官考点之MySQL5.6中默认禁用,8.0以后完全移除,造成这个改变的原因是什么?

理想情况下,上述查询场景非常适合使用查询缓存,但是

实际的业务系统都是有CRUD操作
的。

在MySQL里QC是由一个全局锁在控制,每次更新QC的内存块都需要进行锁定,数据更新频繁,就会不断的失效缓存操作,同时缓存失效会造成大量的查询

缓存碎片化
,还会导致服务器的负载升高,影响数据库的稳定性。

所以MySQL官方经过抉择,果断移除了查询缓存模块。

面试官考点之生产环境要不要开启MySQL缓存?

建议不开启

根据MySQL官方的测试,如果对一个表执行简单的查询,

设置每次查询都不一样,

打开QC后,性能反而下降了13%左右

当然实际业务中,不会都是这种不同的请求,因此实际影响应该比这个小一些。

MySQL查询缓存的目的是为了提升查询性能,但它本身也是有性能开销的。

需要在合适的

业务场景下(读写压力模型)
使用

不合适的业务场景不但不能提升查询性能,查询缓存反而会变成MySQL的瓶颈。

对写密集型的应用场景来说,禁用缓存反而提高性能。

随缘更新,整理不易,欢迎联系小白讨论,大神巴巴请绕路!

更多精彩内容,欢迎关注微信公众号:囧么肥事 (或搜索:jiongmefeishi)

好了,本文到此结束,带大家了解了《《MySQL面试小抄》查询缓存机制终面》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多数据库知识!

版本声明
本文转载于:SegmentFault 如有侵犯,请联系study_golang@163.com删除
面试官:如何给字符串设计索引?面试官:如何给字符串设计索引?
上一篇
面试官:如何给字符串设计索引?
基础和线程
下一篇
基础和线程
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    516次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    500次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    485次学习
查看更多
AI推荐
  • ChatExcel酷表:告别Excel难题,北大团队AI助手助您轻松处理数据
    ChatExcel酷表
    ChatExcel酷表是由北京大学团队打造的Excel聊天机器人,用自然语言操控表格,简化数据处理,告别繁琐操作,提升工作效率!适用于学生、上班族及政府人员。
    3167次使用
  • Any绘本:开源免费AI绘本创作工具深度解析
    Any绘本
    探索Any绘本(anypicturebook.com/zh),一款开源免费的AI绘本创作工具,基于Google Gemini与Flux AI模型,让您轻松创作个性化绘本。适用于家庭、教育、创作等多种场景,零门槛,高自由度,技术透明,本地可控。
    3380次使用
  • 可赞AI:AI驱动办公可视化智能工具,一键高效生成文档图表脑图
    可赞AI
    可赞AI,AI驱动的办公可视化智能工具,助您轻松实现文本与可视化元素高效转化。无论是智能文档生成、多格式文本解析,还是一键生成专业图表、脑图、知识卡片,可赞AI都能让信息处理更清晰高效。覆盖数据汇报、会议纪要、内容营销等全场景,大幅提升办公效率,降低专业门槛,是您提升工作效率的得力助手。
    3409次使用
  • 星月写作:AI网文创作神器,助力爆款小说速成
    星月写作
    星月写作是国内首款聚焦中文网络小说创作的AI辅助工具,解决网文作者从构思到变现的全流程痛点。AI扫榜、专属模板、全链路适配,助力新人快速上手,资深作者效率倍增。
    4513次使用
  • MagicLight.ai:叙事驱动AI动画视频创作平台 | 高效生成专业级故事动画
    MagicLight
    MagicLight.ai是全球首款叙事驱动型AI动画视频创作平台,专注于解决从故事想法到完整动画的全流程痛点。它通过自研AI模型,保障角色、风格、场景高度一致性,让零动画经验者也能高效产出专业级叙事内容。广泛适用于独立创作者、动画工作室、教育机构及企业营销,助您轻松实现创意落地与商业化。
    3789次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议隐私政策
返回登录
  • 重置密码