事务的实现
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 中
<!– more –>
除了记录事务日志 redo log 外,还会记录回滚日志 undo log,在进行数据批改时,因为某种原因失败了,须要进行回滚操作,能够利用 undo log 来将数据回滚到批改之前的样子
https://zhhll.icu/2022/ 数据库 / 关系型数据库 /MySQL/ 进阶 /Innodb/2. 事务的实现 /
本文由 mdnice 多平台公布