redo log介绍
重做日志,用于记录事务操作的变化,确保事务的持久性。redo log是在事务开始后(begin; 之后)就开始记录,不管事务是否提交都会记录下来,在异常发生时(如数据持久化过程中掉电),InnoDB
会使用redo log恢复到掉电前的时刻,保证数据的完整性。
undo log 称为逻辑日志, redo log称为物理日志;
innodb_log_buffer_size
默认是16M,就是redo log缓冲区的大小,它随着事务开始,就开始写redo log,如果事务比较大,为了避免事务执行过程中花费过多磁盘IO,可以设置比较大的redo log缓存,节省磁盘IO;
redo log在磁盘上的位置是 /var/lib/mysql 下的ib_logfile0 和 ib_logfile1
buffer pool
缓存池用于加速读和加速写,直接操作 data page
,写redo log修改就算完成,有专门的线程去做把buffer pool中的dirty page写入磁盘。大小默认为134M
事务commit; 提交事务时,将InnoDB Log Buffer写入磁盘,redo log状态记录为commit;
Buffer Pool 里脏数据不需要写入磁盘与commit操作同步。而是开另一个线程再把内容写入磁盘。若这个数据刷新到磁盘的过程中出现掉电的情况,下次mysqld服务重启后,会根据redo log 内记录的数据进行数据恢复。undo log 也是要记录在 redo log 中;
事务最重要的就是写redo logo;