MySQL整体概述
2020-08-06 14:34:19 0 举报
mysql
作者其他创作
大纲/内容
8、随机写入磁盘,以page为单位写入,这步做完磁盘里的age=2
一个数据版本,对于一个事务视图来说,除了自己的更新总是可见以外,有三种情况:版本未提交,不可见;版本已提交,但是是在视图创建后提交的,不可见;版本已提交,而且是在视图创建前提交的,可见。事务的可重复读的能力是怎么实现的?可重复读的核心就是一致性读(consistent read);而事务更新数据的时候,只能用当前读。如果当前的记录的行锁被其他事务占用的话,就需要进入锁等待。而读提交的逻辑和可重复读的逻辑类似,它们最主要的区别是:在可重复读隔离级别下,只需要在事务开始的时候创建一致性视图,之后事务里的其他查询都共用这个一致性视图;在读提交隔离级别下,每一个语句执行前都会重新算出一个新的视图。
如果事务提交失败要回滚数据,可以用undo日志里的数据恢复buffer pool里的缓存数据
4、写入redo日志
5、准备提交事务redo日志写入磁盘
执行器
binlog日志文件server层age=2
修改的数据
IO线程
查询缓存
语法词法分析
7、写入commit标记到redo日志文件里,提交事务完成,该标记为了保证事务提交后redo与binlog数据一致
client执行sqlupdate set age=2 where id=1id为1的数据原age为1
2、写入更新数据的旧值便于回滚
如果事务提交成功,buffer pool里的数据还没来得及写入磁盘,此时系统宕机了,可以用redo日志里的数据恢复buffer pool里的缓存数据
连接器
InnoDB存储引擎
这两种日志有以下三点不同。1、redo log 是 InnoDB 引擎特有的;binlog 是 MySQL 的 Server 层实现的,所有引擎都可以使用。2、redo log 是物理日志,记录的是“在某个数据页上做了什么修改”;binlog 是逻辑日志,记录的是这个语句的原始逻辑,比如“给 ID=2 这一行的 c 字段加 1 ”。3、redo log 是循环写的,空间固定会用完;binlog 是可以追加写入的。“追加写”是指 binlog 文件写到一定大小后会切换到下一个,并不会覆盖以前的日志。redo log 主要节省的是随机写磁盘的 IO 消耗(转成顺序写)而 change buffer 主要节省的则是随机读磁盘的 IO 消耗。
6、准备提交事务binlog日志写入磁盘
pageage=1。。。
分析器
磁盘文件(ibd)
redo日志文件Innodb引擎特有age=2
调用引擎接口
执行计划生成索引选择
数据库的增删改查都是直接操作buffer pool,buffer pool一般设置为机器内存的60%左右
3、更新内存数据
Buffer Pool缓存池
优化器
binlog主要用来恢复数据库磁盘里的数据
管理连接与权限校验
page
Redo log Buffer
uodo日志文件Innodb引擎特有age=1
1、加载缓存数据加载id为1的记录所在页的整页数据
server层
0 条评论
下一页