Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 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请求完成并返回时,处理该请求的InnoDB背景线程将调用I/O完成routine,然后继续处理下一个请求。可以并行处理的请求数量为nnInnoDB背景线程的数量。InnoDB背景线程的数量由innodb_read_io_threadsinnodb_write_io_threads控制。请参阅第17.8.5节,“配置背景InnoDB I/O线程数量”

在native AIO中,查询线程直接将I/O请求分派给操作系统,从而移除了背景线程数量的限制。InnoDB背景线程等待I/O事件信号完成请求。当请求完成时,背景线程调用I/O完成routine,然后继续等待I/O事件。

native AIO的优点是,对于通常在SHOW ENGINE INNODB STATUS输出中显示许多pending reads和writes的高度I/O绑定的系统,能够实现更好的可扩展性。使用native AIO时,增加了并行处理的能力,这意味着I/O调度器类型或磁盘阵列控制器属性对I/O性能的影响更加明显。

对于高度I/O绑定的系统,native AIO 的一个潜在缺点是无法控制同时将I/O写请求发送给操作系统的数量。太多的I/O写请求被并发处理可能会导致I/O读饥饿,取决于I/O活动量和系统能力。

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