Mysql - UPDATE语句的执行
2024-05-16 16:54:41 0 举报
Mysql 中一个 Update 语句是如何执行的
作者其他创作
大纲/内容
数据库的增删改查操作的都是 BufferPool 中的数据,内存大小一般设置为机器内存的 60%
IO线程
binlog 日志文件(属于 service 层)name = new
STEP-3更改缓存池中数据
STEP-1 加载缓存数据加载 id=1 数据所在的 page 到BufferPool 缓存
redo 日志都是顺序写入(速度非常快),而且是特定大小的文件,写满了就再创建一个文件
生成执行计划,索引选择
STEP-7写入 commit 标记到 redo 文件事务提交完成该标记用来保证 redo 日志和 binlog
磁盘文件 idb
page 页name = new...
连接器
执行器
如果事务提交失败,可以使用 undo log 恢复 bufferPool 中的数据
恢复
管理连接与权限校验
调用引擎接口
BufferPool 缓存池
分析器
STEP-5准备提交事务redo 日志写入磁盘
如果事务提交成功后,bufferPool 的数据没有来得及写入到磁盘,此时宕机了,可以使用 redo-log 日志文件恢复 BufferPool 的缓存数据
page 页name = old...
binlog 日志文件主要用来恢复数据
优化器
修改的数据
redo 日志文件(InnoDB 特有)name = new
InnoDB 引擎
redo logbuffer pool
page 页...
查询缓存
STEP-2写入更新数据的旧值,便于回滚
客户端执行update account set name = 'new' where id = 1;id = 1 的 name 原始值为 old
undo 日志文件(InnoDB 特有)name = old
语法分析、词法分析
idb 文件是随机读写的,因为数据可能会被删除,为了不浪费空间会自动整理
STEP-8随机将 BufferPool数据以 page 为单位写入到磁盘中,这步完成后磁盘数据才为 new
STEP-6准备提交事务,事务写入
STEP-4写 redo log

收藏
0 条评论
下一页