diff --git a/mysql/mysql文档/mysql_事务.md b/mysql/mysql文档/mysql_事务.md index 0e92456..6329c02 100644 --- a/mysql/mysql文档/mysql_事务.md +++ b/mysql/mysql文档/mysql_事务.md @@ -171,6 +171,15 @@ redo log buffer会在如下时机将log block刷新到磁盘中: - log buffer中有一半的内存空间已经被使用时 - log checkpoint时(checkpoint时会导致脏页被刷新到磁盘上,而WAL要求脏页刷新前刷新redo log buffer) +##### WAL +`write-ahead logging`是一种为database系统提供`原子性`与`持久性`的技术。 + +`write ahead log`是`append-only`的辅助磁盘存储结构,用于crash recovery和transaction recovery。 + +在使用`WAL`的系统中,在所有的changes被应用到数据库之前,要求changes都被写入到log中。 + +所以,在innodb中,脏页被刷新到磁盘之前,脏页对应的`newest_lsn`之前的redo log都必须被刷新到磁盘中。`redo log file中最新的lsn必须大于磁盘页文件中最大的lsn`。 + 在redo log buffer中的log block刷新到redo log file中时,其会追加(append)到redo log file的末尾。当redo log group中的一个文件被写满时,其会接着写入下一个redo log file,其行为称为`round-robin`。 在redo log group中的每个redo log file中,其前2KB(4个log block大小)均不用于存储log block,前2KB内容如下: