美文网首页
InnoDB 缓存池 Buffer Pool 及 Redo lo

InnoDB 缓存池 Buffer Pool 及 Redo lo

作者: 编程人生 | 来源:发表于2023-12-15 13:36 被阅读0次

1.缓存池 Buffer Pool 

    数据是存放在磁盘中, 要更新一条数据,首先需要把这条数据加载到内存中,在内存中修改完后再写回磁盘,由于 磁盘的IO 读写比起 内存读写 很慢, 所以每修改一条数据进行一次IO 显然不行. 怎么办呢, InnoDB中 加了 缓存池 Buffer Pool , 把读取过的数据缓存起来.

    修改数据的时候也是 先写入Buffer Pool ,然后再刷到磁盘中.多长时间刷一次? InnoDB 有一个专门刷盘的线程,每隔一段时间会将buffer Pool 中多个修改刷到磁盘.

    BufferPool 的作用就是提高读写效率.

在刷盘前, 数据库宕机或重启, 那岂不是数据丢失了?  Redo log 登场

InnoDB 把所有写入缓存的修改数据 同时会写入 Redo log 文件,Redo 保存在磁盘中.Mysql 重启后 根据Redo Log 文件进行数据恢复.

 写Redo log 和 写数据到磁盘有啥区别?  

    既然写Redo log 也是把数据写到 磁盘 ,那为何不直接写入磁盘呢?  原因是写磁盘 首先要寻址, 因为我们需要的数据可能是分开存储在不同的扇区, 所以 ,可能会找到多个扇区 才能 把我们需要的数据找全, 这个过程也称作随机I/O.读取数据速度较慢.

    而Redo log 文件是将所有的修改都写到一块, 不需要从磁盘中其他地方去重复找我们需要的数据, 所以写 Redo Log 又称顺序I/O .当服务重启后,只需要一次性将Redo Log 重新加载一次. 

    因此,使用 Redo log 在保证数据安全的同时也提升了系统效率.

上图中 就是 Redo log . ib_logfire0 和 ib_logfire1 默认是两个, 一个48M. 

Redo log 特点

1. redo log 是InnoDB 引擎实现的, 并不是所有引擎都有. 支持崩溃恢复时 InnoDB 引擎的一个特点.

2.redo log 不是记录数据也更新后的状态,而是记录数据更新内容,

3.redo log 大小时固定的,前面的内容会被覆盖, 一旦写满会 将buffer pool 刷到 磁盘中.腾出空间记录后面的修改.

提一下Undo log

那 undo log 又是什么?  undo log 又称事务日志, 记录事务发生前数据的状态,主要用于事务回滚,数据恢复.保证了事务的原子性.

Redo log 和 Undo log 都和事务有关,所以又称 事务日志.

相关文章

网友评论

      本文标题:InnoDB 缓存池 Buffer Pool 及 Redo lo

      本文链接:https://www.haomeiwen.com/subject/vbxggdtx.html