问:redo log是什么?拿来干嘛的?
现象:如果提交一个事务,就刷新一次磁盘。那么会存在如下问题:
1、单改一条记录,至少都是刷新一个页,造成大量的磁盘I/O浪费
2、随机I/O比连续I/O慢(就是一件一件衣服洗与一堆衣服洗)。且一个事务还可能涉及到索引的维护等等,等这些全部做完再提示事务提交成功,太慢了。
答:将这些事务记录在redo log中(redo log刷盘到log file里),就提示事务提交成功
日志组
MTR:对底层页面进行一个原子性操作的过程(因为这个过程,形成了所谓的日志组)
事务---->n个 sql—>n个 MTR—>n个 redo log
redo log block(约等于buffer pool的page):存放redo log的内存页,512byte
log buffer(约等于buffer pool):被划分为若干个连续的redo log block,16MB
buf_free:空闲内存开始指针,告诉新的redo log进来放哪
buf_next_to_write:刷新指针,左边已经刷到磁盘上了,右边还没刷
log file
所以,同样,redo log也是先放到log buffer(内存)里,然后再刷到log file(磁盘)里