Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions docs/database/mysql/mysql-logs.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,18 @@ tag:

### 刷盘时机

InnoDB 刷新重做日志的时机有几种情况:

1. 事务提交:当事务提交时,相关的重做日志会被刷新到磁盘。这确保了提交的事务对于恢复是可用的。

2. 事务日志缓冲区满:InnoDB 使用一个事务日志缓冲区(transaction log buffer)来暂时存储事务的重做日志条目。当缓冲区满时,会触发日志的刷新,将日志写入磁盘。

3. Checkpoints(检查点):InnoDB 定期会执行检查点操作,将内存中的脏数据(已修改但尚未写入磁盘的数据)刷新到磁盘,并且会将相应的重做日志一同刷新,以确保数据的一致性。

4. 后台刷新线程:InnoDB 启动了一个后台线程,负责周期性地将脏页(已修改但尚未写入磁盘的数据页)刷新到磁盘,并将相关的重做日志一同刷新。

总之,InnoDB 在多种情况下会刷新重做日志,以保证数据的持久性和一致性

`InnoDB` 存储引擎为 `redo log` 的刷盘策略提供了 `innodb_flush_log_at_trx_commit` 参数,它支持三种策略:

- **0**:设置为 0 的时候,表示每次事务提交时不进行刷盘操作
Expand Down