读书笔记: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/)