当前位置: 首页 > news >正文

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缓冲池、应用层缓存及优化执行计划,仍能显著提升性能。理解组件协作与执行流程,是数据库调优的关键基础。

相关文章:

MySQL 缓存机制与架构解析

目录 一、MySQL缓存机制概述 二、MySQL整体架构 三、SQL查询执行全流程 四、MySQL 8.0为何移除查询缓存? 五、MySQL 8.0前的查询缓存配置 六、替代方案:应用层缓存与优化建议 总结 一、MySQL缓存机制概述 MySQL的缓存机制旨在提升数据访问效率&am…...

LabVIEW自定义测量参数怎么设置?

以下通过一个温度采集案例,说明在 LabVIEW 中设置自定义测量参数的具体方法: 案例背景 ​ 假设使用 NI USB-6009 数据采集卡 和 热电偶传感器 监测温度,需自定义以下参数: 采样率:1 kHz 输入量程:0~10 V&a…...

海思的一站式集成环境Hispark Studio更新了

HiSpark Studio是海思提供的面向智能设备开发者提供一站式集成开发环境,支持代码编辑、编译、烧录和调试等功能。我以前在评测星闪芯片的时候用过,当时写了篇博客:【星闪开发连载】WS63E开发板Windows环境的构建_hispark studio-CSDN博客。那…...

TresJS:用Vue组件构建3D场景的新选择

在当今数字化时代,3D图形技术正以前所未有的速度发展,从游戏开发到虚拟现实(VR)、增强现实(AR),再到各种沉浸式体验,3D技术的应用场景日益丰富。TresJS作为一款基于Three.js的Web3D开…...

Axure设计教程:动态排名图(中继器实现)

一、开篇 在Axure原型设计中,动态图表是展示数据和交互效果的重要元素。今天,我们将学习如何使用中继器来创建一个动态的排名图,该图表不仅支持自动轮播,还可以手动切换,极大地增强了用户交互体验。此教程旨在提供一个…...

攻防世界 文件上传

题目名称-文件包含 今天的题大概提一下解题思路就好了 这里要使用php://filter 在此基础上因为网页过滤了一些关键字 我们要进行爆破 UCS-4* UCS-4BE UCS-4LE* UCS-2 UCS-2BE UCS-2LE UTF-32* UTF-32BE* UTF-32LE* UTF-16* UTF-16BE* UTF-16LE* UTF-7 UTF7-IMAP UTF-8* ASCII…...

从 .NET Framework 升级到 .NET 8 后 SignalR 问题处理与解决方案

随着 .NET Framework 向 .NET 8 的迁移,许多开发者在使用 SignalR 时遇到了一些前后端连接、配置、调用等方面的问题。尤其是在处理 SignalR 实时通信功能时,升级后的一些兼容性问题可能导致应用程序无法正常工作。本文将介绍在从 .NET Framework 升级到…...

《Node.js Express 框架》

《Node.js Express 框架》 引言 Node.js 是一种基于 Chrome V8 引擎的 JavaScript 运行环境,它允许开发者使用 JavaScript 来编写服务器端代码。Express 是一个简洁、灵活的 Node.js Web 应用框架,它为 Web 和移动应用程序提供了一系列强大的功能。本文将详细介绍 Node.js …...

Unity LineRenderer 画线及代码控制--Unity小记

Unity LineRenderer 画线及代码控制 目录 Unity LineRenderer 画线及代码控制 一、添加LineRenderer 组件 二、LineRenderer设置起始坐标 三、设置LinRenderer 四、代码片段,找代码直接点我(找代码直接点我) 一、添加LineRenderer 组件…...

llama.cpp GGML Quantization Type

llama.cpp GGML Quantization Type 1. GGML Quantization Type2. static const struct ggml_type_traits type_traits[GGML_TYPE_COUNT]3. Q#_K_M and Q#_KReferences 什么神仙妖魔,不过是他们禁锢异族命运的枷锁! GGUF https://huggingface.co/docs/hu…...

k8s部署go-fastdfs

前置环境:已部署k8s集群,ip地址为 192.168.10.1~192.168.10.5,总共5台机器。 1. 创建provisioner制备器(如果已存在,则不需要) 制备器的具体部署方式可参考我的上一篇文章: k8s部署rabbitmq-CSDN博客文章浏览阅读254次,点赞3次,收藏5次。k8s部署rabbitmqhttps://blo…...

Python----Python高级(并发编程:协程Coroutines,事件循环,Task对象,协程间通信,协程同步,将协程分布到线程池/进程池中)

一、协程 1.1、协程 协程,Coroutines,也叫作纤程(Fiber) 协程,全称是“协同程序”,用来实现任务协作。是一种在线程中,比线程更加轻量级的存在,由程序员自己写程序来管理。 当出现IO阻塞时,…...

什么是可观测性?

现代服务架构常常谈及三个性: 弹性,韧性,可观测性。今天且按下其他两性不表,着重聊一聊可观测性。本文就几个主题对可观测性展开讨论: 可观测性是什么可观测性是必须的吗企业的可观测性落地 可观测性理念 可观测性是…...

3. 【.NET Aspire 从入门到实战】--理论入门与环境搭建--环境搭建

构建现代云原生应用程序时,开发环境的搭建至关重要。NET Aspire 作为一款专为云原生应用设计的开发框架,提供了一整套工具、模板和集成包,旨在简化分布式系统的构建和管理。开始项目初始化之前,确保开发环境的正确配置是成功的第一…...

kubeadm构建k8s源码阅读环境

