• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • InnoDB磁盘I / O

    InnoDB在可能的情况下使用异步磁盘I / O,方法是创建多个线程来处理I / O操作,同时允许其他数据库操作在I / O仍在进行时继续进行。在Linux和Windows平台上,InnoDB使用可用的OS和库函数来执行“本机”异步I / O。在其他平台上,InnoDB仍然使用I / O线程,但是这些线程实际上可能会等待I / O请求完成。这种技术称为“模拟”异步I / O。

    预读

    如果InnoDB可以确定很快有可能需要数据的可能性很大,它将执行预读操作将数据带入缓冲池,以便在内存中可用。对连续数据发出几个大的读取请求可能比发出几个小的散布请求更为有效。有两种预读启发式InnoDB

    • 在顺序预读中,如果InnoDB注意到对表空间中某个段的访问模式是顺序的,则它会将一批数据库页的读取提前发布到I / O系统。
    • 在随机预读中,如果InnoDB注意到表空间中的某些区域似乎正在被完全读入缓冲池,则它将剩余的读操作发布到I / O系统。

    有关配置预读启发式方法的信息,请参见“配置InnoDB缓冲池预取(预读)”。

    双写缓冲区

    InnoDB使用一种新颖的文件刷新技术,该技术涉及一种称为doublewrite缓冲区的结构,该结构在大多数情况下默认为启用(innodb_doublewrite=ON)。它增加了崩溃或停电后的恢复安全性,并通过减少fsync()操作需求来提高大多数Unix版本的性能。

    在将页面InnoDB写入数据文件之前,首先将它们写入称为doublewrite缓冲区的存储区域。仅在完成对双InnoDB写缓冲区的写入和刷新之后,才将页面写入数据文件中的相应位置。如果在页面写入过程中发生操作系统,存储子系统或mysqld进程崩溃(导致页面损坏的情况),InnoDB则稍后可以在恢复期间从doublewrite缓冲区中找到该页面的良好副本。

    双重写入缓冲区存储区位于系统表空间中。如果系统表空间数据文件位于支持原子写的Fusion-io设备上,则会自动禁用双写缓冲区,而改为使用Fusion-io原子写来执行数据文件写。但是,请注意该innodb_doublewrite设置是全局的。如果禁用了doublewrite缓冲区,则对所有数据文件(包括那些不在Fusion-io硬件上的数据文件)都将禁用它。此功能仅在Fusion-io硬件上受支持,并且仅在Linux上的Fusion-io NVMFS中启用。要充分利用此功能,建议innodb_flush_method设置O_DIRECT为。