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


MySQL 8.4 参考手册  /  ...  /  在 Linux 上使用异步 I/O

17.8.6 在 Linux 上使用异步 I/O

InnoDB 在 Linux 上使用异步 I/O 子系统(原生 AIO)来执行数据文件页面的预读和写入请求。 此行为由 innodb_use_native_aio 配置选项控制,该选项仅适用于 Linux 系统,默认情况下已启用。 在其他类 Unix 系统上,InnoDB 仅使用同步 I/O。 历史上,InnoDB 仅在 Windows 系统上使用异步 I/O。 在 Linux 上使用异步 I/O 子系统需要 libaio 库。

对于同步 I/O,查询线程将 I/O 请求排队,InnoDB 后台线程一次检索一个排队的请求,为每个请求发出同步 I/O 调用。 当 I/O 请求完成且 I/O 调用返回时,处理该请求的 InnoDB 后台线程将调用 I/O 完成例程并返回以处理下一个请求。 可以并行处理的请求数量为 n,其中 nInnoDB 后台线程的数量。 InnoDB 后台线程的数量由 innodb_read_io_threadsinnodb_write_io_threads 控制。 请参阅 第 17.8.5 节,“配置后台 InnoDB I/O 线程数量”

使用原生 AIO,查询线程直接将 I/O 请求分派到操作系统,从而消除了后台线程数量的限制。 InnoDB 后台线程等待 I/O 事件以发出完成的请求信号。 当请求完成时,后台线程会调用 I/O 完成例程并继续等待 I/O 事件。

原生 AIO 的优势在于可扩展性,适用于通常在 SHOW ENGINE INNODB STATUS 输出中显示许多挂起的读取和写入的 I/O 密集型系统。 使用原生 AIO 时并行处理的增加意味着 I/O 调度器类型或磁盘阵列控制器属性对 I/O 性能的影响更大。

原生 AIO 对 I/O 密集型系统的潜在缺点是缺乏对一次分派到操作系统的 I/O 写入请求数量的控制。 分派到操作系统的 I/O 写入请求过多以进行并行处理可能会在某些情况下导致 I/O 读取饥饿,具体取决于 I/O 活动量和系统功能。

如果操作系统中异步 I/O 子系统的某个问题阻止了 InnoDB 启动,则可以使用 innodb_use_native_aio=0 启动服务器。 如果 InnoDB 检测到潜在问题(例如,tmpdir 位置、tmpfs 文件系统和不支持 tmpfs 上的异步 I/O 的 Linux 内核的组合),则此选项也可能在启动期间自动禁用。