文档主页
MySQL 8.4 参考手册
相关文档 下载本手册
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
Man Pages (TGZ) - 258.5Kb
Man Pages (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


17.11.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 系统发布剩余的读取请求。

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

双写缓冲区

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

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

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