MySQL 缓存机制与架构解析

目录

一、MySQL缓存机制概述

二、MySQL整体架构

三、SQL查询执行全流程

四、MySQL 8.0为何移除查询缓存?

五、MySQL 8.0前的查询缓存配置

六、替代方案:应用层缓存与优化建议

总结


一、MySQL缓存机制概述

MySQL的缓存机制旨在提升数据访问效率,主要分为两类:一级缓存二级缓存

  1. 一级缓存(InnoDB Buffer Pool)

    • 作用:存储数据和索引,减少磁盘I/O操作,由InnoDB存储引擎管理。

    • 特点:自动缓存热点数据,通过LRU算法淘汰冷数据。

    • 优化建议:通过参数 innodb_buffer_pool_size 调整缓存大小(通常设置为物理内存的70%-80%)。

  2. 二级缓存(Query Cache,MySQL 8.0前支持)

    • 作用:缓存SELECT查询的结果,直接返回重复查询的结果,避免重复计算。

    • 问题:在高并发写入场景中,频繁的缓存失效导致性能下降。


二、MySQL整体架构

MySQL采用分层设计,核心分为三层:

  1. 服务层(Service Layer)

    • 负责SQL解析、优化和执行,包含三大组件:

      • 解析器(Parser)

        • 词法分析:拆分SQL语句为关键字、表名等标记。

        • 语法分析:生成解析树(Parse Tree),验证语法正确性。

        • 语义检查:验证表、列是否存在及权限。

      • 优化器(Optimizer)

        • 逻辑优化:重写查询,消除冗余条件。

        • 物理优化:选择索引、连接方式(如JOIN顺序),生成成本最低的执行计划。

      • 执行器(Executor)

        • 权限校验后调用存储引擎接口执行计划,返回结果。

  2. 引擎层(Storage Engines)

    • 支持多种存储引擎(如InnoDB、MyISAM),负责数据存储和读写。

  3. 文件系统层(File System)

    • 存储表结构文件(.frm)、数据文件(.ibd)、日志文件(redo/undo log)等。


三、SQL查询执行全流程

一条SQL查询从发起到返回结果的完整流程:

  1. 客户端请求

    应用程序发送SQL语句到MySQL服务端。
  2. 解析器处理

    解析器验证语法并生成解析树。
  3. 优化器生成执行计划

    基于统计信息(如表大小、索引选择性)选择最优执行路径。
  4. 权限检查

    确认用户对目标数据的访问权限。
  5. 缓存查询(MySQL 8.0前)

    查询缓存(Query Cache)命中则直接返回结果。
  6. 执行器调用引擎

    执行器按计划调用存储引擎接口:

                (1)日志记录:写入redo log保证事务持久性。

                (2)一级缓存(Buffer Pool):若数据已在内存,直接读取;否则从磁盘加载。

    7. 结果返回与缓存更新

          返回结果集,更新缓存(若涉及写操作,缓存失效)。


四、MySQL 8.0为何移除查询缓存?
  • 高并发写入场景:频繁的DML操作导致缓存频繁失效,维护成本高。

  • 锁竞争:查询缓存需要全局锁,影响并发性能。

  • 替代方案成熟:推荐使用外部缓存(如Redis)或InnoDB缓冲池优化。


五、MySQL 8.0前的查询缓存配置
-- 启用查询缓存
SET GLOBAL query_cache_type = 1;  -- 1为启用,0为关闭
-- 设置缓存大小(64MB)
SET GLOBAL query_cache_size = 64 * 1024 * 1024;
-- 执行查询(命中缓存直接返回)
SELECT * FROM users WHERE id = 1;

