mysql架构
2021-08-04 09:51:26 0 举报
innoDB 存储引擎、SQL执行流程、mvcc多版本并发
作者其他创作
大纲/内容
线程
数据页
rollid
一条sql语句执行的流程
BufferPool:可以设置多个来实现并发,执行sql的时候需要上锁 , 一个bufferPool只能处理一个sql
OS cache
trunk
redo log block多行redo log
描述数据
内存(存放数据)
发送请求
null值列表
innoDB架构
redo log block多行redolog
缓存页
数据行
连接
tail
undo log
数据头
txid
执行器
执行sql
槽位
2、写入数据的旧值,便于数据的回滚
VALUE
页目录
rowid
undolog日志类型
……
1、buffer Pool :增删改主要对内存数据执行, 缓存很多的数据2、redo log: innoDB 特有的 日志文件 ,偏向物理性质的重做日志,记录内存修改的内容,增删改的日志同时写入, 用来mysql突然宕机的时候 , 恢复更新过的数据3、redo log buffer: 内存的缓冲区 , 用来存放redo log日志4、undo log: 数据修改之前 , 将旧的数据先做备份,便于回滚5、binlog :归档日志,mysql 服务器的日志文件———————————————————————————————————————————————free链表:磁盘数据页读取到缓存页flush链表:缓存页修改过之后,和磁盘的数据不一致变成脏页,需要将缓存的数据同步到磁盘lru链表:缓存页数量不够时,通过lru,将数据刷盘,腾出空闲页
查询优化器
数据区
连接池
访问
binglog file
调用接口,完成SQL语句
buffePool(默认128M)
head
表空间号+数据页号
槽
磁盘文件
redo 日志文件
1、用户发送请求到tomcat,通过tomcat连接池和mysql连接池建立连接, 然后通过连接发送sql语句到mysql2、mysql有个一个单独的监听线程, 读取到请求数据,拿到连接中请求的sql语句3、将获取到sql数据发送给SQL接口去执行4、SQL接口将sql 发送给SQL解析器进行解析5、将解析好的sql 发送给查询优化器 , 找最优的查询路径,然后发给执行器6、执行器根据优化后的执行方案调用存储引擎的接口按照一定的顺序和步骤进行执行
innoDB存储引擎
真实数据
磁盘(存放数据)
tomcat
undolog日志结束位置
缓存页地址
undo 日志文件
后台IO线程
表ID
数据页缓存Hash表
主键
数据区组(256个)
redo log buffer
3、更新内存的数据
可变字段
undolog日志开始位置
binlog 日志文件
查找最优路径
sql解析器
执行计划
redolog file
数据组区(256个数据区)
sql接口
buffer pool缓冲池
KEY
sql 语句
undolog日志编号
SQL语句
innoDB 存储引擎
lru链表(冷热数据)
解析sql
redo logbuffer
mysql数据库
1、加载缓存数据
flush链表
free链表
表空间ibd
0 条评论
下一页