ACID实现原理
原子性
一个事务是不可分割的工作单位
undo log(原子性,隔离性的基础):逻辑文件,记录sql相关信息,发生回滚时,根据undo log做与之前相反的工作,还原数据。
持久性
一旦提交,永久性改变。
redo log:buffer pool作为访问数据库的缓冲,从数据库读取数据时先从buffer pool读取,未读到,就从磁盘中读取并放入buffer pool中。写数据时,先写到buffer pool中,定期刷新到磁盘,提高读写效率。mysql宕机时刷脏未完成可能丢失数据,所以引入redo log记录,以物理格式记录,写数据时,写入buffer pool,同时在redo log中记录,提交时将日志写入磁盘,buffer pool刷盘后,redo log可以被覆盖。
redo log也有一个缓冲区,innodb_log_buffer,InnoDB先将redo log写入缓冲区,再通过三种方式刷盘到磁盘。
【
三种刷盘:
1.主线程每秒刷盘一次;2.缓冲区所占内存超过50%;3.事务提交时。
】
redo log比直接在buffer pool中写得快?
刷脏是随机IO,每次修改数据位置随机,redo log是追加操作,是顺序IO,且刷脏是以数据页page为单位,16kb,一个page页的一小部分修改也需