六、替代方案:应用层缓存与优化建议
  1. 外置缓存(如Redis/Memcached)

  • 缓存热点数据(如用户信息、商品详情),降低数据库压力。
  • 支持分布式缓存,适合高并发场景。

      2. InnoDB缓冲池优化

  • 调整 innodb_buffer_pool_size 提升内存利用率。

  • 监控命中率:SHOW STATUS LIKE 'innodb_buffer_pool_read%';

  3. 本地缓存(如Guava Cache)

  • 适用于单机高频访问的小数据量场景。


总结

MySQL的缓存机制和架构设计是其高性能的核心。尽管MySQL 8.0移除了查询缓存,但通过合理利用InnoDB缓冲池、应用层缓存及优化执行计划,仍能显著提升性能。理解组件协作与执行流程,是数据库调优的关键基础。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/12712.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C++】STL——list的使用

目录 💕1.带头双向链表List 💕2.list用法介绍 💕3.list的初始化 💕4.size函数与resize函数 💕5.empty函数 💕6.front函数与back函数 💕7.push_front,push_back,pop_front,pop_back函数…

MySQL知识点总结(一)

1.SQL分类 数据定义(DDL):创/改/删/名/清(cadrt) 数据库对象:表/视图/存储/函数/触发器/事件 数据操作(DML):增/删/改/查(idus) 操作数据库对象 数据控制&…

快速幂,错位排序笔记

​ 记一下刚学明白的快速幂和错位怕排序的原理和代码 快速幂 原理: a^b (a^(b/2)) ^ 2(b为偶数) a^b a*(a^( (b-1)/2))^2(b为奇数) 指数为偶数…

【缴纳过路费——并查集】

题目 分析 题目乍看一下像最短路径的求解。但是从复杂度上面分析应该不是这样。题目关键点在于“路程花费是最贵的那一段” 和 “最少花费在区间内”。 合起来就是两点所有路程中最便宜的最贵段,要在区间内:如果按权值从小到大遍历边,能合并连…

ComfyUI安装调用DeepSeek——DeepSeek多模态之图形模型安装问题解决(ComfyUI-Janus-Pro)

ComfyUI 的 Janus-Pro 节点,一个统一的多模态理解和生成框架。 试用: https://huggingface.co/spaces/deepseek-ai/Janus-1.3B https://huggingface.co/spaces/deepseek-ai/Janus-Pro-7B https://huggingface.co/spaces/deepseek-ai/JanusFlow-1.3B 安装…

【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】2.22 多项式运算:从求根到拟合的数值方法

2.22 多项式运算:从求根到拟合的数值方法 目录 #mermaid-svg-D0vp87eTMLHIY39y {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-D0vp87eTMLHIY39y .error-icon{fill:#552222;}#mermaid-svg-D0vp87eTMLHI…

【MySQL】MySQL经典面试题深度解析

文章目录 一、MySQL与C的深度结合1.1 为什么C项目需要MySQL?1.2 典型应用场景 二、基础概念面试题精讲2.1 存储引擎对比2.2 索引原理 三、C专项面试题解析3.1 连接池实现3.2 预处理语句3.3 批量操作优化 四、高级应用面试题剖析4.1 事务隔离级别4.2 锁机制详解4.3 查…

(脚本学习)BUU18 [CISCN2019 华北赛区 Day2 Web1]Hack World1

自用 题目 考虑是不是布尔盲注,如何测试:用"1^1^11 1^0^10,就像是真真真等于真,真假真等于假"这个测试 SQL布尔盲注脚本1 import requestsurl "http://8e4a9bf2-c055-4680-91fd-5b969ebc209e.node5.buuoj.cn…

互联网行业常用12个数据分析指标和八大模型

本文目录 前言 一、互联网线上业务数据分析的12个指标 1. 用户数据(4个) (1) 存量(DAU/MAU) (2) 新增用户 (3) 健康程度(留存率) (4) 渠道来源 2. 用户行为数据(4个) (1) 次数/频率…

Verilog语言学习总结

