
是不是像ORACLE样 未提交的事务REDO 也要先写入REDO LOG FILE ?

在MySQL大事务运行过程中,REDO LOG会发生以下变化:
事务开始时,MySQL会在REDO LOG中记录事务的开始标记,以便后续的恢复操作。
当事务执行INSERT、UPDATE或DELETE等数据修改操作时,MySQL会将这些操作的相关信息记录到REDO LOG中,包括修改的表、行记录、旧值和新值等。
在事务提交之前,MySQL会将REDO LOG中的所有修改操作持久化到磁盘上,以保证事务的持久性。这个过程称为REDO日志刷盘(Redo Log Flush)。
当系统由于某种原因(如MySQL崩溃或断电)重新启动时,MySQL会从REDO LOG中读取事务的开始标记以及所有未提交的修改操作,并将其应用到内存中的数据页中,以恢复事务的状态。
事务提交后,MySQL会在REDO LOG中记录事务的提交标记,并在内存中更新相关的数据页。
需要注意的是,由于大事务可能会对数据库的性能和可用性产生较大的影响,因此建议在执行大事务之前,先进行充分的测试和优化,以确保事务的执行效率和可靠性。此外,在MySQL的配置中,也可以调整REDO LOG的大小和刷盘策略等参数,以适应不同的业务需求和硬件环境。


-
大事务会被拆分为若干个迷你事务(MTR), 每个MTR会写入若干个 redo block (512字节)
-
当系统出发刷盘操作(每秒,redo buffer到一半了, 其它事务提交了), 都会把redo buffer里面的所有数据(不管哪个事务的)写入REDO LOG
-
即使是undo操作, 也会写入redo log, mysql里所有操作都会写redo…(顺序循环写)
mtr类型: https://dev.mysql.com/doc/dev/mysql-server/latest/mtr0types_8h.html


