总览
写data buffer和redolog buffer几乎同时;
data buffer只在checkponit点才会刷新到磁盘;
redolog buffer会在事务执行过程中随时写入磁盘,且对应事务的脏页写入到磁盘之后,redo log的使命也就完成了,重做日志占用的空间就可以重用(被覆盖);
undolog会在事务开始之前基于当前版本生成,undo 也会产生 redo 来保证undo log的可靠性;
当事务提交之后,undo log并不能立马被删除,而是放入待清理的链表,由purge线程判断是否由其他事务在使用undo段中表的上一个事务之前的版本信息,决定是否可以清理undo log的日志空间;
默认情况下undo文件是保持在共享表空间的,也即ibdatafile文件中;
事务提交的时候,一次性将事务中的sql语句(一个事物可能对应多个sql语句)按照一定的格式记录到binlog中;
数据刷盘规则
内存中(buffer pool)未刷到磁盘的数据称为脏数据(dirty data)。由于数据和日志都以页的形式存在,所以脏页表示脏数据和脏日志。
innodb中,数据刷盘的规则只有一个:checkpoint。但是触发checkpoint的情况却有几种。不管怎样,checkpoint触发后,会将buff