目标 前面看了minikube的源码了解到其本质是调用了kubeadm来启动k8s集群,并没有达到最初看代码的目的。 所以继续看看kubeadm的代码,看看能否用来方便地构建源码调试环境。 k8s源码编译 kubeadm源码在k8s源码库中,所以要先克隆k8s源码。之…...

【Flink快速入门-1.Flink 简介与环境配置】

Flink 简介与环境配置 实验介绍 在学习一门新的技术之前,我们首先要了解它的历史渊源,也就是说它为什么会出现,它能够解决什么业务痛点。所以本节我们的学习目的是了解 Flink 的背景,并运行第一个 Flink 程序,对它有…...

硬盘修复后,文件隐身之谜

在数字时代,硬盘作为数据存储的重要载体,承载着无数珍贵的信息与回忆。然而,当硬盘遭遇故障并经过修复后,有时我们会遇到这样一个棘手问题:硬盘修复后,文件却神秘地“隐身”,无法正常显示。这一…...

如何处理网络连接错误导致的fetch失败?

处理由于网络连接错误导致的 fetch 失败通常涉及捕获网络错误并提供适当的用户反馈。以下是如何在 Vue 3 中实现这一点的步骤和示例。 一、更新 useFetch 函数 在 useFetch 函数中,需要捕获网络错误,并设置相应的错误信息。网络错误通常会抛出一个 TypeError,可以根据这个…...

Qt之设置QToolBar上的按钮样式

通常给QAction设置icon后,菜单栏的菜单项和工具栏(QToolBar)上对应的按钮会同时显示该icon。工具栏还可以使用setToolButtonStyle函数设置按钮样式,其参数为枚举值: enum ToolButtonStyle {ToolButtonIconOnly,ToolButtonTextOnly,ToolButtonTextBesideIcon,ToolButtonTe…...

责任链模式(Chain Responsibility)

一、定义:属于行为型设计模式,包含传递的数据、创建处理的抽象和实现、创建链条、将数据传递给顶端节点; 二、UML图 三、实现 1、需要传递处理的数据类 import java.util.Date;/*** 需要处理的数据信息*/ public class RequestData {priva…...

Arm Neoverse CMN-650时钟与电源管理架构解析

1. Arm Neoverse CMN-650时钟与电源管理架构解析在现代SoC设计中,时钟与电源管理子系统如同城市的水电供应网络,其设计优劣直接决定了系统性能与能耗效率的平衡。Arm Neoverse CMN-650作为新一代互连架构,通过创新的时钟域划分和电源域管理机…...

快速上手Redis

一、认识Redis Redis 是一个内存数据库,常用于缓存和高性能数据存储。特点: 数据存储在内存,读写速度快(毫秒级甚至微秒级)支持多种数据结构:String、Hash、List、Set、Sorted Set(ZSet&#…...

政府新媒体宣发审核和监测对内容合规有哪些意义

在政务新媒体全谱系发展的今天,信息发布面临着意识形态安全、法律合规、公民隐私保护等多重考验。建立完善的宣发审核与监测机制,对保障内容合规具有决定性的意义,它是数字政府建设中不可或缺的“安全阀”与“过滤器”。以下是宣发审核和监测…...

从田野笔记到理论建模,NotebookLM政治学辅助全流程拆解,含6类典型误用场景避坑指南

更多请点击: https://intelliparadigm.com 第一章:从田野笔记到理论建模:NotebookLM政治学辅助全流程概览 NotebookLM 作为 Google 推出的基于用户上传文档进行深度语义理解的 AI 助手,正逐步成为政治学研究者处理非结构化文本的…...

微信网页版访问终极指南:如何用wechat-need-web插件轻松解锁微信网页版

微信网页版访问终极指南:如何用wechat-need-web插件轻松解锁微信网页版 【免费下载链接】wechat-need-web 让微信网页版可用 / Allow the use of WeChat via webpage access 项目地址: https://gitcode.com/gh_mirrors/we/wechat-need-web 还在为微信网页版无…...

Squirrel-RIFE实战指南:7步掌握AI视频补帧核心技术

Squirrel-RIFE实战指南:7步掌握AI视频补帧核心技术 【免费下载链接】Squirrel-RIFE 效果更好的补帧软件,显存占用更小,是DAIN速度的10-25倍,包含抽帧处理,去除动漫卡顿感 项目地址: https://gitcode.com/gh_mirrors/…...

从化学结构到生物大分子:Ketcher的模块化绘图技术深度解析

从化学结构到生物大分子:Ketcher的模块化绘图技术深度解析 【免费下载链接】ketcher Web-based molecule sketcher 项目地址: https://gitcode.com/gh_mirrors/ke/ketcher Ketcher作为一款专业的Web分子编辑器,不仅支持基础化学结构绘制&#xff…...

JSON Lint for PHP:让JSON验证不再是一场噩梦

JSON Lint for PHP:让JSON验证不再是一场噩梦 【免费下载链接】jsonlint JSON Lint for PHP 项目地址: https://gitcode.com/gh_mirrors/jso/jsonlint 你是否曾因一个JSON格式错误而花费数小时调试?是否在接收外部API数据时,因为格式不…...

Boss-Key终极指南:Windows一键隐藏窗口的完整解决方案

Boss-Key终极指南:Windows一键隐藏窗口的完整解决方案 【免费下载链接】Boss-Key 老板来了?快用Boss-Key老板键一键隐藏静音当前窗口!上班摸鱼必备神器 项目地址: https://gitcode.com/gh_mirrors/bo/Boss-Key 你是否曾在办公室突然需…...

在嵌入式c项目中集成大模型能力taotoken的稳定api调用方案

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 在嵌入式C项目中集成大模型能力:基于Taotoken的稳定API调用方案 应用场景类,针对嵌入式或资源受限的C语言开…...