mysql update执行逻辑
2021-02-26 13:51:52 3 举报
mysql的update语句的内部实现
作者其他创作
大纲/内容
调用引擎提交事物接口
通知执行器可以提交
返回数据行
写入binlog并把binlog写入磁盘
存储引擎(InnoDB)
将新行更新到内存
将数据返回给执行器
查询我的任务列表
执行器
写入redo log处于prepare阶段
update t set c=c+1 where id =2
数据页在内存中
从磁盘读入内存
不在内存中
内存
取 id=2 这行数据
将redo log改为commit状态
redo log: 重做日志-->在引擎中生成(InnoDB)redo log的写入有两个步骤:prepare和commit 这就是\"两阶段提交\"binlog: 归档日志-->在server中生成(所有引擎都可用)redo log 是记录这个页做了什么改动binlog 有两种模式:statement格式是记录sql语句,row格式是会记录内容,记两条更新前和更新后的值都记录redo log 用于保证 crash-safe 能力。innodb_flush_log_at_trx_commit 这个参数设置成 1 的时候,表示每次事务的 redo log 都直接持久化到磁盘。这个参数我建议你设置成 1,这样可以保证 MySQL 异常重启之后数据不丢失。sync_binlog 这个参数设置成 1 的时候,表示每次事务的 binlog 都持久化到磁盘。这个参数我也建议你设置成 1,这样可以保证 MySQL 异常重启之后 binlog 不丢失。
磁盘
客户端
mysql空闲时写入磁盘
收藏
收藏
0 条评论
下一页