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

MySQL 8.3 Reference Manual  /  ...  /  Using Asynchronous I/O on Linux

17.8.6 在 Linux 上使用异步 I/O

InnoDB 在 Linux 上使用异步 I/O 子系统(native AIO)来执行读取预读和写入请求,以便数据文件页。该行为由 innodb_use_native_aio 配置选项控制,该选项仅适用于 Linux 系统,默认启用。在其他 Unix-like 系统上,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 线程数量”

使用 native AIO 时,查询线程直接将 I/O 请求 dispatch 到操作系统,从而消除了后台线程数量的限制。InnoDB 后台线程等待 I/O 事件来信号完成的请求。当请求完成时,后台线程调用 I/O 完成例程,然后继续等待 I/O 事件。

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

使用 native AIO 的潜在缺点是,对于 I/O 密集型系统,无法控制操作系统一次 dispatch 的 I/O 写入请求的数量。太多的 I/O 写入请求 dispatch 到操作系统以便并行处理可能会导致 I/O 读取饥饿,具体取决于 I/O 活动量和系统能力。

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