• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 在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_threads和控制innodb_write_io_threads。请参见“配置后台InnoDB I / O线程数”。

    使用本机AIO,查询线程将I / O请求直接分派到操作系统,从而消除了后台线程数量所带来的限制。InnoDB后台线程等待I / O事件以信号通知已完成的请求。请求完成后,后台线程将调用I / O完成例程,并继续等待I / O事件。

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

    对于A / O密集型系统而言,本机AIO的潜在缺点是无法立即控制分配给操作系统的I / O写请求的数量。在某些情况下,根据I / O活动和系统功能的数量,调度到操作系统进行并行处理的I / O写入请求太多,可能会导致I / O读取不足。

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