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
,在那里n
是InnoDB
后台线程。的数量InnoDB
控制后台线程innodb_read_io_threads
而且innodb_write_io_threads
.看到章节15.8.5“配置InnoDB后台I/O线程数”.
使用本机AIO,查询线程将直接向操作系统发送I/O请求,从而消除后台线程数量的限制。InnoDB
后台线程等待I/O事件发出完成请求的信号。当一个请求完成时,后台线程调用一个I/O完成例程并继续等待I/O事件。
本机AIO的优点是,对于I/ o绑定严重的系统(通常显示许多挂起的读/写)具有可伸缩性显示引擎innodb状态
输出。使用本机AIO时并行处理的增加意味着I/O调度器的类型或磁盘阵列控制器的属性对I/O性能的影响更大。
对于I/O限制严重的系统,本机AIO的一个潜在缺点是无法控制一次性发送到操作系统的I/O写请求的数量。在某些情况下,将过多的I/O写请求发送到操作系统进行并行处理可能会导致I/O读不足,这取决于I/O活动的数量和系统能力。
如果操作系统中的异步I/O子系统出现问题InnoDB
从启动开始,您可以用innodb_use_native_aio = 0
.此选项也可能在启动期间自动禁用InnoDB
的组合来检测潜在的问题tmpdir
的位置,tmpfs
文件系统和不支持异步I/O的Linux内核tmpfs
.