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