网站建设公司兴田德润可信赖,关注国内国际时事,网站备案号 脱离服务商,自己做微网站制作教程目录
1 MySQL 架构说明
2 连接层
3 核心业务层
3.1 查询缓存
3.2 解析器
3.3 优化器
3.4 执行器
4 存储引擎层
5 参考文档 1 MySQL 架构说明 下图是 MySQL 5.7 及其之前版本的逻辑架构示意图 MySQL 架构大致可分为以下三层#xff1a;
连接层#xff1a;负责跟客户…目录
1 MySQL 架构说明
2 连接层
3 核心业务层
3.1 查询缓存
3.2 解析器
3.3 优化器
3.4 执行器
4 存储引擎层
5 参考文档 1 MySQL 架构说明 下图是 MySQL 5.7 及其之前版本的逻辑架构示意图 MySQL 架构大致可分为以下三层
连接层负责跟客户端建立连接、获取权限、维持和管理连接核心业务层包括查询缓存、解析器、优化器、执行器等涵盖 MySQL 的大多数核心服务功能以及所有的内置函数如日期、时间、数学和加密函数等所有跨存储引擎的功能都在这一层实现比如存储过程、触发器、视图等存储引擎层负责数据的存储和提取。其架构模式是插件式的支持 InnoDB、MyISAM、Memory 等多个存储引擎。现在最常用的存储引擎是 InnoDB它从 MySQL 5.5.5 版本开始成为了默认存储引擎
2 连接层
MySQL 连接层是 MySQL 数据库架构中的一个重要组成部分它主要负责处理客户端与数据库服务器之间的连接和通信。
主要作用为
连接管理连接层负责监听客户端的连接请求当客户端请求连接时连接层会创建一个新的连接或者复用已有的空闲连接以供客户端使用。在客户端使用完连接后连接层会关闭连接以释放资源。为了提高性能和响应速度连接层通常会实现一个线程池线程池可以减少创建和销毁线程的开销因为线程可以被重复使用通信协议处理连接层处理客户端与数据库服务器之间的通信协议。它负责解析和处理客户端发送的请求并将请求转换为数据库服务器能够理解的格式。同时它也将数据库服务器的响应转换为客户端能够理解的格式并返回给客户端安全性管理连接层负责处理数据库的安全性。它验证客户端的身份和权限确保只有经过授权的客户端能够访问数据库。连接层还可以对客户端发送的数据进行加密和解密以保护数据库中的敏感信息异常处理连接层还负责处理数据库连接过程中的异常情况。它可以检测到连接超时、网络中断等异常情况并采取相应的措施如重新连接或返回错误信息给客户端
查看连接状态 通过 show processlist 或 show full processlist 命令可以查看连接状态 Id线程 idUser启动这个线程的用户Host发送请求的客户端的 IP 和端口号db当前命令在哪个库执行Command该线程正在执行的操作命令 Create DB正在创建库操作Drop DB正在删除库操作Execute正在执行一个 Prepared StatementClose Stmt正在关闭一个 Prepared StatementQuery正在执行一个语句Sleep正在等待客户端发送语句Quit正在退出Shutdown正在关闭服务器Time表示该线程处于当前状态的时间单位是秒State线程状态 Updating正在搜索匹配记录进行修改Sleeping正在等待客户端发送新请求Starting正在执行请求处理Checking table正在检查数据表Closing table : 正在将表中数据刷新到磁盘中Locked被其他查询锁住了记录Sending Data正在处理 Select 查询同时将结果发送给客户端Info一般记录线程执行的语句默认显示前100个字符。想查看完整的使用 show full processlist; # 查看连接状态
show processlist; 3 核心业务层
3.1 查询缓存 当 MySQL 接收到一个查询请求时它首先会检查查询缓存中是否已经存在与该查询请求相同的查询结果。之前执行过的语句及其结果可能会以 key-value 对的形式被直接缓存在内存中。其中 key 是查询的语句value 是查询的结果。如果存在MySQL 会直接返回缓存中的结果而不需要再执行查询语句。如果查询缓存中没有该查询结果MySQL 会执行查询语句并将结果存储在查询缓存中以便下次相同的查询可以直接从缓存中获取结果。我们一般不使用查询缓存因为一旦查询涉及的表发生改变该缓存会失效会被查询缓存清除。从 MySQL 8.0 版本开始MySQL 不再支持查询缓存。
3.2 解析器 MySQL 首先会进行词法分析 (Lexical scanner)将 SQL 语句分成一个个的词法单元 (Token) 。其中 Token 中包含 Keyword也称 symbol和非 Keyword。之后根据语法分析 (Grammar rule module) 生成一棵对应的“解析树”。最后进行语义分析检查“解析树”中的元素是否在数据库中有对应的实体并验证操作的合法性。例如会检查数据表和数据列是否存在还会解析名字和别名看看它们是否有歧义最后生成新的“解析树”。
3.3 优化器 优化器会根据“解析树”生成最优的执行计划。这些执行计划可以分为两类静态优化编译时优化、动态优化运行时优化。 MySQL 能够处理的优化类型
重新定义关联表的顺序将外连接转化为内连接使用等价变换规则简化并规范 SQL 语句如5 5 AND a 5) 会被改写成 a 5预估并转化为常数表达式当 MySQL 检测到一个表达式可以转化为常数时会一直把该表达式作为常数进行优化处理如在索引列执行 COUNT()、MIN() 和 MAX()子查询优化减少数据访问次数提前终止查询当已经满足查询需求时MySQL 能够立刻终止查询如使用 LIMIT 子句或条件不成立时立刻终止后续查询等值传播如果两个列的值通过等式关联MySQL 能够把其中一个列的 WHERE 条件传递到另一个列上
select g1.id,g1.name
from goods g1
inner join goods g2 using(id)
where g1.id 5;# where g1.id 5 等价于 where g1.id 5 and g2.id 5
select g1.id,g1.name
from goods g1
inner join goods g2 using(id)
where g1.id 5 and g2.id 5; 列表 IN() 的比较如 IN(2,1,3)MySQL 会 IN() 列表中的数据进行排序排序后为 IN(1,2,3)然后可以通过二分查找的方式确定列表中的值是否满足条件
3.4 执行器 MySQL 执行器是 MySQL 服务器中的一个组件它负责执行优化器生成的执行计划并返回查询结果。 MySQL 执行器的主要职责包括
执行查询计划根据优化器生成的执行计划执行器会执行相应的操作如读取数据、连接表、执行排序、聚合等处理数据执行器会从存储引擎中读取数据并对数据进行处理如过滤、排序、分组等返回结果执行器会将处理后的数据返回给客户端通常以行的形式返回管理事务执行器会负责管理事务的提交和回滚确保数据的一致性和完整性处理错误如果在执行过程中发生错误执行器会捕获错误并将其返回给客户端
执行一条 SQL 语句的过程 4 存储引擎层 MySQL 存储引擎是 MySQL 数据库的核心组件之一它负责管理数据的存储和访问。MySQL 支持多种存储引擎每个存储引擎都有自己的特点和适用场景。常见的存储引擎包括
InnoDBInnoDB 是 MySQL 的默认存储引擎它支持事务、热备份可以在不停机的情况下进行数据备份、行级锁、外键约束等特性适用于大多数应用场景MyISAMMyISAM 是 MySQL 的早期存储引擎它支持快速的读取和插入操作但不支持事务和外键约束MemoryMemory 存储引擎将数据存储在内存中适用于需要快速访问数据的场景但数据在服务器重启后会丢失CSVCSV 存储引擎将数据存储为 CSV 文件适用于需要导入和导出数据的场景ArchiveArchive 存储引擎用于存储归档数据支持快速的插入和压缩操作但不支持索引和查询
存储引擎层的主要职责包括
管理数据存储存储引擎负责将数据存储在磁盘上并提供高效的数据访问方式支持索引存储引擎负责管理索引的创建、维护和查询处理事务存储引擎支持事务的原子性、一致性、隔离性和持久性提供数据恢复存储引擎负责在服务器崩溃或意外关闭后恢复数据的完整性优化查询性能存储引擎会根据查询条件和索引选择最优的查询计划来提高查询性能
5 参考文档
《高性能MySQL》
深入浅出MySQL - 架构与执行 (https://www.cnblogs.com/novwind/p/17489997.html)
MySQL架构原理(详解) (https://cloud.tencent.com/developer/article/1981543)
MySQL架构详解 (https://mdnice.com/writing/43f52aeaee9644b1bc1373ff85f89972)