diff --git a/Database.md b/Database.md index cd1ad87..05bb64a 100644 --- a/Database.md +++ b/Database.md @@ -2455,6 +2455,8 @@ MySQL 每执行一条 DML 语句,先将记录写入 redo log buffer,后续 **WAL(Write-Ahead Logging)** +WAL(Write-Ahead Logging,预写式日志)是一种数据安全写入机制,即**先写日志,再写磁盘**,这样保证数据的安全性。先在内存中提交事务,然后写日志(在InnoDB中就是Redo Log,日志是为了防止宕机导致内存数据丢失),然后再后台任务中把内存中的数据异步刷到磁盘。 + **作用** @@ -2484,17 +2486,9 @@ redo log 实际的触发 fsync 操作写盘包含以下几个场景: - - ## 回滚日志(undo log) -undo log记录的是数据修改之前的数据。主要用于**回滚,**MySQL数据库事务的**原子性**就是通过 undo log实现的。 - -undo log主要存储的是数据的逻辑变化日志,比如我们要 insert 一条数据,那么 undo log 就会生成一条对应的 delete 日志。所以当需要回滚时,只需要利用undo log 就可以恢复都修改前的数据。 - -undo log另一个作用是用来实现**多版本并发控制 MVCC。** - -undo记录中包含了记录更改前的镜像,如果更改数据的事务未提交,对于隔离级别大于等于 read commit的事务而言,不应该返回更改后的数据,而应该返回更改前的数据。 +回滚日志(undo log)主要存储的是数据的逻辑变化日志,用于回滚操作。比如我们要 insert 一条数据,那么 undo log 就会生成一条对应的 delete 日志。所以当需要回滚时,只需要利用undo log 就可以恢复都修改前的数据。 @@ -2505,8 +2499,6 @@ undo记录中包含了记录更改前的镜像,如果更改数据的事务未 - - # 数据切分 ## 水平切分