MYSQL一条SQL的执行流程
2021-04-21 00:34:54 1 举报
MYSQL一条SQL的执行流程
作者其他创作
大纲/内容
未分析出语法语法错误
磁盘文件ibd
Mysql的User表
缓存没有
1.查询请求,先查询缓存
当这个用户的权限修改,原建立的连接不影响操作,断开连接重连权限 才生效
6、准备提交事务binlog日志写入磁盘
磁盘空间
binlog文件name = zhangsa6
2.写入更新数据前的旧值便于回滚
用户权限和信息存在磁盘空间
3、更新内存数据
分析机
如果事务提交失败要回滚数据,可以用undo日志文件的数据恢复Buffer Pool的缓存数据
7、写入commit标记到 redo日志文件里,提交事务完成,该标记为了保证事务提交后redo与binlog数据一致
由Bison语法分析把SQL生成语法树
8、随机写入磁盘文件,以page单位写入这时磁盘里的值:name = zhangsa6
一般存储静态表,极少更新的表mysql8.0已经移除缓存功能
redo日志文件(innodb引擎持有)name = zhangsa6
1.先加载缓存数据,先加载id=1的记录所在页的数据
如果事务提交成功,buffer pool还没来得及写入磁盘,数据库宕机了,可以用redo日志文件的数据来恢复buffer Pool缓存数据
执行器
修改的数据
优化器
构造执行树
查询缓存
update t set name = 'zhangsa6' where id =1;
binlog文件主要来恢复数据库磁盘里的数据
连接的建立和用户权限的鉴定
用户的操作信息
page(页)name = zhangsa。。。
计划的执行
因为更新磁盘数据,是随机I/O,性能特别差,扛不住很高并发。而这套机制可以保证每次更新请求都在font color=\"#ff0000\
词法分析
page(页)。。。
InnoDB存储引擎
I/O线程
执行计划生成索引选择
生成执行计划
4、写入redo日志
MYSQLLex完成
为什么mysql不直接更新磁盘里的数据,而设置一系统机制来更新?
5、准备提交事务redo日志写入磁盘
调用存储引擎
结束
分析机分析Token
建立连接后开辟空间
page(页)name = zhangsa6。。。
缓存有,直接返回去
语法分析
Redo Log Buffer
undo日志文件(innodb引擎持有)name = zhangsa
客户端
查询与鉴定
Buffer Pool缓存池
开始
分析器
连接器
0 条评论
回复 删除
下一页