暂无图片
MySQL的redo机制跟Oracle一样吗?
我来答
分享
Quick
2024-02-20
MySQL的redo机制跟Oracle一样吗?

Oracle的redo文件是循环使用的,写满一个就切换到下一个,但在覆盖写之前要确保被覆盖的redo文件处于inactive状态(记录的脏数据块已写入磁盘)。如果所有的redo文件都处于active状态,数据库会挂起,等待检查点。

MySQL的redo也是循环使用,如果切换时下一个redo文件记录的脏数据页还未写入磁盘,MySQL会怎样?是不是也会挂起等待检查点?

还有,MySQL的redo切换会不会触发检查点?

MySQL的检查点触发机制是什么?

MySQL的redo跟binlog是什么关系?

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

1.  MySQL的redo  log(InnoDB引擎的事务日志)也是循环使用的,当下一个redo  log文件还未被刷新到磁盘时,MySQL会挂起等待,直到该redo  log文件被刷新到磁盘。

2.  MySQL的redo  log切换不会直接触发检查点。但是,当redo  log空间不足时,MySQL会触发检查点操作,将脏页刷新到磁盘,以便释放redo  log空间。

3.  MySQL的检查点触发机制主要有以下几种情况:(1)  当redo  log空间不足时,会触发检查点操作,以便释放redo  log空间;(2)  当系统空闲时,MySQL会定期触发检查点操作,以减少系统崩溃时数据恢复的时间;(3)  当执行FLUSH  TABLES  WITH  READ  LOCK或者SET  GLOBAL  innodb_fast_shutdown=0命令时,会触发检查点操作。

4.  MySQL的redo  log和binlog都是MySQL的日志系统,但是它们的作用和使用场景不同。redo  log主要用于保证事务的持久性,它是InnoDB引擎级别的日志,记录了每个事务对数据库的修改。binlog是MySQL服务器级别的日志,记录了所有的DDL和DML操作,主要用于实现MySQL的主从复制和数据恢复。

暂无图片 评论
暂无图片 有用 8
Quick
题主
2024-02-20
那事务结束(commit或rollback)会触发检查点吗?
lianR

在MySQL中,事务结束(commit或rollback)并不会直接触发检查点。检查点(Checkpoint)是数据库系统中的一个机制,主要用于减少恢复时间,通过将内存中的修改过的页(脏页)刷新(写)回磁盘。在MySQL中,检查点的触发主要由InnoDB存储引擎的内部机制决定,例如,当redo  log空间不足时,或者达到了预设的时间间隔等。

暂无图片 评论
暂无图片 有用 1
Quick
题主
2024-04-17
mysql默认提交操作。那每一条sql都可以看作是一个事务,那岂不是所有的sql进行的变更都会记录到redo,这跟binlog在内容上岂不是一样了?
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