暂无图片
MYSQL 大事务运行过程中 REDO LOG 会发生什么?
我来答
分享
暂无图片 匿名用户
MYSQL 大事务运行过程中 REDO LOG 会发生什么?

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

我来答
添加附件
收藏
分享
问题补充
2条回答
默认
最新

在MySQL大事务运行过程中,REDO LOG会发生以下变化:

  1. 事务开始时,MySQL会在REDO LOG中记录事务的开始标记,以便后续的恢复操作。

  2. 当事务执行INSERT、UPDATE或DELETE等数据修改操作时,MySQL会将这些操作的相关信息记录到REDO LOG中,包括修改的表、行记录、旧值和新值等。

  3. 在事务提交之前,MySQL会将REDO LOG中的所有修改操作持久化到磁盘上,以保证事务的持久性。这个过程称为REDO日志刷盘(Redo Log Flush)。

  4. 当系统由于某种原因(如MySQL崩溃或断电)重新启动时,MySQL会从REDO LOG中读取事务的开始标记以及所有未提交的修改操作,并将其应用到内存中的数据页中,以恢复事务的状态。

  5. 事务提交后,MySQL会在REDO LOG中记录事务的提交标记,并在内存中更新相关的数据页。

需要注意的是,由于大事务可能会对数据库的性能和可用性产生较大的影响,因此建议在执行大事务之前,先进行充分的测试和优化,以确保事务的执行效率和可靠性。此外,在MySQL的配置中,也可以调整REDO LOG的大小和刷盘策略等参数,以适应不同的业务需求和硬件环境。

暂无图片 评论
暂无图片 有用 1
打赏 0
大大刺猬
  1. 大事务会被拆分为若干个迷你事务(MTR), 每个MTR会写入若干个 redo block (512字节)

  2. 当系统出发刷盘操作(每秒,redo buffer到一半了, 其它事务提交了), 都会把redo buffer里面的所有数据(不管哪个事务的)写入REDO LOG

  3. 即使是undo操作, 也会写入redo log, mysql里所有操作都会写redo…(顺序循环写)

mtr类型: https://dev.mysql.com/doc/dev/mysql-server/latest/mtr0types_8h.html

暂无图片 评论
暂无图片 有用 0
打赏 0
回答交流
Markdown


请输入正文
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