10bet官方网站文档家里
MySQL 5.7参考手册
相关的文档10bet官方网站 本手册下载 本手册摘录

14.12.1 InnoDB磁盘I/O

InnoDB在可能的情况下使用异步磁盘I/O,通过创建一些线程来处理I/O操作,同时允许其他数据库操作在I/O仍在进行时继续进行。在Linux和Windows平台上,InnoDB使用可用的操作系统和库函数来执行本地的异步I / O。在其他平台上,InnoDB仍然使用I/O线程,但线程实际上可能等待I/O请求完成;这种技术被称为模拟异步I / O。

预读

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

  • 在顺序预读中,如果InnoDB注意,对表空间中某个段的访问模式是顺序的,它提前将一批数据库页的读取提交给I/O系统。

  • 在随机预读中,如果InnoDB注意到表空间中的某些区域似乎正在被完全读到缓冲池中,它将剩余的读发送到I/O系统。

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

Doublewrite缓冲

InnoDB使用一种新的文件刷新技术,涉及名为doublewrite缓冲,大多数情况下默认启用(innodb_doublewrite =对)。它增加了意外退出或断电后恢复的安全性,并通过减少对Unix的需求提高了大多数Unix上的性能fsync ()操作。

在向数据文件写入页面之前,InnoDB首先,将它们写到一个称为doublewrite缓冲区的连续表空间区域。只有在doublewrite缓冲区的写入和刷新完成后才会执行InnoDB将页写入数据文件中的适当位置。如果存在操作系统、存储子系统或意外情况mysqld进程在页写中间退出(导致撕页条件),InnoDB稍后可以在恢复期间从doublewrite缓冲区中找到该页的良好副本。

如果系统表空间文件(ibdata文件)位于支持原子写的Fusion-io设备上,doublewrite缓冲自动关闭,所有数据文件使用Fusion-io原子写。因为doublewrite缓冲区设置是全局的,所以对于驻留在非fusion -io硬件上的数据文件,doublewrite缓冲区也被禁用。该特性仅支持Fusion-io硬件,仅支持Linux下的Fusion-io nvvmfs。为了充分利用这一特性,我们需要innodb_flush_method设置O_DIRECT建议。