MySQL读书笔记--事务的ACID及实现

首先,非常明确的是,InnoDB实现事务主要通过redo 日志

什么是redo 日志

      redo 日志 即重做日志,主要是为了在数据库奔溃时,保证下次重启数据库时,恢复奔溃之前已提交的事务。以保证数据的完整性。

redo 日志组成

     redo日志缓冲 和 redo日志

redo 日志实现原理

   在事务提交时,InnoDB首先保证redo日志刷新到磁盘,最后才是提交事务。为了不同的需要,数据库实现三种不同的刷盘策略

   配置变量 innodb_flush_log_at_trx_commit=0/1/2 默认1
    1.表示每次调用一次fsync
    0 表示事务提交时不进行写入重做日志,这个操作在master thread中完成
    2 表示事务提交时将重做日志写入重做日志文件,但只是写入文件系统的缓存中。不进行fsync.由系统自动写入

redo日志的特性

  1.redo 日志时物理日志,记录的是4元组数据,哪个表空间,哪个文件,哪个页,哪个偏移位置,插入的字节内容

  2.redo 日志是顺序写入的

  3.redo log buffer 向 redo log file 写,是按512个字节,也就是一个扇区的大小进行写入。扇区是写入的最小单位,一定能写入成功,因此过程中不需要double write.

事务的特性ACID

 A:  原子性(atomicity),,事务是不可分割的最小单元,要么全部成功,要么全部失败
 C: 一致性(consistency) , 不会因为执行了SQL,导致数据库的完整性和约束性发生改变。比如,本来表是由唯一索引的,不用因为Insert/update/delete之后,唯一性索引遭到破坏
 I: 隔离性(isolation),事务与事务之间隔离,彼此不可见
 D:  持久性(durability),提交的修改,永久保存到数据库中,而不是像memcache那样,一旦重新,数据消失了。

猜你喜欢

转载自blog.csdn.net/H_L_S/article/details/88906809