Mysql性能优化-第一课
2022-02-11 21:42:41 0 举报
Mysql,Buffer Pool,数据库整体架构和执行原理
作者其他创作
大纲/内容
描述数据
缓存结果
2. 写入修改前的数据快照(数据回滚)
SELECT
(Con)
后台线程
每次写Log Buffer并且写Page Cache和fsync()
子查询优化
sc
CONDITIONS
数据页
Buffer Pool(128MB)
一行数据
返回结果
数据页4
Extent
读取16KB数据
缓存页
异步刷新到磁盘
外连接、嵌套连接优化
执行器
AND
②
预处理器
3. 刷新到磁盘
数据页(16KB)
InnoDB逻辑存储结构
硬盘
数据页2
提交事务
代价估算公式
Segment
SQL PARSER
3. 刷盘(fsync())
顺序扫描
磁盘
......
数据页8
Mysql
DB File
数据页7
每次写Log Buffer
API接口
RBO
生成SQL语法树
存在
Undo Log
....
文件系统缓存(Page Cache)
数据页1
student
解析器
Buffer Pool
InnoDB Buffer Pool
查询缓存
N_page * a_tuple_IO_time + N_tuple * a_tuple_CPU_time
innodb_flush_log_at_trx_commit=0
表排序
逻辑查询优化
多表连接
条件子局优化
SelList
Mysql8.0中已经去掉了查询缓存模块
新解析树
CBO
(Attribute)
Redo LogBuffer
innodb_flush_log_at_trx_commit=2
FIELDS
innodb_flush_log_at_trx_commit=1
优化器模式
Flush链,记录哪些数据被修改需要刷到磁盘
数据页5
course
1.2. 写redo日志
USERNAME
加载一页数据到Buffer Pool中
2. 写入文件系统缓存
Row
IO线程
(FieldName)
查询优化器-物理查询优化
C_index + N_page_index * a_page_IO_time
⑥
扫描方式
文件系统
2. 更新内存数据
查询优化器-逻辑查询优化
STATUS
TABLES
1.1. 更新内存数据
InnoDB
④
⑧
MyISAM
TableSpace
不存在
查询重写
name
MidPoint Insection
每隔1s,把Log Buffer中的内容写到Page Cache
FROM
数据页第一次被加载
脏数据
WHERE
热数据区
⑤
Redo Log
③
刷新到磁盘
每秒fsync()刷盘
数据页6
C.cno=22
SQL(更新)
从冷数据区尾部淘汰不常访问的缓存
Optimizer(优化器)
AGE
⑦
ib_logfilex
C.cno=SC.cno
加载
查询执行引擎
(Condiction)
添加到冷数据区的head(头插法)
生成执行计划
20
USERINFO
操作系统
每次写Log Buffer并且写Page Cache
1
默认在1s之后,如果该缓存页再次被访问,则会移动到热数据的头部
执行计划
class_name
解析树
3.2. 写redo日志
物理查询优化
客户端
请求
4. 提交事务,把Redo日志写入磁盘
①
SQL语句
每秒写PageCache并且fsync()刷盘
存储引擎
查询优化器
3.1. 更新内存数据
1. 加载一页数据到Buffer Pool中
冷数据区
语法解析
FromList
索引
结果
查询优化
Page
生成语法查询树(SELECT_LEX)
更新的数据有可能存在于缓冲区,也有可能不存在
数据页9
数据页3
索引扫描
gt
SQL
PASSWORD
eq
收藏
收藏
0 条评论
下一页