认识MySQL
2025-12-08 23:38:54 0 举报
AI智能生成
一个SQL语句执行过程通常涉及以下核心步骤:首先,客户端通过SQL接口提交查询给数据库管理系统(DBMS)。接下来,查询被解析器(Parser)接收并检查语句的语法正确性,构建相应的查询解析树(Parse Tree)。然后,优化器(Optimizer)对该树进行评估,选择最高效的执行路径,生成一个或多个执行计划。执行器(Executor)最终根据所选的计划,逐行执行操作,可能包括读取数据页、执行联接、排序等操作。执行结果通过SQL接口返回给客户端,同时可能涉及数据格式化、缓存以及事务管理等其他相关处理。这段过程描述中,“数据库管理系统”、“执行计划”和“事务管理”为其术语修饰语。文件类型特指数据存储的格式,例如表格、索引或日志文件等,而此处描述与具体文件类型无关,主要聚焦于SQL语句的处理逻辑。
作者其他创作
大纲/内容
认识MyqSQL
SQL语句执行过程
查询语句执行流程
连接器
建立连接
认证身份
管理连接
查询缓存-8.0版本已移除
检查缓存
返回结果
缓存失效
当数据由更新操作会把缓存更新
分析器
词法分析
语法分析
优化器
选择索引
确定连接顺序
执行器
调用引擎接口
返回结果
更新语句执行流程
连接器
分析器
优化器
执行器
InnoDB引擎处理
Redo Log写入
Binlog写入
两阶段提交
日志系统
Redo Log
查询语句执行流程
连接器
建立连接
认证身份
管理连接
查询缓存-8.0版本已移除
检查缓存
返回结果
缓存失效
分析器
词法分析
语法分析
优化器
选择索引
确定连接顺序
执行器
权限校验-保险器(有可能因为触发器等无法从词法或语法识别执行权限)
调用引擎接口
返回结果
更新语句执行流程
连接器
分析器
优化器
执行器
InnoDB引擎处理
Redo Log写入
Binlog写入
两阶段提交
为什么有两阶段提交方案?
因为两个redolog和binlog是独立的两个文件,为了保证两个文件的数据一致,所以需要等两个文件写入成功再提交
怎么保证?
和常规XA概念一致,会有一个唯一的事务ID,当redolog的状态处于prepare时而没有commit时去验证binlog同一个事务ID的日志是否完整,完整则提交不完整则回滚
扩展问题-redo log buffer
是什么?
一个事务的更新过程一般来说都是多次写入日志,在多次写入日志的过程就带出了buffer这个概念来满足一个轮次的事务一致性
buffer是一块儿内存而不是日志
写入redolog文件中是commit过后的事情
服务端层级划分
Server层
SQL语句解析、优化
权限认证
SQL函数和存储过程
复制和备份
Bin Log(归档日志)
逻辑日志,存储了所有的修改数据库的语句
作用:主要用于复制与恢复动作
怎么恢复?
根据备份dump文件重放节点内的binlog。从备份节点开始到恢复的时间点
存储引擎层
作用:存储予检索
分类
InnoDB
MyISAM
Memory
redo log
黑板->账本的过程,-物理层次的日志,先写日志再写磁盘,防止并发IO导致的效率问题
保证事务的持久性,在数据库崩溃时根据这个来恢复数据
在其他数据库中可称之为预写式日志
有固定大小,当满了后只有暂停操作,将redolog写入磁盘,按照这个方式去理解循环写入
undo log
用于支持事务原子性和多版本并发控制-详细看MVCC章节
索引
收藏
0 条评论
下一页