MySQL 体系架构

本文将介绍 MySQL 服务端的体系架构。

一、概述

整个 MySQL 服务端由以下部分组成:

  • 连接层
  • 服务层
    • Connection Pool:连接池
    • Management Services & Utilities:系统管理和控制工具
    • SQL Interface:SQL 接口
    • Parser:解析器
    • Optimizer:查询优化器
    • Caches & Buffers:缓存
  • 存储引擎层
  • 文件层

二、连接层

连接层主要完成连接处理、授权认证、安全处理等工作,客户端可以采用 TCP/IP、命名管道或共享内存、Unix 域套接字等方式与服务器建立连接。

三、服务层

1. 连接池

连接池负责存储和管理客户端和服务器的连接信息,并且通过动态分配的方式减少了创建和销毁线程的性能开销。

  • 当建立连接时,服务器会检查是否有可用的 “交互线程”,
    • 如果有,将该线程分配给该客户端
    • 如果没有,创建一个线程
  • 当断开连接时,服务器不会将 “交互线程” 销毁,而是会将其缓存,待新客户端连接时分配给它使用,从而达到了不频繁创建和销毁线程的目的

2. 系统管理和控制工具

提供数据库系统的管理和控制功能。

3. SQL 接口

负责接收客户端发过来的 SQL,将其转发到其它部分;接收其它部分返回的结果数据,将其返回给客户端。

4. 解析器

做语法验证、合法性判断,然后将请求的 SQL 解析为一颗 “解析树”。

5. 查询优化器

根据 “解析树” 生成执行计划,与存储引擎交互,借助存储引擎访问数据。

6. 缓存

包括表缓存、记录缓存、权限缓存、引擎缓存等。

四、存储引擎层

在 MySQL 中,存储引擎负责具体的数据存储和提取工作。

MySQL 提供了各式各样的存储引擎,它们管理的表具体的存储结构可能不同,采用的存取算法也可能不同。

MySQL 中的存储引擎是插件式的,服务层通过 API 与存储引擎通信,通信时无需注意不同存储引擎之间的差异。

五、存储层

包括了数据文件、日志文件、配置文件等。

参考

  • MySQL 技术内幕
  • MySQL 实战 45 讲
  • MySQL 是怎样运行的:从根儿上理解 MySQL