读书笔记:MySQL服务器架构核心模块构成

     MySQL服务器架构模块指在逻辑上以某种方式结合在一起的一段代码,并且能在服务器中完成某种特定的功能。到MySQL5.1,其源码可以抽象为以下模块,彼此交互和传递控制权。



  • 服务器初始化模块(Server Initialization Module)

     负责在服务器启动时完成初始化工作,包括解析配置文件和命令行参数、分配全局存储缓冲区、初始化全局变量和结构、加载访问控制表以及其他大量初始化任务。其入口为C/C++程序主函数main()。

  • 连接管理器(Connection Manager)

     侦听来自客户端的连接,然后将请求派发给线程管理器。

  • 线程管理器(Thread Manager)

     处理来自客户端的连接,分配、跟踪线程。

  • 连接线程(Connection Thread)

     由线程管理器创建,或者从线程缓存中提取并调用。连接线程是处理客户端请求的工作核心。

  • 用户验证模块(User Authentication Module)

     验证连接用户的证书,初始化用户权限。

  • 访问控制模块(Access Control Module)

     检验客户端是否有权限执行所请求的操作。

  • 解析器(Parser)

     解析查询,生成解析树。

  • 命令调度器(Command Dispatcher)

     负责将请求分配给相关能够处理这些请求的较低层次的模块。

  • 查询缓存模块(Query Cache Module)

     缓存查询结果,查询缓存命中时提交缓存结果然后结束查询请求的执行。

  • 优化器(Optimizer)

     MySQL源码中最复杂的模块。生成执行查询的最佳策略,执行查询计划,向客户端返回结果。

  • 表管理器(Table Manager)

     创建、读取和修改表定义文件(.frm文件),维护被称为表缓存的表描述符,管理表级锁。

  • 表修改模块(Table Modification Module)

     MySQL源码中非常重要的代码。负责包括创建、删除、重命名表以及表记录的插入、删除、更新等操作。即DDL和DML接口。

  • 表维护模块(Table Maintenance Module)

     负责表维护操作,包括检查、修理、备份、恢复、优化(碎片整理)以及分析(更新索引基数)。

  • 状态报告模块(Status Reporting Module)

     处理以SHOW命令开始的查询,返回关于服务器配置设置、性能监控变量、表结构信息、复制进程、表缓存状态等查询的结果。

  • 抽象存储引擎接口(表处理器)(Abstracted Storage Engine Interface(Table Handler))

     执行低层次存储与检索操作的标准化接口。

  • 特定存储引擎接口(Storage Engine Implementations)

     抽象存储引擎接口的扩展,每个存储引擎(InnoDB、MyISAM、MEMORY等)根据自身的设计定义低层次调用接口。

  • 日志记录模块(Logging Module)

     维护高层次(逻辑)日志,即服务器的二进制日志、查询日志和慢查询日志。不包括存储引擎级别自定义的日志。

  • 主复制服务器模块(Replication Master Module)

     负责master上的复制功能,主要是向slave发送复制日志事件。

  • 从复制服务器模块(Replication Slave Module)

     负责slave上的复制功能,主要是接收master上的更新然后应用到slave上。

  • 客户端/服务器协议API(Client/Server Protocol API)

     MySQL服务器创建、读取、解释和发送协议包API。

  • 低层次网络I/O API(Low-Level Network I/O API)

     抽象低层次网络I/O和SSL。

  • 核心API(Core API)

     MySQL核心组件。包括文件I/O、内存管理、字符串操作、文件系统索引、格式化打印、丰富的数据结构和算法集等。



内容整理自:

《Understanding MySQL Internals》(https://book.douban.com/subject/1924288/

《深入理解MySQL核心技术》(https://book.douban.com/subject/4022870/