暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

[ACDU 翻译] MySQL 15.8.6 在 Linux 上使用异步 I/O

原创 由迪 2022-04-08
796

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后台线程数。后台线程的数量 InnoDBinnodb_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 绑定系统,这些系统通常在 SHOW ENGINE INNODB STATUS\G输出中显示许多挂起的读/写。使用本机 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

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论