IT袋

当前位置:主页 > 经验教程 > 建站编程 >

InnoDB持久化策略以及过程详解

InnoDB持久化策略以及过程详解(3)

时间:2023-09-23 22:59:21 来源:IT袋 作者:苏晓敏
导读:InnoDB持久化策略以及过程详解,下图展示了一组4个文件的redolog日志,checkpoint_lsn之前的空间表示可以进行写的文件。 redolog日志 我们再看下log buffer刷盘的具体过程: 客户端向数据库发送

InnoDB持久化策略以及过程详解

下图展示了一组4个文件的redolog日志,checkpoint_lsn之前的空间表示可以进行写的文件。

InnoDB持久化策略以及过程详解

redolog日志

我们再看下log buffer刷盘的具体过程:

  1. 客户端向数据库发送写命令。
  2. 数据库收到写命令。
  3. 数据库通过系统调用将数据写入内核缓冲区(Page Cache)。
  4. 操作系统将缓冲区数据传输至磁盘控制器,暂存在磁盘缓冲区。
  5. 磁盘控制器将数据精准的写入物理磁盘。

如果数据库停机,那么第三步之后操作系统可以保证数据写入磁盘;如果是操作系统停机,此时磁盘也无法正常工作,那就必须完成这五步才能保证数据落盘。

如上所述,在将写操作写入redolog的过程中也不是直接就进行磁盘IO来完成的,而是分为三个步骤:

InnoDB持久化策略以及过程详解

步骤

  1. 写入log buffer中,这部分是属于MySQL的内存中,是全局公用的。
  2. 在事务编写完成后,就可以执行write操作,写到文件系统的Page Cache中。
  3. 执行fsync(持久化)操作,将Page Cache中的数据正式写入磁盘上的redolog文件中,也就是图中的hard disk。


InnoDB_flush_log_at_trx_commit参数控制了log buffer的刷盘时机(值可为0、1、2,默认1):

  • 设置为0:每隔1秒从log buffer写入Page cache,并马上刷盘,mysql服务故障或者主机宕机则丢失1秒(由log buffer的innodb_flush_log_at_timeout参数控制)数据。
  • 设置为1:事务提交时,立刻从log buffer写入Page cache, 并马上刷盘,mysql服务故障或者主机宕机不会丢失数据,但会频繁发生磁盘IO。
  • 设置为2:事务提交时,立刻从log buffer写入Page cache,每隔1秒刷盘,mysql服务故障不会丢失数据,因为数据已经进入操作系统缓存,与mysql进程无关了,主机宕机则丢失1秒数据。

除此之外,当log buffer空间不足、做checkpoint、Mysql正常关闭、binlog切换等情况也会触发redolog刷盘。刷盘操作是异步IO,由专门的线程完成这件事,不会阻塞用户请求的处理。redolog如果没有及时刷盘或者只刷盘一部分,是会导致事务丢失的。

undolog持久化过程

InnoDB的undolog严格的讲不是Log,而是数据,因此他的管理和落盘都跟数据一样:

  • undolog的磁盘结构并不是顺序的,而是像数据一样按Page管理。
  • undolog写入时,也像数据一样产生对应的redolog。
  • undolog的Page也像数据一样缓存在Buffer Pool中,跟数据Page一起做lru换入换出,以及刷脏。undo page的刷脏也像数据一样要等到对应的redolog落盘之后。

相关阅读

  • OSPF中LSA主要的5种类型详解 OSPF的LSA类型有哪些

    OSPF中LSA主要的5种类型详解 OSPF的LSA类型有哪些

    相对于大多数人OSPF中LSA主要的5种类型详解的IT小经验,接下来IT袋网小编就来介绍。 一台路由器中所有有效的LSA通告都被存放在它的链路状态数据库中,正确的LSA通告可以描述一个OSPF区域的网

  • lol无法连接服务器是什么原因 lol无限闪退重新连接的方法

    lol无法连接服务器是什么原因 lol无限闪退重新连接的方法

    小编为大家解答lol无法连接服务器是什么原因和lol无限闪退重新连接的方法的IT小经验,下面为详细的介绍。 用户运行lol游戏的时候会提示无法连接服务器的情况,今天为大家带来lol无法连接

  • html网页设计模板网站有哪些 html5网页前端设计步骤

    html网页设计模板网站有哪些 html5网页前端设计步骤

    本文核心内容:html网页设计模板网站有哪些和html5网页前端设计步骤方面的讲解,接下来IT袋带大家一起了解。 小型集合Mashup模板提供HTML/CSS、Sketch和NPM等免费模板。这个设计非常现代,绝对值

  • redis常见字符乱码问题及解决办法

    redis常见字符乱码问题及解决办法

    小编为大家说一说redis常见字符乱码问题及解决办法的教程内容,接下来分享详细内容。 redis常见字符乱码问题及解决办法 问题 redis保存数据后出现\xac\xed\x00\x05t\x00 解决办法 创建一个配置类