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

【mysql】内部技术架构

【mysql】内部技术架构

    • 1.连接层
    • 2.服务层(SQL Layer)
    • 3.存储引擎(Storage Engine Layer)
      • 1.缓冲池(Buffer Pool) - InnoDB核心
      • 2.日志模块:
    • 一条sql发送给mysql后,内部是如何执行的?(说一下 MySQL执行一条查询语句的内部执行过程?)

在这里插入图片描述
宏观架构:经典的 C/S 模型与分层设计
MySQL 遵循客户端/服务器模型,其核心架构可以分为三层,如下图所示(我们可以先进行文字描述,你可以在脑中构建这个图像):
连接层
服务层(SQL Layer)
存储引擎层(Storage Engine Layer)

1.连接层

这是客户端与 MySQL 交互的入口。

  • 功能:
    • 身份认证:当客户端(如 Java 应用、MySQL 命令行工具)发起连接请求时,连接层负责验证用户名、密码和主机权限。
    • 连接管理:管理连接线程。MySQL 会为每个连接分配一个线程,使用线程池来管理这些连接,避免频繁创建和销毁线程带来的开销。
  • 相关命令/参数:mysql -h -u -p, show processlist, max_connections, thread_cache_size

2.服务层(SQL Layer)

  • 1.连接池(Connection Pool)
    管理和复用数据库连接,以解决频繁创建和销毁连接所带来的巨大性能开销,在服务启动时或首次请求时,预先创建一定数量的数据库连接并保存在池中。当应用程序需要连接时,它直接从池中获取一个空闲的、已建立好的连接。使用完毕后,应用程序将连接“归还”给池,而不是真正关闭它。这个连接可以被下一个请求复用。

  • 2.SQL 接口(SQL Interface)
    接收SQL命令,判断其类型(如 DML、DDL、存储过程等),并分发给后续正确的组件去执行,最后将结果返回给客户端。

  • 3.解析器(Parser)
    将人类可读的、文本形式的 SQL 语句,转换成一个 MySQL 内部能够理解并操作的数据结构(解析树)

    • 词法分析: 将完整的 SQL 语句拆分成一个个的“词元”(Token),例如识别 SELECT, FROM, users 等。
    • 语法分析:根据 MySQL 的语法规则,检查 SQL 语句是否合法,并生成一颗解析树(Parse Tree),语法分析器会验证 Token 的顺序和结构是否正确。例如,它知道 SELECT 后面应该跟着表达式列表,然后应该是 FROM 子句等。
      在这里插入图片描述
  • 4.优化器(Optimizer)
    接收解析器生成的解析树,分析所有可能的执行方式,然后选择它认为“最优”的一个方案,最终生成一个可执行的“查询计划”
    优化类型:

    • 1.逻辑优化(基于规则的优化):
      首先,优化器会对解析树进行一些重写和简化,这些通常是基于公认的逻辑规则,与具体数据无关。例如:
      1).条件化简: WHERE a > 5 AND a > 10 会被简化为 WHERE a > 10。
      2).常量传递: WHERE a = 5 AND b = a 会被转换为 WHERE a = 5 AND b = 5。
      3).无效代码消除: WHERE 1=1 这样的恒真条件会被直接移除。
      4).视图展开:如果查询涉及视图,会将视图的 SQL 定义合并到主查询中。
    • 2.物理优化(基于成本的优化):
      这是核心。优化器会根据表的统计信息(如索引基数、数据分布)来估算不同执行计划(全表扫描、使用哪个索引、多表连接的顺序等)的“成本”(I/O 成本、CPU 成本),然后选择它认为成本最低的那个。
  • 4.查询缓存(8.0之后被移除):
    在 8.0 之前,如果查询语句完全相同(字节级相同),且表数据未发生变更,则直接返回缓存的结果。
    被移除的原因:缓存的失效非常频繁,任何对表的修改都会导致所有相关缓存失效,在高并发写环境下,缓存命中率极低,且管理缓存本身带来了不小的开销。

3.存储引擎(Storage Engine Layer)

在这里插入图片描述
存储引擎负责从磁盘读取和存储数据。它是真正与磁盘文件打交道的一层。MySQL 提供了多种存储引擎,每个引擎都有其特点,适用于不同的场景。

常见存储引擎对比:

  • InnoDB(默认):
    支持外键,事务,行级锁,聚簇索引(数据和索引存储在一起,存储在.idb文件中)
    使用场景:绝大多数场景,尤其是需要事务、高并发读写、数据一致性要求高的场景。

  • MYISAM:
    不支持事务,外键,表级锁,二级索引(数据和索引分开存放,数据存储在.MYD文件中,索引存储在.MYI文件中),读取速度块,二级索引叶子节点记录数据物理地址。
    使用场景:只读或读多写少的场景,如数据仓库、日志表。在并发写场景下性能较差。

  • Memory:
    数据存储在内存中,服务器重启数据丢失,访问速度极快,表级锁。
    使用场景:用于临时表、缓存或会话管理。适合快速查找的只读数据。