Verilog语言学习! 目录 文章目录 前言 一、Verilog语言是什么? 1.1 Verilog简介 1.2 Verilog 和 C 的区别 1.3 Verilog 学习 二、Verilog基础知识 2.1 Verilog 的逻辑值 2.2 数字进制 2.3 Verilog标识符 2.4 Verilog 的数据类型 2.4.1 寄存器类型 2.4.2 …

知识蒸馏教程 Knowledge Distillation Tutorial

来自于:Knowledge Distillation Tutorial 将大模型蒸馏为小模型,可以节省计算资源,加快推理过程,更高效的运行。 使用CIFAR-10数据集 import torch import torch.nn as nn import torch.optim as optim import torchvision.tran…

使用SpringBoot发送邮件|解决了部署时连接超时的bug|网易163|2025

使用SpringBoot发送邮件 文章目录 使用SpringBoot发送邮件1. 获取网易邮箱服务的授权码2. 初始化项目maven部分web部分 3. 发送邮件填写配置EmailSendService [已解决]部署时连接超时附:Docker脚本Dockerfile创建镜像启动容器 1. 获取网易邮箱服务的授权码 温馨提示…

docker pull Error response from daemon问题

里面填写 里面解决方案就是挂代理。 以虚拟机为例,将宿主机配置端口设置,https/http端口设为7899 配置虚拟机的http代理: vim /etc/systemd/system/docker.service.d/http-proxy.conf里面填写,wq保存 [Service] Environment…

从Transformer到世界模型:AGI核心架构演进

文章目录 引言:架构革命推动AGI进化一、Transformer:重新定义序列建模1.1 注意力机制的革命性突破1.2 从NLP到跨模态演进1.3 规模扩展的黄金定律 二、通向世界模型的关键跃迁2.1 从语言模型到认知架构2.2 世界模型的核心特征2.3 混合架构的突破 三、构建…

Verilog基础(三):过程

过程(Procedures) - Always块 – 组合逻辑 (Always blocks – Combinational) 由于数字电路是由电线相连的逻辑门组成的,所以任何电路都可以表示为模块和赋值语句的某种组合. 然而,有时这不是描述电路最方便的方法. 两种always block是十分有用的: 组合逻辑: always @(…

STM32 串口发送与接收

接线图 代码配置 根据上一章发送的代码配置,在GPIO配置的基础上需要再配置PA10引脚做RX接收,引脚模式可以选择浮空输入或者上拉输入,在USART配置串口模式里加上RX模式。 配置中断 //配置中断 USART_ITConfig(USART1, USART_IT_RXNE, ENABLE…

Docker技术相关学习三

一、Docker镜像仓库管理 1.docker仓库:用于存储和分发docker镜像的集中式存储库,开发者可以将自己创建的镜像推送到仓库中也可以从仓库中拉取所需要的镜像。 2.docker仓库: 公有仓库(docker hub):任何人都可…

Java BIO详解

一、简介 1.1 BIO概述 BIO(Blocking I/O),即同步阻塞IO(传统IO)。 BIO 全称是 Blocking IO,同步阻塞式IO,是JDK1.4之前的传统IO模型,就是传统的 java.io 包下面的代码实现。 服务…

【ArcGIS_Python】使用arcpy脚本将shape数据转换为三维白膜数据

说明: 该专栏之前的文章中python脚本使用的是ArcMap10.6自带的arcpy(好几年前的文章),从本篇开始使用的是ArcGIS Pro 3.3.2版本自带的arcpy,需要注意不同版本对应的arcpy函数是存在差异的 数据准备:准备一…

【电脑系统】电脑突然(蓝屏)卡死发出刺耳声音

文章目录 前言问题描述软件解决方案尝试硬件解决方案尝试参考文献 前言 在 更换硬盘 时遇到的问题,有时候只有卡死没有蓝屏 问题描述 更换硬盘后,电脑用一会就卡死,蓝屏,显示蓝屏代码 UNEXPECTED_STORE_EXCEPTION 软件解决方案…