mysql数据库内核总体架构

8 阅读5分钟

mysql数据库内核总体架构

MySQL 内核的总体架构是其高效、稳定和灵活的基础。其最核心的特点是 “插件式存储引擎架构”,将上层 SQL 处理与底层数据存储分离。

以下是 MySQL 服务器(以最常用的 InnoDB 引擎为例)的总体架构详解,其核心组件可以划分为三层:网络连接层SQL 处理层​ 和 存储引擎层

MySQL 总体架构图(逻辑视图)

+-----------------------------------------------------------------------+
|                    客户端 (Clients)                                    |
|  (JDBC/ODBC, 命令行, 可视化工具等)                                     |
+----------------------------+------------------------------------------+
                             | (连接/通信协议)
+-----------------------------------------------------------------------+
|                   网络连接层 (Connectors & Connection Pool)           |
|  - 身份验证、权限校验                                                   |
|  - 连接池管理,避免频繁创建销毁线程                                     |
+----------------------------+------------------------------------------+
                             |
+-----------------------------------------------------------------------+
|                    核心服务层 (SQL Layer)                              |
|  +---------------------+  +---------------------+                     |
|  |  管理服务与工具组件  |  |   SQL接口与解析器    |                     |
|  | - 备份恢复、复制等   |  | - 接收SQL,进行词法、 |                     |
|  +---------------------+  |   语法解析,生成     |                     |
|                           |   “解析树”           |                     |
|  +---------------------+  +---------------------+                     |
|  |     查询优化器       |  +---------------------+                     |
|  | - 基于代价模型       |  |     查询缓存        |                     |
|  | - 生成最优执行计划   |  | (Query Cache, 8.0+  |                     |
|  +---------------------+  |   已移除)           |                     |
|                           +---------------------+                     |
+----------------------------+------------------------------------------+
                             | (通过存储引擎API)
+-----------------------------------------------------------------------+
|                    存储引擎层 (Pluggable Storage Engines)             |
|  +----------------------------------------------------------------+  |
|  |                    InnoDB 存储引擎 (默认)                       |  |
|  |  +-------------------+  +-------------------+  +------------+  |  |
|  |  |   缓冲池          |  |   事务系统         |  |  文件系统   |  |
|  |  | (Buffer Pool)     |  | - Undo Log        |  | 接口层      |  |
|  |  | - 数据页缓存      |  | - Redo Log        |  | (物理文件)  |  |
|  |  | - Change Buffer   |  | - Lock Info       |  |            |  |
|  |  +-------------------+  +-------------------+  +------------+  |  |
|  +----------------------------------------------------------------+  |
|  * 其他引擎:MyISAM, Memory, Archive, ... (可通过API接入)            |
+-----------------------------------------------------------------------+

各层核心组件详解

1. 网络连接层
  • 连接器:负责客户端连接管理、身份认证和权限获取。每个连接使用一个独立的线程。
  • 连接池:管理并复用这些线程,减少因频繁创建和销毁线程带来的开销。
2. SQL 处理层(Server 层)

这一层是 MySQL 的“大脑”,负责所有跨存储引擎的通用功能。

  • 查询缓存:在 MySQL 8.0 之前,会将 SELECT 语句和结果以键值对形式缓存。但由于命中率低、维护开销大,在 8.0 版本中已被彻底移除

  • 分析器

    • 词法分析:将完整的 SQL 语句拆解成一个个有意义的“单词”。
    • 语法分析:根据语法规则,判断 SQL 语句是否合法,并生成一颗 “解析树”
  • 优化器

    • 在解析树的基础上,根据统计信息内置的代价模型,决定使用哪个索引、多表连接的顺序等,生成一个它认为最优的 “执行计划”
    • 例如,决定是使用全表扫描还是索引,或者将 WHERE子句中的条件进行“下推”。
  • 执行器

    • 调用存储引擎 API,按照优化器生成的执行计划,一步步执行。
    • 在执行前,会先检查用户对相关表是否有执行权限。
3. 存储引擎层(核心中的核心)

这一层负责数据的存储和提取。MySQL 通过定义良好的 API 与上层交互,使得可以像插件一样更换存储引擎。InnoDB​ 是当前默认且使用最广泛的引擎。

InnoDB 引擎核心子系统:

  • 缓冲池主内存工作区,是性能的关键。

    • 缓存数据页和索引页,所有读写操作首先在缓冲池中进行。
    • 采用 LRU​ 算法管理页面。
    • Change Buffer:一种特殊结构,用于缓存对非唯一二级索引的插入、更新操作,避免随机 IO,随后再异步合并到索引页中。
  • 事务系统

    • Redo Log:物理日志,记录的是数据页的物理修改。采用 WAL​ 技术,保证事务的持久性和崩溃恢复能力。日志文件是循环写入的。
    • Undo Log:逻辑日志,记录事务修改前的旧版本数据。用于事务回滚和实现 MVCC
    • 锁管理器:管理行级锁,实现并发控制。
  • MVCC 实现

    • 每行数据隐藏了 DB_TRX_ID(最近修改的事务ID)和 DB_ROLL_PTR(指向Undo Log中旧版本数据的指针)字段。
    • 通过 ReadView机制(包含活跃事务ID列表等)和行数据上的事务ID,来判断当前事务能看到哪个版本的数据,从而实现非锁定读。
  • 文件系统

    • 表数据文件:.ibd文件(按表空间组织),存储表结构、数据、索引。
    • 日志文件:ib_logfile0, ib_logfile1,即 Redo Log 文件。
    • 系统表空间:ibdata1,存储数据字典、Undo Log、Change Buffer 等信息。

一条 SQL 查询的执行流程(以 SELECT 为例)

  1. 连接:客户端通过连接器建立连接,完成认证。
  2. 解析:分析器对 SQL 进行词法和语法分析,生成解析树。
  3. 优化:优化器基于统计信息生成执行计划。
  4. 执行:执行器调用 InnoDB 引擎接口。
  5. 引擎读取:InnoDB 首先从缓冲池中查找所需数据页。
  6. 磁盘访问:若缓冲池未命中,则从磁盘加载数据页到缓冲池。
  7. 返回结果:引擎将数据页返回给执行器,执行器处理后返回给客户端。

与其他引擎的对比(架构视角)

  • MyISAM:存储引擎层组件简单,只有索引文件(.MYI)和数据文件(.MYD)。不支持事务、行锁和崩溃安全恢复。其表级锁由 Server 层的锁管理器管理。
  • Memory:所有数据存储在内存中,重启后丢失。适用于临时表或缓存。

总结

MySQL 的架构精髓在于 “SQL 层与存储引擎分离” 。这种设计带来了巨大的灵活性,并使得 InnoDB 这样的引擎能够专注于实现高性能的事务处理能力。理解这个架构,是进行性能调优、故障排查和深度开发的根本。