核心机制:

1.缓冲池(Buffer Pool) - InnoDB核心

这是 InnoDB 在内存中开辟的一块关键区域,用于缓存表和索引数据。

读取数据:当需要读取数据时,InnoDB首先检查数据页是否在Buffer Pool中,如果在Buffer Pool中,则直接从Buffer Pool中读取,返回数据,如果不在Buffer Pool中,则从磁盘读取该页放入Buffer Pool。
修改数据:当需要修改数据时,InnoDB首先在BufferPool中修改对应数据页,这个被修改的页称为脏页。InnoDB会有后台线程定期将数据刷线到脏页中。

2.日志模块:

  • 重做日志(RedoLog)

    • 作用:保证事务的持久性,它是物理日志,记录的是“在某个数据页上做了什么修改”
    • 工作流程(Write-Ahead Logging, WAL):事务提交时,先写到redolog日志中,再在合适的时候将BufferPool中的脏页刷新到磁盘中。即使数据库崩溃重启,也可以重做redolog日志中已提交但为写入到数据文件中的事务。保证数据不丢失。
  • 回滚日志(Undo Log)

    • 作用:保证事务的原子性(Atomicity) 和 MVCC。它是逻辑日志,记录数据被修改前的样子。
    • 工作流程:在事务修改前,会将旧数据写入到UndoLog日志中,如果事务需要进行回滚操作,或者其他事务需要读取事务的旧版本(MVCC),就可以从 Undo log中获取数据。
  • 二进制日志(Binlog)

    • 归属:属于Mysql服务层,所有存储引擎都可以使用。
    • 作用:用于主从复制和数据恢复。它记录逻辑日志,记录的是sql语句的原始逻辑。(如 UPDATE users SET name=‘Bob’ WHERE id=1;

一条sql发送给mysql后,内部是如何执行的?(说一下 MySQL执行一条查询语句的内部执行过程?)

在这里插入图片描述
mysql客户端先通过协议与服务器进行连接,通过sql接口发送sql语句,先检查查询缓存是否命中,命中直接返回给客户端。没有命中,进行语句解析,解析器对sql语句进行词法分析(将sql语句拆分成一个个"词元")和语法分析(检查这些“次元”生成的sql语句是否合法),并生成一颗解析树。优化器会根据这个解析树生成一个高效的执行计划,最后进入执行阶段,查询执行引擎根据执行计划调用存储引擎提供的接口查询将结果返回给客户端。

http://www.dtcms.com/a/398710.html

相关文章:

  • 马来西亚股票数据API对接文档
  • 【C++实战㉟】解锁C++面向对象设计:里氏替换原则实战指南
  • 邮件系统的未来趋势:技术革新与智能化的未来
  • 解决MySQL的sql_mode=only_full_group_by错误提示
  • phpcms 网站名称标签建设政协网站的意义
  • 【langgraph】docker镜像查看langraph-api相关版本
  • Datawhale25年9月组队学习:llm-preview+Task3:提示词工程
  • RunnableLambda
  • 记录一次windows资源管理器崩溃,任务栏无法打开任何软件
  • 【开题答辩过程】以《基于SSM框架的植物园管理系统的实现与设计》为例,不会开题答辩的可以进来看看
  • 浅拷贝与深拷贝的区别?
  • python免费自学网站做网站的作品思路及步骤
  • PyTorch 构建神经网络
  • 人工智能医疗系统灰度上线与评估:技术框架实践分析python版(下)
  • 网站推广费用一般多少钱设计工作室logo
  • Eclipse配置tomcat+创建javaweb项目
  • 做国际网站找阿里西安市今天发生的重大新闻
  • 深圳工程建设交易服务中心网站郑州做网站zzmshl
  • Flink-SQL通过过滤-解析-去重-聚合计算写入到MySQL表
  • 公司网站建设记哪个科目网站建设对企业的要求
  • 汕头网页设计制作金华seo扣费
  • Vue电商数据分析大屏开发
  • 【开题答辩全过程】以 bilibili排行榜的数据分析与可视化为例,包含答辩的问题和答案
  • AI性能对决!蓝耘MaaS平台在2025大模型测评中如何脱颖而出
  • 新能源知识库(109)什么是频率死区?
  • Linux开发——开发板介绍及裸机程序设计
  • 百度网站推广关键词怎么查凡科微信小程序怎么样
  • 定制网站开发接活wordpress固定链接设置技巧
  • HTTP代理HTTP(S)、SOCKS5有哪些作用?
  • vue3+TS 前端调用海康摄像头视频流,后端用 Node.js 做 RTSP 转 WebSocket-FLV 转发,并且前后端优化延迟方案