当update语句提交后,数据库做了哪些操作?

问题

详细描述用户连接数据库,执行update语句commit结束后,数据库内部的运行流程。

答案

commit操作

检查点机队列中相关数据块的提交状态修改为已提交
释放持有的锁资源
返回给用户进程提交完成的信息

Buffer Cache & DBWR
Buffer Cache其实就是磁盘数据文件的缓存,以修改块的操作为例,如update,只是修改Buffer Cache中的Buffer,修改完成后,update操作就算完工了。这样Buffer和磁盘中的Block就不一致了,Buffer中有用户最新修改的数据,这些数据还没有写入磁盘。这样的Buffer就是脏Buffer(也可称脏块)。脏块由DBWR进程统一写磁盘,脏块写入磁盘后就不是脏块了,所以DBWR写脏块这个过程,也叫刷新脏块

CKPT & DBWn & LGWR

CKPT会触发数据库写进程(DBWn),通知DBWn将当前检查点队列中已标记为提交状态的数据块从缓存高速缓冲区读出并写入到数据文件中(database buffer cache -> datafiles),DBWn在执行前会首先触发一次日志写,确保写入数据文件的提交过的数据块所对应的的重做条目都已持久化在联机重做日志文件中(redo log buffer -> online redo log files)
在DBWn把检查点队列记录的所有已提交的数据块全部成功写入数据文件后,CKPT会用控制文件头记录SCN把数据库全部的数据文件头的SCN字段值刷新一遍,刷新完成后,每个数据文件头的的SCN字段值和控制文件保持一致(一致性数据库的标志)。

原理大图
解析Redo数据流
详细解析update语句的过程

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值