业务的完成
MySQL在进行业务处理的时候采用了日志先行的方式来确保业务可快速和耐久运行,在写数据之前,先写日志,开端业务时,会记载该业务的一个LSN日志序列号;当执行业务时,会往Innodb_log_buffer日志缓冲区中插入业务日志(redo log);当业务提交时,会将日志缓冲区里的业务刷入磁盘,由innodb_flush_log_at_trx_commit参数进行操控何时刷入磁盘
- 0 延迟写 业务提交时不会将redo log buffer中日志写入到os buffer中,而是每秒写入os buffer并调用fsync()写入到redo log file中,如果系统溃散,将丢掉1秒的数据,性能最好,可是安全性最差
- 1 实时写,实时刷 业务每次提交都会将redo log buffer中的日志写入到os buffer并调用fsync()刷到redo log file中,尽管不会丢掉数据,可是每次都写入磁盘,IO性能较差
- 2 实时写,延迟刷 每次提交将redo log buffer中的日志写入os buffer,可是每秒调用一次fsync()将os buffer中的日志写入到redo log file中
除了记载业务日志redo log外,还会记载回滚日志undo log,在进行数据修改时,由于某种原因失利了,需要进行回滚操作,可以利用undo log来将数据回滚到修改之前的样子
本文由mdnice多渠道发布