首页 > 其他 > 详细

事务2

时间:2020-11-14 17:33:18      阅读:35      评论:0      收藏:0      [点我收藏+]

 

redo日志位置:

  iblogfile0, iblogfile1

redo buffer:

  redo的buffer:数据页的变化信息+数据页当时的LSN号

redo的刷写策略:

  commit;

  刷新当恰尼事务的redo buffer到磁盘

  还会顺便将一部分redo buffer 中没有提交的事务日志页刷新到磁盘

 

MYSQL: 在启动时,必须保证redo日志文件和数据文件的LSN必须一致,如果不一致就会触发CSR,最终保证一致

情况一:

  技术分享图片

 

 

 

  我们做了一个事务,begin, update, commit;

  1、在begin后,会立即生成一个TXID,假设TXID=T01

  2、update时,会将需要修改的数据页(dp_01/ LSN=101),加载到data buffer中

  3、DBWR线程,会进行dp_01数据页修改更新,并更新dp_01/LSN=102

  4、LOGBWR日志写线程,会将dp_01数据页的变化+LSN+TXID 存储到redo buffer

  5、执行commit 时,LGWR日志写线程会将redo buffer 信息写入red log日志文件中,基于WAL原则(日志优先写)

  6、假设此时宕机,内存脏页没有来得及写入磁盘,内存数据全部丢失

  7、MYSQL再次启动时,必须要redo log 和磁盘数据页的LSN是一致的,

     但是此时dp_01, TXID的磁盘LSN=101,dp_01/TXID=T01。

     而redo log中的LSN=102

  8、MYSQL此时无法正常启动,mysql触发CSR,在内存追平LSN号,触发ckpt,

     将内存数据页更新到磁盘,从而保证磁盘数据页和redo log的LSN号是一致的,这时MYSQL才会正常启动

  以上的工作过程,我们把它称之为基于REDO的‘前滚过程’(重做日志)

 

-----------------------------------------------------------------------------------------------------------------------------

undo

作用:

  在ACID特性中,主要保证A的特征,同时对CI也有一定功效

  (1) 记录了数据修改之前的状态

  (2) rollback 将内存的数据恢复到修改之前

  (3) 在CSR中实现未commit数据的归滚操作

  (4) 实现一致性快照,保证MVCC,读写操作不会互相阻塞

情况一:

  技术分享图片

 

 

事务2

原文:https://www.cnblogs.com/ruan-ruan/p/13973492.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!