Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

17.11.1 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 系统。

有关配置预读启发式的信息,请参阅 第 17.8.3.4 节,“配置 InnoDB 缓冲池预读”

双写缓冲区

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

在将页面写入数据文件之前,InnoDB 首先将其写入一个名为双写缓冲区的存储区域。只有在写入和刷新到双写缓冲区完成后,InnoDB 才将页面写入其在数据文件中的正确位置。如果在页面写入过程中发生操作系统、存储子系统或意外 mysqld 进程退出(导致 撕裂页),InnoDB 可以在恢复期间从双写缓冲区中找到页面的良好副本。

有关双写缓冲区的更多信息,请参阅 第 17.6.4 节,“双写缓冲区”