乐趣区

关于mysql:MySQL-配置后台InnoDB-IO线程数

配置后盾 InnoDB I/ O 线程数

InnoDB 应用后盾线程来解决各种类型的 I / O 申请。您能够应用 innodb_read_io_threads 和 innodb_write_io_threads 配置参数来配置服务于数据页读写 I / O 的后盾线程数。这些参数别离示意用于读和写申请的后盾线程数。它们在所有反对的平台上都是无效的。你能够在 MySQL 选项文件(my.cnf 或 my.ini) 中设置这些参数的值; 不能动静地更改值。这些参数的默认值是 4,容许的值范畴是 1 -64。

这些配置选项的目标是让 InnoDB 在高端零碎上更具扩展性。每个后盾线程最多能够解决 256 个 I / O 申请。后盾 I / O 的一个次要起源是预读申请。InnoDB 试图均衡传入申请的负载,使得大多数后盾线程都能平等地工作。InnoDB 也尝试将读申请从雷同的 extent 调配到雷同的 thread,以减少合并申请的机会。如果你有一个高端的 I / O 子系统,你在 SHOW ENGINE INNODB STATUS 输入中看到超过 64 个 innodb_read_io_threads 挂起的读申请,你能够通过减少 innodb_read_io_threads 的值来进步性能。

在 Linux 零碎上,InnoDB 默认应用异步 I / O 子系统来执行数据文件页面的预读和写申请,这扭转了 InnoDB 后盾线程服务这些类型的 I / O 申请的形式。

在 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,其中 n 为 InnoDB 后盾线程数。InnoDB 后盾线程数由 innodb_read_io_threads 和 innodb_write_io_threads 管制。

应用本机 AIO,查问线程间接将 I / O 申请分发给操作系统,从而打消了后盾线程数量的限度。InnoDB 后盾线程期待 I / O 事件来告诉实现的申请。当一个申请实现时,后盾线程调用一个 I / O 实现例程,而后持续期待 I / O 事件。

本机 AIO 的劣势是可伸缩性,对于 I / O 绑定重大的零碎,通常在 SHOW ENGINE INNODB STATUS\G 输入中显示许多挂起的读 / 写。应用本机 AIO 时并行处理的减少意味着 I / O 调度器的类型或磁盘阵列控制器的属性对 I / O 性能有更大的影响。

本机 AIO 对于大量 I / O 绑定的零碎的一个潜在毛病是无法控制一次调配给操作系统的 I / O 写申请的数量。分派给操作系统进行并行处理的 I / O 写申请太多,在某些状况下可能导致 I / O 读有余,这取决于 I / O 流动的数量和零碎能力。

如果操作系统中异步 I / O 子系统的问题导致 InnoDB 无奈启动,你能够应用 innodb_use_native_aio= 0 来启动服务器。如果 InnoDB 检测到一个潜在的问题,比方 tmpdir 地位,tmpfs 文件系统,以及 Linux 内核不反对 tmpfs 上的异步 I /O,这个选项也能够在启动时主动禁用。

退出移动版