-
系统变量可以在服务器启动时启用或禁用。例如,要启用或禁用 InnoDB 自适应哈希索引,可以使用
--innodb-adaptive-hash-index或--skip-innodb-adaptive-hash-index命令行选项,或者在选项文件中使用innodb_adaptive_hash_index或skip_innodb_adaptive_hash_index。 -
一些变量描述引用“启用”或“禁用”变量。这些变量可以使用
SET语句启用或禁用,方法是将其设置为ON或1,或将其设置为OFF或0。布尔变量可以在启动时设置为ON、TRUE、OFF和FALSE(不区分大小写),以及1和0。请参阅 第 6.2.2.4 节,“程序选项修饰符”。 -
系统变量可以在命令行上指定为
--,或在选项文件中指定为var_name=value。var_name=value -
许多系统变量可以在运行时更改(请参阅 第 7.1.9.2 节,“动态系统变量”)。
-
有关
GLOBAL和SESSION变量作用域修饰符的信息,请参阅SET语句文档。 -
某些选项控制 InnoDB 数据文件的位置和布局。第 17.8.1 节,“InnoDB 启动配置” 解释了如何使用这些选项。
-
某些选项,可能不会立即使用,帮助调整 InnoDB 性能特征基于机器能力和数据库 工作负载。
-
有关指定选项和系统变量的更多信息,请参阅 第 6.2.2 节,“指定程序选项”。
表 17.24 InnoDB 选项和变量参考
InnoDB 命令选项
-
Command-Line Format --innodb-status-file[={OFF|ON}]Type 布尔值 Default Value OFF该
--innodb-status-file启动选项控制InnoDB是否在数据目录中创建一个名为innodb_status.的文件,并每 15 秒大约将pidSHOW ENGINE INNODB STATUS输出写入到该文件中。该
innodb_status.文件默认不创建。要创建它,请使用pid--innodb-status-file选项启动 mysqld。InnoDB在服务器正常关闭时删除该文件。如果出现异常关闭,可能需要手动删除状态文件。该
--innodb-status-file选项仅供临时使用,因为SHOW ENGINE INNODB STATUS输出生成可能会影响性能,而innodb_status.文件可能会随着时间的推移变得非常大。pid有关信息,请参阅 第 17.17.2 节,“启用 InnoDB 监控”。
InnoDB 系统变量
-
Command-Line Format --innodb-adaptive-flushing[={OFF|ON}]System Variable innodb_adaptive_flushingScope 全局 Dynamic 是 SET_VARHint Applies否 Type 布尔值 Default Value ON指定是否根据工作负载动态调整
InnoDB缓冲池中的脏页刷新率,以避免 I/O 活动的爆发。该设置默认启用。有关详细信息,请参阅 第 17.8.3.5 节,“配置缓冲池刷新”。对于一般的 I/O 调优建议,请参阅 第 10.5.8 节,“优化 InnoDB 磁盘 I/O”。 -
Command-Line Format --innodb-adaptive-flushing-lwm=#System Variable innodb_adaptive_flushing_lwmScope 全局 Dynamic 是 SET_VARHint Applies否 Type 整数 Default Value 10Minimum Value 0Maximum Value 70定义 redo 日志容量的低水位百分比,以便启用自适应刷新。有关详细信息,请参阅 第 17.8.3.5 节,“配置缓冲池刷新”。
-
Command-Line Format --innodb-adaptive-hash-index[={OFF|ON}]System Variable innodb_adaptive_hash_indexScope 全局 Dynamic 是 SET_VARHint Applies否 Type 布尔值 Default Value ON是否启用或禁用
InnoDB的自适应哈希索引。根据工作负载的不同,可能需要动态启用或禁用自适应哈希索引以提高查询性能。因为自适应哈希索引可能对所有工作负载都不是有用的,因此请使用实际工作负载进行基准测试,以确定是否启用或禁用它。有关详细信息,请参阅 第 17.5.3 节,“自适应哈希索引”。此变量默认启用。您可以使用
SET GLOBAL语句修改该参数,而无需重新启动服务器。在运行时更改设置需要足够的权限来设置全局系统变量。请参阅 第 7.1.9.1 节,“系统变量权限”。您也可以在服务器启动时使用--skip-innodb-adaptive-hash-index禁用它。禁用自适应哈希索引将立即清空哈希表。正常操作可以继续进行,而哈希表被清空,执行查询时将直接访问 B 树索引。重新启用自适应哈希索引时,哈希表将在正常操作期间重新填充。
-
innodb_adaptive_hash_index_partsCommand-Line Format --innodb-adaptive-hash-index-parts=#System Variable innodb_adaptive_hash_index_partsScope 全局 Dynamic 否 SET_VARHint Applies否 Type 数字 Default Value 8Minimum Value 1Maximum Value 512将自适应哈希索引搜索系统分区。每个索引都绑定到特定的分区,每个分区都受到单独的锁保护。
自适应哈希索引搜索系统默认分区为 8 部分。最大设置为 512。
有关信息,请参阅 第 17.5.3 节,“自适应哈希索引”。
-
innodb_adaptive_max_sleep_delayCommand-Line Format --innodb-adaptive-max-sleep-delay=#System Variable innodb_adaptive_max_sleep_delayScope 全局 Dynamic 是 SET_VARHint Applies否 Type 整数 Default Value 150000Minimum Value 0Maximum Value 1000000Unit 微秒 允许
InnoDB根据当前工作负载自动调整innodb_thread_sleep_delay的值,直到达到最大值innodb_adaptive_max_sleep_delay。该值表示微秒数。这选项对繁忙的系统非常有用,特别是在具有数百或数千个同时连接的 MySQL 系统中。有关信息,请参阅 第 17.8.4 节,“配置 InnoDB 线程并发”。
-
Command-Line Format --innodb-autoextend-increment=#System Variable innodb_autoextend_incrementScope 全局 Dynamic 是 SET_VARHint Applies否 Type 整数 Default Value 64Minimum Value 1Maximum Value 1000Unit 兆字节 自动扩展
InnoDB系统表空间文件的增量大小(以兆字节为单位),当文件满时扩展。默认值为 64。有关信息,请参阅 系统表空间数据文件配置 和 调整系统表空间。该
innodb_autoextend_increment设置不影响 每个表的表空间 文件或 通用表空间 文件。这些文件将自动扩展,不管innodb_autoextend_increment设置如何。初始扩展是小量的,然后扩展以 4MB 的增量。 -
Command-Line Format --innodb-autoinc-lock-mode=#System Variable innodb_autoinc_lock_modeScope Global Dynamic 否 SET_VARHint Applies否 Type 整数 Default Value 2Valid Values 012该 锁模式 用于生成 自动递增 值。允许的值是 0、1 或 2,分别表示传统、连续或交叉锁模式。
默认设置是 2(交叉锁模式),以与基于行的复制保持兼容。
有关每种锁模式的特征,请参阅 InnoDB AUTO_INCREMENT 锁模式。
-
innodb_background_drop_list_emptyCommand-Line Format --innodb-background-drop-list-empty[={OFF|ON}]System Variable innodb_background_drop_list_emptyScope Global Dynamic 是 SET_VARHint Applies否 Type 布尔值 Default Value OFF启用
innodb_background_drop_list_empty调试选项可以帮助避免测试用例失败,方法是延迟表创建直到背景删除列表为空。例如,如果测试用例 A 将表t1放入背景删除列表,测试用例 B 将等待直到背景删除列表为空,然后创建表t1。 -
Command-Line Format --innodb-buffer-pool-chunk-size=#System Variable innodb_buffer_pool_chunk_sizeScope Global Dynamic 否 SET_VARHint Applies否 Type 整数 Default Value 134217728Minimum Value 1048576Maximum Value innodb_buffer_pool_size / innodb_buffer_pool_instancesUnit 字节 innodb_buffer_pool_chunk_size定义了InnoDB缓冲池调整操作的块大小。为了避免在调整操作期间复制所有缓冲池页面,我们将操作分成“块”。默认情况下,
innodb_buffer_pool_chunk_size是 128MB(134217728 字节)。块中包含的页面数取决于innodb_page_size的值。innodb_buffer_pool_chunk_size可以以 1MB(1048576 字节)为单位增加或减少。在更改
innodb_buffer_pool_chunk_size值时,以下条件适用:-
如果
innodb_buffer_pool_chunk_size*innodb_buffer_pool_instances大于当前缓冲池大小时缓冲池初始化,innodb_buffer_pool_chunk_size将被截断为innodb_buffer_pool_size/innodb_buffer_pool_instances。 -
缓冲池大小必须始终等于或是
innodb_buffer_pool_chunk_size*innodb_buffer_pool_instances的倍数。如果您更改innodb_buffer_pool_chunk_size,innodb_buffer_pool_size将自动四舍五入到等于或是innodb_buffer_pool_chunk_size*innodb_buffer_pool_instances的值。调整发生在缓冲池初始化时。
Important在更改
innodb_buffer_pool_chunk_size时,需要小心,因为更改该值可能会自动增加缓冲池的大小。在更改innodb_buffer_pool_chunk_size之前,计算其对innodb_buffer_pool_size的影响,以确保结果缓冲池大小是可接受的。为了避免潜在的性能问题,块数(
innodb_buffer_pool_size/innodb_buffer_pool_chunk_size)不应超过 1000。变量
innodb_buffer_pool_size是动态的,可以在线上调整缓冲池的大小。但是,缓冲池大小必须等于或是innodb_buffer_pool_chunk_size*innodb_buffer_pool_instances,更改任一变量设置需要重新启动服务器。请参阅 第 17.8.3.1 节,“配置 InnoDB 缓冲池大小” 以获取更多信息。
-
-
Command-Line Format --innodb-buffer-pool-debug[={OFF|ON}]System Variable innodb_buffer_pool_debugScope Global Dynamic No SET_VARHint AppliesNo Type Boolean Default Value OFF启用该选项时,允许在缓冲池小于 1GB 时启用多个缓冲池实例,忽略
innodb_buffer_pool_instances的 1GB 最小缓冲池大小约束。该innodb_buffer_pool_debug选项仅在使用WITH_DEBUGCMake 选项编译调试支持时可用。 -
innodb_buffer_pool_dump_at_shutdownCommand-Line Format --innodb-buffer-pool-dump-at-shutdown[={OFF|ON}]System Variable innodb_buffer_pool_dump_at_shutdownScope Global Dynamic Yes SET_VARHint AppliesNo Type Boolean Default Value ON指定在 MySQL 服务器关闭时是否记录
InnoDB缓冲池 中的页面,以缩短下一次重新启动时的 预热 过程。通常与innodb_buffer_pool_load_at_startup结合使用。innodb_buffer_pool_dump_pct选项定义要转储的缓冲池页面的百分比。两个
innodb_buffer_pool_dump_at_shutdown和innodb_buffer_pool_load_at_startup都是默认启用的。有关更多信息,请参阅 第 17.8.3.6 节,“保存和恢复缓冲池状态”。
-
Command-Line Format --innodb-buffer-pool-dump-now[={OFF|ON}]System Variable innodb_buffer_pool_dump_nowScope Global Dynamic Yes SET_VARHint AppliesNo Type Boolean Default Value OFF立即记录
InnoDB缓冲池 中的页面。通常与innodb_buffer_pool_load_now结合使用。启用
innodb_buffer_pool_dump_now触发记录操作,但不改变变量设置,始终保持OFF或0。要查看缓冲池转储状态,请查询Innodb_buffer_pool_dump_status变量。启用
innodb_buffer_pool_dump_now触发转储操作,但不改变变量设置,始终保持OFF或0。要查看缓冲池转储状态,请查询Innodb_buffer_pool_dump_status变量。有关更多信息,请参阅 第 17.8.3.6 节,“保存和恢复缓冲池状态”。
-
Command-Line Format --innodb-buffer-pool-dump-pct=#System Variable innodb_buffer_pool_dump_pctScope Global Dynamic Yes SET_VARHint AppliesNo Type Integer Default Value 25Minimum Value 1Maximum Value 100指定要转储的缓冲池页面的百分比。范围是 1 到 100。默认值是 25。例如,如果有 4 个缓冲池,每个缓冲池有 100 页,并且
innodb_buffer_pool_dump_pct设置为 25,那么每个缓冲池的 25 个最新使用的页面将被转储。 -
Command-Line Format --innodb-buffer-pool-filename=file_nameSystem Variable innodb_buffer_pool_filenameScope Global Dynamic Yes SET_VARHint AppliesNo Type File name Default Value ib_buffer_pool指定了由
innodb_buffer_pool_dump_at_shutdown或innodb_buffer_pool_dump_now生成的表空间 ID 和页面 ID 的文件名。表空间 ID 和页面 ID 将以以下格式保存:space, page_id。默认情况下,文件名为ib_buffer_pool,位于InnoDB数据目录中。非默认位置必须相对于数据目录指定。可以在运行时使用
SET语句指定文件名:SET GLOBAL innodb_buffer_pool_filename='file_name';也可以在启动时,在启动字符串或 MySQL 配置文件中指定文件名。当在启动时指定文件名时,文件必须存在,否则
InnoDB将返回启动错误,指示没有该文件或目录。有关更多信息,请参阅 第 17.8.3.6 节,“保存和恢复缓冲池状态”。
-
innodb_buffer_pool_in_core_fileCommand-Line Format --innodb-buffer-pool-in-core-file[={OFF|ON}]System Variable innodb_buffer_pool_in_core_fileScope 全局 Dynamic 是 SET_VARHint Applies否 Type 布尔值 Default Value ON禁用
innodb_buffer_pool_in_core_file变量可以减少核心文件的大小,方法是排除InnoDB缓冲池页面。要使用该变量,core_file变量必须启用,并且操作系统必须支持MADV_DONTDUMP非 POSIX 扩展到madvise(),该扩展在 Linux 3.4 及更高版本中受支持。有关更多信息,请参阅 第 17.8.3.7 节,“排除缓冲池页面从核心文件”。 -
Command-Line Format --innodb-buffer-pool-instances=#System Variable innodb_buffer_pool_instancesScope 全局 Dynamic 否 SET_VARHint Applies否 Type 整数 Default Value 8 (或 1,如果 innodb_buffer_pool_size < 1GB)Minimum Value 1Maximum Value 64将
InnoDB缓冲池分成的区域数。对于缓冲池大小在多 GB 范围内的系统,将缓冲池分成多个实例可以提高并发性,方法是减少对缓存页面的争用。每个缓存页面都被随机分配到一个缓冲池实例中,使用哈希函数。每个缓冲池实例都管理自己的空闲列表、刷新列表、LRU 和所有与缓冲池相关的数据结构,并由自己的缓冲池 互斥锁 保护。只有在将
innodb_buffer_pool_size设置为 1GB 或更高时,该选项才生效。总缓冲池大小将被分配到所有缓冲池实例中。为获得最佳效率,请指定innodb_buffer_pool_instances和innodb_buffer_pool_size的组合,使每个缓冲池实例至少为 1GB。在 32 位 Windows 系统上,默认值取决于
innodb_buffer_pool_size的值,如下所述:<|start_header_id|>assistant<|end_header_id|> Please note that I've translated the text into Chinese, but I didn't touch the HTML tags and code snippets, as they are not translatable.-
如果
innodb_buffer_pool_size大于 1.3GB,则默认的innodb_buffer_pool_instances是innodb_buffer_pool_size/128MB,每个块的内存分配请求。选择 1.3GB 作为边界,因为在 32 位 Windows 上存在无法分配单个缓冲池所需的连续地址空间的风险。 -
否则,默认值为 1。
在所有其他平台上,当
innodb_buffer_pool_size大于或等于 1GB 时,默认值为 8。否则,默认值为 1。有关信息,请参阅 第 17.8.3.1 节,“配置 InnoDB 缓冲池大小”。
-
-
Command-Line Format --innodb-buffer-pool-load-abort[={OFF|ON}]System Variable innodb_buffer_pool_load_abortScope 全局 Dynamic 是 SET_VARHint Applies否 Type 布尔值 Default Value OFF中断由
innodb_buffer_pool_load_at_startup或innodb_buffer_pool_load_now触发的InnoDB缓冲池 内容还原过程。启用
innodb_buffer_pool_load_abort触发中断操作,但不改变变量设置,始终保持OFF或0。要查看缓冲池加载状态,请查询Innodb_buffer_pool_load_status变量。有关更多信息,请参阅 第 17.8.3.6 节,“保存和恢复缓冲池状态”。
-
innodb_buffer_pool_load_at_startupCommand-Line Format --innodb-buffer-pool-load-at-startup[={OFF|ON}]System Variable innodb_buffer_pool_load_at_startupScope 全局 Dynamic 否 SET_VARHint Applies否 Type 布尔值 Default Value ON指定在 MySQL 服务器启动时,
InnoDB缓冲池 将自动 预热,加载它曾经持有的相同页面。通常与innodb_buffer_pool_dump_at_shutdown结合使用。both
innodb_buffer_pool_dump_at_shutdown和innodb_buffer_pool_load_at_startup默认情况下都是启用的。有关更多信息,请参阅 第 17.8.3.6 节,“保存和恢复缓冲池状态”。
-
Command-Line Format --innodb-buffer-pool-load-now[={OFF|ON}]System Variable innodb_buffer_pool_load_nowScope 全局 Dynamic 是 SET_VARHint Applies否 Type 布尔值 Default Value OFF立即预热了
InnoDB缓冲池,通过加载数据页而不等待服务器重启。这在基准测试或在运行报告或维护查询后准备 MySQL 服务器恢复正常工作负载时非常有用。启用
innodb_buffer_pool_load_now触发加载操作,但不改变变量设置,该设置始终保持OFF或0。要查看缓冲池加载进度,请查询Innodb_buffer_pool_load_status变量。有关更多信息,请参阅第 17.8.3.6 节,“保存和恢复缓冲池状态”。
-
Command-Line Format --innodb-buffer-pool-size=#System Variable innodb_buffer_pool_sizeScope 全局 Dynamic 是 SET_VARHint Applies否 Type 整数 Default Value 134217728Minimum Value 5242880Maximum Value (64-bit platforms) 2**64-1Maximum Value (32-bit platforms) 2**32-1Unit 字节 缓冲池的大小,以字节为单位,是
InnoDB缓存表和索引数据的内存区域。默认值为 134217728 字节(128MB)。最大值取决于 CPU 架构;在 32 位系统上最大为 4294967295(232-1),在 64 位系统上最大为 18446744073709551615(264-1)。在 32 位系统上,CPU 架构和操作系统可能会对实际最大大小施加限制。当缓冲池大小大于 1GB 时,设置innodb_buffer_pool_instances到大于 1 的值可以提高繁忙服务器的可扩展性。较大的缓冲池需要较少的磁盘 I/O 来访问相同的表数据多次。在专用数据库服务器上,您可能将缓冲池大小设置为机器物理内存大小的 80%。请注意以下可能的问题,并准备缩小缓冲池大小以避免这些问题。
-
操作系统中的物理内存竞争可能会导致分页。
-
InnoDB为缓冲区和控制结构保留了额外的内存,因此总分配的空间约为指定的缓冲池大小的 10%。 -
缓冲池的地址空间必须是连续的,这可能是 Windows 系统上 DLL 加载到特定地址的问题。
-
初始化缓冲池的时间大致与其大小成正比。在具有大缓冲池的实例上,初始化时间可能很长。要减少初始化期间,可以在服务器关闭时保存缓冲池状态并在服务器启动时恢复它。请参阅第 17.8.3.6 节,“保存和恢复缓冲池状态”。
当您增加或减少缓冲池大小时,操作将以块的形式执行。块大小由
innodb_buffer_pool_chunk_size变量定义,默认为 128 MB。缓冲池大小必须始终等于或是
innodb_buffer_pool_chunk_size*innodb_buffer_pool_instances的倍数。如果您将缓冲池大小更改为不等于或不是innodb_buffer_pool_chunk_size*innodb_buffer_pool_instances的倍数,缓冲池大小将自动调整为等于或是innodb_buffer_pool_chunk_size*innodb_buffer_pool_instances的倍数。innodb_buffer_pool_size可以动态设置,这允许您在不重新启动服务器的情况下调整缓冲池的大小。状态变量Innodb_buffer_pool_resize_status报告在线缓冲池调整操作的状态。有关更多信息,请参阅 第 17.8.3.1 节,“配置 InnoDB 缓冲池大小”。如果
innodb_dedicated_server启用,则innodb_buffer_pool_size值将自动配置,如果未明确定义。有关更多信息,请参阅 第 17.8.12 节,“启用专用 MySQL 服务器的自动配置”。 -
-
Command-Line Format --innodb-change-buffer-max-size=#System Variable innodb_change_buffer_max_sizeScope 全局 Dynamic 是 SET_VARHint Applies否 Type 整数 Default Value 25Minimum Value 0Maximum Value 50InnoDB
change buffer的最大大小,以缓冲池总大小的百分比表示。您可能需要增加该值,以适应具有大量插入、更新和删除活动的 MySQL 服务器,或者减少该值,以适应用于报告的不变数据。有关更多信息,请参阅 第 17.5.2 节,“更改缓冲区”。有关一般 I/O 调优建议,请参阅 第 10.5.8 节,“优化 InnoDB 磁盘 I/O”。 -
Command-Line Format --innodb-change-buffering=valueSystem Variable innodb_change_bufferingScope 全局 Dynamic 是 SET_VARHint Applies否 Type 枚举 Default Value allValid Values noneinsertsdeleteschangespurgesallInnoDB 是否执行
change buffering,一种优化技术,它将次要索引的写操作延迟,以便 I/O 操作可以顺序执行。允许的值在下表中描述。也可以以数字形式指定值。表 17.25 innodb_change_buffering 的允许值
Value Numeric Value Description none0不缓冲任何操作。 inserts1缓冲插入操作。 deletes2缓冲删除标记操作;严格来说,是在 purge 操作期间标记索引记录以供删除。 changes3缓冲插入和删除标记操作。 purges4缓冲物理删除操作,这些操作在后台发生。 all5默认值。缓冲插入、删除标记和 purge 操作。
有关更多信息,请参阅 第 17.5.2 节,“更改缓冲区”。有关一般 I/O 调优建议,请参阅 第 10.5.8 节,“优化 InnoDB 磁盘 I/O”。
-
Command-Line Format --innodb-change-buffering-debug=#System Variable innodb_change_buffering_debugScope 全局 Dynamic 是 SET_VARHint Applies否 Type 整数 Default Value 0Minimum Value 0Maximum Value 2设置
InnoDB更改缓冲调试标志。值为 1 强制所有更改写入更改缓冲区。值为 2 导致意外退出合并。默认值为 0,表示不设置更改缓冲调试标志。此选项仅在使用WITH_DEBUGCMake 选项编译调试支持时可用。 -
Command-Line Format --innodb-checkpoint-disabled[={OFF|ON}]System Variable innodb_checkpoint_disabledScope 全局 Dynamic 是 SET_VARHint Applies否 Type 布尔值 Default Value OFF这是一个调试选项,仅供专家调试使用。它禁用检查点,以便在服务器退出时始终启动
InnoDB恢复。它应该仅在短时间间隔内启用,通常是在运行 DML 操作之前,写入 redo 日志条目,以便在服务器退出后恢复。该选项仅在使用WITH_DEBUGCMake 选项编译调试支持时可用。 -
Command-Line Format --innodb-checksum-algorithm=valueSystem Variable innodb_checksum_algorithmScope 全局 Dynamic 是 SET_VARHint Applies否 Type 枚举 Default Value crc32Valid Values crc32strict_crc32innodbstrict_innodbnonestrict_none指定如何生成和验证
InnoDB表空间中的校验和。默认值为crc32。值
innodb与早期版本的 MySQL 兼容。值crc32使用一种算法,快速计算每个修改块的校验和,并检查每个磁盘读取的校验和。它以 64 位为单位扫描块,而不是innodb校验和算法,以 8 位为单位扫描块。值none在校验和字段中写入一个常量值,而不是基于块数据计算一个值。表空间中的块可以使用旧的、新 的和没有校验和值,随着数据的修改而逐渐更新;一旦表空间中的块被修改为使用crc32算法,关联的表就不能被早期版本的 MySQL 读取。严格形式的校验和算法报告错误,如果它在表空间中遇到一个有效但不匹配的校验和值。建议您仅在新实例中使用严格设置,以便首次设置表空间。严格设置速度较快,因为它们不需要在磁盘读取时计算所有校验和值。
以下表格显示了
none、innodb和crc32选项值之间的差异,以及它们的严格对应项。none、innodb和crc32将指定类型的校验和值写入每个数据块,但在读取操作期间验证块时接受其他校验和值。严格设置也接受有效的校验和值,但在遇到有效的非匹配校验和值时打印错误消息。使用严格形式可以使验证速度更快,如果所有InnoDB数据文件在一个实例中都是使用相同的innodb_checksum_algorithm值创建的。表 17.26 permitted innodb_checksum_algorithm 值
Value Generated checksum (when writing) Permitted checksums (when reading) none 一个常量数字。 任何由 none、innodb或crc32生成的校验和。innodb 使用原始算法从 InnoDB计算的软件校验和。任何由 none、innodb或crc32生成的校验和。crc32 使用 crc32算法计算的校验和,可能使用硬件辅助。任何由 none、innodb或crc32生成的校验和。strict_none 一个常数 任何由 none、innodb或crc32生成的校验和。InnoDB如果遇到有效但不匹配的校验和,将打印错误消息。strict_innodb 使用原始算法从 InnoDB计算的软件校验和。任何由 none、innodb或crc32生成的校验和。InnoDB如果遇到有效但不匹配的校验和,将打印错误消息。strict_crc32 使用 crc32算法计算的校验和,可能使用硬件辅助。任何由 none、innodb或crc32生成的校验和。InnoDB如果遇到有效但不匹配的校验和,将打印错误消息。 -
Command-Line Format --innodb-cmp-per-index-enabled[={OFF|ON}]System Variable innodb_cmp_per_index_enabledScope 全局 Dynamic 是 SET_VARHint Applies否 Type 布尔值 Default Value OFF启用信息模式
INNODB_CMP_PER_INDEX表中的每个索引相关统计信息。因为这些统计信息的收集可能很昂贵,只应在开发、测试或副本实例上启用此选项,以便于InnoDB压缩 表的性能调整。有关更多信息,请参阅 第 28.4.8 节,“INFORMATION_SCHEMA INNODB_CMP_PER_INDEX 和 INNODB_CMP_PER_INDEX_RESET 表” 和 第 17.9.1.4 节,“在运行时监控 InnoDB 表压缩”。
-
Command-Line Format --innodb-commit-concurrency=#System Variable innodb_commit_concurrencyScope 全局 Dynamic 是 SET_VARHint Applies否 Type 整数 Default Value 0Minimum Value 0Maximum Value 1000可以同时提交的 线程 数量。值为 0(默认)允许任何数量的 事务 同时提交。
innodb_commit_concurrency的值不能从零更改为非零或从非零更改为零。该值可以从一个非零值更改为另一个非零值。 -
Command-Line Format --innodb-compress-debug=valueSystem Variable innodb_compress_debugScope 全局 Dynamic 是 SET_VARHint Applies否 Type 枚举 Default Value noneValid Values nonezliblz4lz4hc使用指定的压缩算法压缩所有表,而不需要为每个表定义
COMPRESSION属性。此选项仅在使用WITH_DEBUGCMake 选项编译调试支持时可用。有关信息,请参阅 第 17.9.2 节,“InnoDB 页面压缩”。
-
innodb_compression_failure_threshold_pctCommand-Line Format --innodb-compression-failure-threshold-pct=#System Variable innodb_compression_failure_threshold_pctScope 全局 Dynamic 是 SET_VARHint Applies否 Type 整数 Default Value 5Minimum Value 0Maximum Value 100定义表的压缩失败率阈值,以百分比表示,在达到该阈值时,MySQL 开始在压缩页面中添加填充以避免昂贵的 压缩失败。当达到该阈值时,MySQL 开始在每个新的压缩页面中留出额外的空闲空间,动态调整空闲空间的百分比,直到达到
innodb_compression_pad_pct_max指定的百分比。值为零禁用监控压缩效率并动态调整填充量的机制。有关信息,请参阅 第 17.9.1.6 节,“OLTP 工作负载的压缩”。
-
Command-Line Format --innodb-compression-level=#System Variable innodb_compression_levelScope 全局 Dynamic 是 SET_VARHint Applies否 Type 整数 Default Value 6Minimum Value 0Maximum Value 9指定
InnoDB压缩 表和索引的 zlib 压缩级别。较高的值可以将更多数据存储在存储设备上,但会增加 CPU 开销以进行压缩。较低的值可以减少 CPU 开销,以便在存储空间不紧张或数据不可压缩时使用。有关信息,请参阅 第 17.9.1.6 节,“OLTP 工作负载的压缩”。
-
innodb_compression_pad_pct_maxCommand-Line Format --innodb-compression-pad-pct-max=#System Variable innodb_compression_pad_pct_maxScope 全局 Dynamic 是 SET_VARHint Applies否 Type 整数 Default Value 50Minimum Value 0Maximum Value 75指定压缩页面中可以保留的最大百分比作为空闲空间,以便在更新压缩表或索引时重新组织数据和修改日志,并在页面中留出空间以避免 压缩失败。仅在
innodb_compression_failure_threshold_pct设置为非零值时生效,并且压缩失败率超过阈值。有关信息,请参阅 第 17.9.1.6 节,“OLTP 工作负载的压缩”。
-
Command-Line Format --innodb-concurrency-tickets=#System Variable innodb_concurrency_ticketsScope 全局 Dynamic 是 SET_VARHint Applies否 Type 整数 Default Value 5000Minimum Value 1Maximum Value 4294967295确定可以并发进入
InnoDB的线程数。当一个线程尝试进入InnoDB时,如果已经达到并发限制,线程将被放入队列中。当一个线程被允许进入InnoDB时,它将获得等于innodb_concurrency_tickets值的“票数”,然后可以自由地进入和离开InnoDB,直到它使用完所有票数。之后,该线程将再次受到并发检查(和可能的排队)下一次尝试进入InnoDB时。默认值为 5000。使用小的
innodb_concurrency_tickets值,小型事务可以公平地与大型事务竞争处理少量行。小的innodb_concurrency_tickets值的缺点是大型事务必须循环队列多次才能完成,从而延长了完成任务所需的时间。使用大的
innodb_concurrency_tickets值,大型事务花费更少的时间等待队列的位置(由innodb_thread_concurrency控制),并且需要更少的队列循环来完成任务。大型事务也需要更少的队列循环来完成任务。大的innodb_concurrency_tickets值的缺点是太多的大型事务同时运行可能会 starve 小型事务,使它们等待更长时间。使用非零的
innodb_thread_concurrency值,您可能需要调整innodb_concurrency_tickets值以找到大型事务和小型事务之间的最佳平衡。SHOW ENGINE INNODB STATUS报告显示当前事务在队列中的票数。此数据也可以从 Information SchemaINNODB_TRX表的TRX_CONCURRENCY_TICKETS列中获得。有关更多信息,请参阅 第 17.8.4 节,“配置 InnoDB 的线程并发性”。
-
Command-Line Format --innodb-data-file-path=file_nameSystem Variable innodb_data_file_pathScope 全局 Dynamic 否 SET_VARHint Applies否 Type 字符串 Default Value ibdata1:12M:autoextend定义
InnoDB系统表空间数据文件的名称、大小和属性。如果您不指定innodb_data_file_path的值,默认行为是创建一个 slightly larger than 12MB 的自动扩展数据文件,名为ibdata1。数据文件规范的完整语法包括文件名、文件大小、
autoextend属性和max属性:file_name:file_size[:autoextend[:max:max_file_size]]文件大小以千字节、兆字节或吉字节为单位,通过追加
K、M或G到大小值。如果指定数据文件大小为千字节,请以 1024 的倍数指定。否则,KB 值将被舍入到最近的 MB 边界。文件大小的总和至少应 slightly larger than 12MB。有关其他配置信息,请参阅 系统表空间数据文件配置。有关调整说明,请参阅 调整系统表空间。
-
Command-Line Format --innodb-data-home-dir=dir_nameSystem Variable innodb_data_home_dirScope 全局 Dynamic 否 SET_VARHint Applies否 Type 目录名称 InnoDB
系统表空间数据文件的公共目录路径部分。默认值是 MySQL数据目录。该设置将与innodb_data_file_path设置连接,除非该设置定义了绝对路径。指定
innodb_data_home_dir值时需要尾随斜杠。例如:[mysqld] innodb_data_home_dir = /path/to/myibdata/该设置不影响 每个表文件 表空间的位置。
有关相关信息,请参阅 第 17.8.1 节,“InnoDB 启动配置”。
-
Command-Line Format --innodb-ddl-buffer-size=#System Variable innodb_ddl_buffer_sizeScope 全局、会话 Dynamic 是 SET_VARHint Applies否 Type 整数 Default Value 1048576Minimum Value 65536Maximum Value 4294967295Unit 字节 定义 DDL 操作的最大缓冲区大小。默认设置为 1048576 字节(约 1 MB)。适用于在线 DDL 操作,创建或重建次要索引。请参阅 第 17.12.4 节,“在线 DDL 内存管理”。每个 DDL 线程的最大缓冲区大小是最大缓冲区大小除以 DDL 线程数(
innodb_ddl_buffer_size/innodb_ddl_threads)。 -
innodb_ddl_log_crash_reset_debugCommand-Line Format --innodb-ddl-log-crash-reset-debug[={OFF|ON}]System Variable innodb_ddl_log_crash_reset_debugScope 全局 Dynamic 是 SET_VARHint Applies否 Type 布尔值 Default Value OFF启用此调试选项以将 DDL 日志崩溃重置计数器重置为 1。这选项仅在使用
WITH_DEBUGCMake 选项编译调试支持时可用。 -
Command-Line Format --innodb-ddl-threads=#System Variable innodb_ddl_threadsScope 全局、会话 Dynamic 是 SET_VARHint Applies否 Type 整数 Default Value 4Minimum Value 1Maximum Value 64定义在线 DDL 操作创建或重建次要索引时的最大并行线程数。有关相关信息,请参阅 第 17.12.5 节,“配置在线 DDL 操作的并行线程” 和 第 17.12.4 节,“在线 DDL 内存管理”。
-
Command-Line Format --innodb-deadlock-detect[={OFF|ON}]System Variable innodb_deadlock_detectScope 全局 Dynamic 是 SET_VARHint Applies否 Type 布尔值 Default Value ON该选项用于禁用死锁检测。在高并发系统上,死锁检测可能会导致许多线程等待同一个锁时的性能下降。在某些情况下,禁用死锁检测并依赖
innodb_lock_wait_timeout设置来回滚事务可能更高效。有关信息,请参阅 第 17.7.5.2 节,“死锁检测”。
-
Command-Line Format --innodb-dedicated-server[={OFF|ON}]System Variable innodb_dedicated_serverScope 全局 Dynamic 否 SET_VARHint Applies否 Type 布尔值 Default Value OFF启用
innodb_dedicated_server后,InnoDB 将自动配置以下变量:-
Note
innodb_log_file_size和innodb_log_files_in_group已弃用,已被innodb_redo_log_capacity取代;请参阅 第 17.6.5 节,“重做日志”。
只有在 MySQL 实例驻留在专用服务器上时,才考虑启用
innodb_dedicated_server。启用innodb_dedicated_server不是推荐的做法,如果 MySQL 实例与其他应用程序共享系统资源。有关信息,请参阅 第 17.8.12 节,“为专用 MySQL 服务器启用自动配置”。
-
Command-Line Format --innodb-default-row-format=valueSystem Variable innodb_default_row_formatScope 全局 Dynamic 是 SET_VARHint Applies否 Type 枚举 Default Value DYNAMICValid Values REDUNDANTCOMPACTDYNAMIC该
innodb_default_row_format选项定义了 InnoDB 表和用户创建的临时表的默认行格式。默认设置为DYNAMIC。其他允许的值是COMPACT和REDUNDANT。COMPRESSED行格式不支持在 系统表空间 中使用,不能定义为默认值。新创建的表使用
innodb_default_row_format定义的行格式,除非明确指定ROW_FORMAT选项或使用ROW_FORMAT=DEFAULT。当没有明确指定
ROW_FORMAT选项或使用ROW_FORMAT=DEFAULT时,任何重建表的操作也会默默地将表的行格式更改为由innodb_default_row_format定义的格式。有关更多信息,请参阅定义表的行格式。服务器创建的内部临时表使用
DYNAMIC行格式,不管innodb_default_row_format设置如何。 -
Command-Line Format --innodb-directories=dir_nameSystem Variable innodb_directoriesScope 全局 Dynamic 否 SET_VARHint Applies否 Type 目录名称 Default Value NULL定义在启动时扫描的目录,以查找表空间文件。这选项用于在服务器离线时移动或恢复表空间文件到新位置,也用于指定使用绝对路径或位于数据目录外的表空间文件的目录。
崩溃恢复期间的表空间发现依赖于
innodb_directories设置,以标识重做日志中引用的表空间。有关更多信息,请参阅崩溃恢复期间的表空间发现。默认值为NULL,但
innodb_data_home_dir、innodb_undo_directory和datadir定义的目录总是追加到innodb_directories参数值中,InnoDB构建启动时的目录列表时,无论是否明确指定了innodb_directories设置。innodb_directories可以在启动命令或MySQL选项文件中指定。引号括住参数值,因为否则一些命令解释器将分号(;)解释为特殊字符。(例如,Unix shells将其视为命令终止符。)启动命令:
mysqld --innodb-directories="directory_path_1;directory_path_2"MySQL选项文件:
[mysqld] innodb_directories="directory_path_1;directory_path_2"不能使用通配符表达式指定目录。
innodb_directories扫描也会遍历指定目录的子目录。重复的目录和子目录将从要扫描的目录列表中删除。有关更多信息,请参阅第17.6.3.6节,“在服务器离线时移动表空间文件”。
-
innodb_disable_sort_file_cacheCommand-Line Format --innodb-disable-sort-file-cache[={OFF|ON}]System Variable innodb_disable_sort_file_cacheScope Global Dynamic 是 SET_VARHint Applies否 Type 布尔值 Default Value OFF禁用操作系统文件系统缓存,以便合并排序临时文件。该效果相当于使用
O_DIRECT打开这些文件。 -
Command-Line Format --innodb-doublewrite=valueSystem Variable innodb_doublewriteScope Global Dynamic 是 SET_VARHint Applies否 Type 枚举 Default Value ONValid Values 启用禁用检测并恢复仅检测变量
innodb_doublewrite控制双写缓冲。双写缓冲默认情况下在大多数情况下启用。您可以在启动服务器时将
innodb_doublewrite设置为启用或禁用,以启用或禁用双写缓冲。检测并恢复与启用相同,除了双写缓冲完全启用,数据库页内容写入双写缓冲,在恢复期间用于修复不完整的页写入。使用仅检测,只有元数据写入双写缓冲,数据库页内容不写入双写缓冲,恢复不使用双写缓冲来修复不完整的页写入。这是一个轻量级设置,旨在仅检测不完整的页写入。MySQL 8.3 支持动态更改
innodb_doublewrite设置,以启用双写缓冲,between启用、检测并恢复和仅检测。MySQL 不支持动态更改双写缓冲的启用和禁用之间的设置。如果双写缓冲位于支持原子写入的 Fusion-io 设备上,双写缓冲将自动禁用,数据文件写入将使用 Fusion-io 原子写入代替。但是,请注意
innodb_doublewrite设置是全局的。当双写缓冲被禁用时,它将对所有数据文件禁用,包括那些不在 Fusion-io 硬件上的文件。该功能仅在 Fusion-io 硬件上支持,并且仅在 Linux 上的 Fusion-io NVMFS 上启用。要充分利用该功能,建议将innodb_flush_method设置为O_DIRECT。有关信息,请参阅 第 17.6.4 节,“双写缓冲”。
-
Command-Line Format --innodb-doublewrite-batch-size=#System Variable innodb_doublewrite_batch_sizeScope 全局 Dynamic 否 SET_VARHint Applies否 Type 整数 Default Value 0Minimum Value 0Maximum Value 256定义双写页的批量写入数量。
有关信息,请参阅 第 17.6.4 节,“双写缓冲”。
-
Command-Line Format --innodb-doublewrite-dir=dir_nameSystem Variable innodb_doublewrite_dirScope 全局 Dynamic 否 SET_VARHint Applies否 Type 目录名称 定义双写文件的目录。如果未指定目录,双写文件将在
innodb_data_home_dir目录中创建,该目录默认为数据目录,如果未指定。有关信息,请参阅 第 17.6.4 节,“双写缓冲”。
-
Command-Line Format --innodb-doublewrite-files=#System Variable innodb_doublewrite_filesScope 全局 Dynamic 否 SET_VARHint Applies否 Type 整数 Default Value innodb_buffer_pool_instances * 2Minimum Value 2Maximum Value 256定义双写文件的数量。默认情况下,为每个缓冲池实例创建两个双写文件。
至少有两个双写文件。双写文件的最大数量是缓冲池实例数量的两倍。(缓冲池实例数量由
innodb_buffer_pool_instances变量控制。)有关更多信息,请参阅第 17.6.4 节,“双写缓冲区”。
-
Command-Line Format --innodb-doublewrite-pages=#System Variable innodb_doublewrite_pagesScope 全局 Dynamic 否 SET_VARHint Applies否 Type 整数 Default Value innodb_write_io_threads 值Minimum Value innodb_write_io_threads 值Maximum Value 512定义每个线程的双写页数。如果未指定值,则
innodb_doublewrite_pages将设置为innodb_write_io_threads值。有关更多信息,请参阅第 17.6.4 节,“双写缓冲区”。
-
Command-Line Format --innodb-extend-and-initialize[={OFF|ON}]System Variable innodb_extend_and_initializeScope 全局 Dynamic 是 SET_VARHint Applies否 Type 布尔值 Default Value ON控制 Linux 系统上的文件每表和通用表空间的空间分配。
启用时,
InnoDB将 NULL 写入新分配的页。当禁用时,空间将使用posix_fallocate()调用分配,而不写入 NULL。有关更多信息,请参阅第 17.6.3.8 节,“优化表空间页分配在 Linux”。
-
Command-Line Format --innodb-fast-shutdown=#System Variable innodb_fast_shutdownScope 全局 Dynamic 是 SET_VARHint Applies否 Type 整数 Default Value 1Valid Values 012InnoDB shutdown 模式。如果值为 0,InnoDB 执行慢速shutdown,完整的purge 和更改缓冲区合并,然后关闭。如果值为 1(默认),InnoDB 跳过这些操作,执行快速shutdown。如果值为 2,InnoDB 刷新日志并关闭冷启动,类似于 MySQL 崩溃;没有提交的事务不会丢失,但崩溃恢复操作使下一个启动时间更长。
慢速shutdown 可能需要几分钟,或者在极端情况下需要几个小时,数据缓冲区中的大量数据。在升级或降级 MySQL 主要版本之前,使用慢速shutdown 技术,以便在升级过程中更新文件格式时,所有数据文件都被完全准备好。
在紧急或故障排除情况下,使用
innodb_fast_shutdown=2,以获取绝对最快的shutdown,如果数据有腐败风险。 -
innodb_fil_make_page_dirty_debugCommand-Line Format --innodb-fil-make-page-dirty-debug=#System Variable innodb_fil_make_page_dirty_debugScope 全局 Dynamic 是 SET_VARHint Applies否 Type 整数 Default Value 0Minimum Value 0Maximum Value 2**32-1默认情况下,设置
innodb_fil_make_page_dirty_debug到表空间的 ID 立即污染表空间的第一页。如果innodb_saved_page_number_debug设置为非默认值,设置innodb_fil_make_page_dirty_debug污染指定的页面。innodb_fil_make_page_dirty_debug选项仅在使用WITH_DEBUGCMake 选项编译调试支持时可用。 -
Command-Line Format --innodb-file-per-table[={OFF|ON}]System Variable innodb_file_per_tableScope 全局 Dynamic 是 SET_VARHint Applies否 Type 布尔值 Default Value ON当
innodb_file_per_table启用时,默认情况下表将在文件每个表 tablespaces 中创建。当禁用时,默认情况下表将在系统表空间中创建。有关文件每个表 tablespaces 的信息,请参阅 第 17.6.3.2 节,“文件每个表 tablespaces”。有关InnoDB系统表空间的信息,请参阅 第 17.6.3.1 节,“系统表空间”。可以在运行时使用
SET GLOBAL语句、在命令行上启动时指定或在选项文件中指定innodb_file_per_table变量。运行时配置需要足够的权限来设置全局系统变量(请参阅 第 7.1.9.1 节,“系统变量权限”),并立即影响所有连接。当一个表在文件每个表 tablespaces 中被截断或删除时,释放的空间将被返回给操作系统。截断或删除系统表空间中的表只释放系统表空间中的空间。释放的空间在系统表空间中可以被再次用于
InnoDB数据,但不会被返回给操作系统,因为系统表空间数据文件从不缩小。innodb_file_per_table设置不影响临时表的创建;临时表是在会话临时 tablespaces 中创建的。请参阅 第 17.6.3.5 节,“临时 tablespaces”。 -
Command-Line Format --innodb-fill-factor=#System Variable innodb_fill_factorScope 全局 Dynamic 是 SET_VARHint Applies否 Type 整数 Default Value 100Minimum Value 10Maximum Value 100InnoDB在创建或重建索引时执行批量加载。这是一种称为““排序索引构建”的索引创建方法。innodb_fill_factor定义了在排序索引构建期间每个 B 树页上填充的百分比,剩余空间保留用于未来索引增长。例如,将innodb_fill_factor设置为 80,将保留 20% 的空间用于未来索引增长。实际百分比可能有所不同。innodb_fill_factor设置被解释为一个提示,而不是硬限制。设置
innodb_fill_factor为100,留出1/16的空间在聚簇索引页中,以便未来索引增长。innodb_fill_factor适用于B树叶页和非叶页,不适用于外部页用于TEXT或BLOB条目。有关更多信息,请参阅第17.6.2.3节,“Sorted Index Builds”。
-
Command-Line Format --innodb-flush-log-at-timeout=#System Variable innodb_flush_log_at_timeoutScope 全局 Dynamic 是 SET_VARHint Applies否 Type 整数 Default Value 1Minimum Value 1Maximum Value 2700Unit 秒 每
N秒写入和刷新日志。innodb_flush_log_at_timeout允许增加超时期限,以减少刷新对性能的影响。默认设置为每秒一次。 -
innodb_flush_log_at_trx_commitCommand-Line Format --innodb-flush-log-at-trx-commit=#System Variable innodb_flush_log_at_trx_commitScope 全局 Dynamic 是 SET_VARHint Applies否 Type 枚举 Default Value 1Valid Values 012控制ACID符合性和性能之间的平衡。提交操作的日志写入和刷新可以被重新排列和批量处理,以提高性能,但这可能会在崩溃时丢失事务。
-
默认设置为1,要求完全的ACID符合性。每个事务提交时,日志都会被写入和刷新到磁盘。
-
如果设置为0,日志将每秒写入和刷新到磁盘一次。在崩溃时,未刷新的日志可能会丢失。
-
如果设置为2,日志将在每个事务提交后写入,并每秒刷新到磁盘一次。在崩溃时,未刷新的日志可能会丢失。
-
对于设置0和2,一秒钟的刷新频率不能保证。刷新可能会更频繁地发生,因为DDL更改和其他内部InnoDB活动会独立于
innodb_flush_log_at_trx_commit设置,导致日志刷新。崩溃时,可能会丢失一秒钟的事务。如果日志刷新频率高于或低于一秒钟,那么可能丢失的事务数量也会相应地变化。 -
日志刷新频率由
innodb_flush_log_at_timeout控制,可以将日志刷新频率设置为N秒(其中N是1 ... 2700,默认值为1)。然而,任何意外的mysqld进程退出都可能会擦除高达N秒的事务。 -
DDL更改和其他内部InnoDB活动会独立于
innodb_flush_log_at_trx_commit设置,导致日志刷新。 -
InnoDB崩溃恢复 无论innodb_flush_log_at_trx_commit设置如何工作。事务要么完全应用,要么完全擦除。
对于使用
InnoDB事务的复制设置中的持久性和一致性:-
如果启用了二进制日志记录,设置
sync_binlog=1。
有关在副本上最具弹性的设置组合的信息,请参阅 第 19.4.2 节,“处理副本的意外停止”。
Caution许多操作系统和一些磁盘硬件欺骗 flush-to-disk 操作。它们可能告诉 mysqld,即使它没有发生,flush 已经发生。在这种情况下,即使使用推荐的设置,事务的持久性也不能保证,在最坏的情况下,电源故障可能会损坏
InnoDB数据。使用 SCSI 磁盘控制器或磁盘中的电池备份磁盘缓存可以加速文件刷新,并使操作更加安全。您也可以尝试禁用硬件缓存中的磁盘写入缓存。 -
-
Command-Line Format --innodb-flush-method=valueSystem Variable innodb_flush_methodScope 全局 Dynamic 否 SET_VARHint Applies否 Type 字符串 Default Value (Unix, 8.3.0) fsyncDefault Value (Windows) unbufferedValid Values (Unix, 8.3.0) fsyncO_DSYNClittlesyncnosyncO_DIRECTO_DIRECT_NO_FSYNCValid Values (Windows) unbufferednormal定义了将数据刷新到
InnoDB数据文件 和 日志文件 的方法,这可能会影响 I/O 吞吐量。在 Unix-like 系统上,默认值是
fsync。在 Windows 上,默认值是unbuffered。Note在 MySQL 8.3 中,
innodb_flush_method选项可以以数字形式指定。Unix-like 系统上的
innodb_flush_method选项包括:-
fsync或0:InnoDB使用fsync()系统调用来刷新数据和日志文件。fsync是默认设置。 -
O_DSYNC或1:InnoDB使用O_SYNC打开和刷新日志文件,并使用fsync()刷新数据文件。InnoDB不直接使用O_DSYNC,因为在许多 Unix 变体上存在问题。 -
littlesync或2:此选项用于内部性能测试,当前不受支持。请自行承担风险。 -
nosync或3:此选项用于内部性能测试,当前不受支持。请自行承担风险。 -
O_DIRECT或4:InnoDB使用O_DIRECT(或 Solaris 上的directio())打开数据文件,并使用fsync()刷新数据和日志文件。此选项在某些 GNU/Linux 版本、FreeBSD 和 Solaris 上可用。 -
O_DIRECT_NO_FSYNC:InnoDB在刷新 I/O 时使用O_DIRECT,但跳过每个写入操作后的fsync()系统调用。MySQL 在创建新文件、增加文件大小和关闭文件时调用
fsync(),以确保文件系统元数据更改被同步。fsync()系统调用仍然在每个写操作后被跳过。如果 redo 日志文件和数据文件驻留在不同的存储设备上,并且在数据文件写入从设备缓存中刷新之前发生意外退出,可能会导致数据丢失。如果您使用或计划使用不同的存储设备来存储 redo 日志文件和数据文件,并且您的数据文件驻留在一个没有电池备份的缓存设备上,请使用
O_DIRECT代替。
在支持
fdatasync()系统调用的平台上,innodb_use_fdatasync变量允许innodb_flush_method选项使用fsync()来使用fdatasync()代替。fdatasync()系统调用不会刷新文件元数据的更改,除非需要用于后续数据检索,从而提供潜在的性能优势。在 Windows 系统上,
innodb_flush_method选项包括:-
unbuffered或0:InnoDB使用模拟异步 I/O 和非缓冲 I/O。 -
normal或1:InnoDB使用模拟异步 I/O 和缓冲 I/O。
每个设置对性能的影响取决于硬件配置和工作负载。请对您的特定配置进行基准测试,以决定使用哪个设置,或者是否保留默认设置。检查
Innodb_data_fsyncs状态变量,以查看每个设置的总fsync()调用数(或fdatasync()调用数,如果innodb_use_fdatasync启用)。您的工作负载中的读取和写入操作混合可能会影响设置的性能。例如,在具有硬件 RAID 控制器和电池备份写入缓存的系统上,O_DIRECT可以帮助避免InnoDB缓冲池和操作系统文件系统缓存之间的双重缓存。在某些系统上,其中InnoDB数据和日志文件位于 SAN 上,默认值或O_DSYNC可能对读取密集型工作负载具有更好的性能。始终使用反映生产环境的硬件和工作负载来测试该参数。有关一般 I/O 调优建议,请参阅 第 10.5.8 节,“Optimizing InnoDB Disk I/O”。如果
innodb_dedicated_server启用,则innodb_flush_method值将自动配置,如果未明确定义。有关更多信息,请参阅 第 17.8.12 节,“Enabling Automatic Configuration for a Dedicated MySQL Server”。 -
-
Command-Line Format --innodb-flush-neighbors=#System Variable innodb_flush_neighborsScope Global Dynamic Yes SET_VARHint AppliesNo Type Enumeration Default Value 0Valid Values 012指定是否在
InnoDB缓冲池中刷新一页时也刷新同一 extent 中的其他 脏页。-
将
innodb_flush_neighbors设置为 0 将禁用该功能。同一 extent 中的脏页不会被刷新。 -
将其设置为 1 则刷新同一 extent 中的连续脏页。
-
将其设置为 2 则刷新同一 extent 中的脏页。
当表数据存储在传统的硬盘驱动器(HDD)存储设备上时,flushing这些邻近页在一个操作中减少I/O开销(主要是磁盘寻道操作),相比于在不同的时间flushing单个页。对于存储在固态硬盘(SSD)上的表数据,寻道时间不是一个重要因素,可以将该选项设置为0,以便将写操作分布开来。有关信息,请参见第17.8.3.5节,“配置缓冲池刷新”。
-
-
Command-Line Format --innodb-flush-sync[={OFF|ON}]System Variable innodb_flush_syncScope Global Dynamic Yes SET_VARHint AppliesNo Type Boolean Default Value ON变量
innodb_flush_sync,默认情况下启用,会忽略innodb_io_capacity设置在检查点期间的I/O活动爆发中。要遵守innodb_io_capacity设置的I/O速率,禁用innodb_flush_sync。有关配置
innodb_flush_sync变量的信息,请参见第17.8.7节,“配置InnoDB I/O能力”。 -
Command-Line Format --innodb-flushing-avg-loops=#System Variable innodb_flushing_avg_loopsScope Global Dynamic Yes SET_VARHint AppliesNo Type Integer Default Value 30Minimum Value 1Maximum Value 1000InnoDB保持之前计算的快照的迭代次数,以控制自适应刷新如何快速响应工作负载的变化。增加该值使刷新操作率平滑地变化,适应工作负载的变化。减少该值使自适应刷新快速地响应工作负载的变化,这可能会导致刷新活动的峰值,如果工作负载突然增加或减少。
有关信息,请参见第17.8.3.5节,“配置缓冲池刷新”。
-
Command-Line Format --innodb-force-load-corrupted[={OFF|ON}]System Variable innodb_force_load_corruptedScope Global Dynamic No SET_VARHint AppliesNo Type Boolean Default Value OFF允许InnoDB在启动时加载标记为损坏的表。仅在故障排除期间使用,以恢复无法访问的数据。当故障排除完成后,禁用该设置并重新启动服务器。
-
Command-Line Format --innodb-force-recovery=#System Variable innodb_force_recoveryScope Global Dynamic No SET_VARHint AppliesNo Type Integer Default Value 0Minimum Value 0Maximum Value 6崩溃恢复模式,通常仅在严重故障排除情况下更改。可能的值从0到6。有关这些值的含义和重要信息,请参阅
innodb_force_recovery,见第17.20.3节,“强制InnoDB恢复”。Warning仅在紧急情况下将该变量设置为大于0的值,以便启动
InnoDB并转储表。作为安全措施,InnoDB在innodb_force_recovery大于0时禁止INSERT、UPDATE或DELETE操作。当innodb_force_recovery设置为4或更高时,InnoDB将进入只读模式。这些限制可能会导致复制管理命令失败,错误,因为复制存储副本状态日志在
InnoDB表中。 -
Command-Line Format --innodb-fsync-threshold=#System Variable innodb_fsync_thresholdScope Global Dynamic Yes SET_VARHint AppliesNo Type Integer Default Value 0Minimum Value 0Maximum Value 2**64-1默认情况下,当
InnoDB创建新数据文件,如新日志文件或表空间文件时,该文件将完全写入操作系统缓存,然后才刷新到磁盘,这可能会导致大量磁盘写活动同时发生。要强制较小、周期性的刷新数据从操作系统缓存,可以使用innodb_fsync_threshold变量定义字节阈值。当达到字节阈值时,操作系统缓存的内容将刷新到磁盘。默认值为0,强制默认行为,即仅在文件完全写入缓存后刷新到磁盘。指定阈值以强制较小、周期性的刷新可能有助于避免大量磁盘写活动的surge,例如,在多个MySQL实例使用相同存储设备的情况下,创建新MySQL实例及其关联数据文件可能会导致大量磁盘写活动,影响其他MySQL实例的性能。配置阈值可以避免这种写活动的surge。
-
System Variable innodb_ft_aux_tableScope Global Dynamic Yes SET_VARHint AppliesNo Type String 指定包含
FULLTEXT索引的InnoDB表的限定名称。该变量旨在诊断目的,可以仅在运行时设置。例如:SET GLOBAL innodb_ft_aux_table = 'test/t1';在设置该变量为格式
的名称后,db_name/table_nameINFORMATION_SCHEMA表INNODB_FT_INDEX_TABLE、INNODB_FT_INDEX_CACHE、INNODB_FT_CONFIG、INNODB_FT_DELETED和INNODB_FT_BEING_DELETED将显示指定表的搜索索引信息。有关更多信息,请参阅第17.15.4节,“InnoDB INFORMATION_SCHEMA FULLTEXT索引表”。
-
Command-Line Format --innodb-ft-cache-size=#System Variable InnoDB_FT_CACHE_SIZEScope 全局 Dynamic 否 SET_VARHint Applies否 Type 整数 Default Value 8000000Minimum Value 1600000Maximum Value 80000000Unit 字节 为InnoDB全文搜索索引缓存分配的内存大小,以字节为单位,该缓存用于存储文档的解析结果,以便创建InnoDB全文搜索索引。只有当缓存大小达到限制时,索引插入和更新才会被提交到磁盘。
InnoDB_FT_CACHE_SIZE定义了每个表的缓存大小。要设置所有表的全局限制,请参见InnoDB_FT_TOTAL_CACHE_SIZE。更多信息,请参见InnoDB全文搜索索引缓存。
-
Command-Line Format --innodb-ft-enable-diag-print[={OFF|ON}]System Variable InnoDB_FT_ENABLE_DIAG_PRINTScope 全局 Dynamic 是 SET_VARHint Applies否 Type 布尔值 Default Value OFF是否启用高级全文搜索(FTS)诊断输出。这项选项主要用于高级FTS调试,不是大多数用户关心的内容。输出将被打印到错误日志中,包括信息,如:
-
FTS索引同步进度(当FTS缓存限制达到时)。例如:
FTS SYNC for table test, deleted count: 100 size: 10000 bytes SYNC words: 100 -
FTS优化进度。例如:
FTS start optimize test FTS_OPTIMIZE: optimize "mysql" FTS_OPTIMIZE: processed "mysql" -
FTS索引构建进度。例如:
Number of doc processed: 1000 -
对于FTS查询,查询解析树、词权重、查询处理时间和内存使用情况将被打印。例如:
FTS Search Processing time: 1 secs: 100 millisec: row(s) 10000 Full Search Memory: 245666 (bytes), Row: 10000
-
-
Command-Line Format --innodb-ft-enable-stopword[={OFF|ON}]System Variable InnoDB_FT_ENABLE_STOPWORDScope 全局、会话 Dynamic 是 SET_VARHint Applies否 Type 布尔值 Default Value ON指定了与InnoDB全文搜索索引关联的停用词集是在索引创建时关联的。如果设置了
InnoDB_FT_USER_STOPWORD_TABLE选项,则停用词来自该表。否则,如果设置了InnoDB_FT_SERVER_STOPWORD_TABLE选项,则停用词来自该表。否则,将使用默认的停用词集。更多信息,请参见第14.9.4节“全文搜索停用词”。
-
Command-Line Format --innodb-ft-max-token-size=#System Variable InnoDB_FT_MAX_TOKEN_SIZEScope 全局 Dynamic 否 SET_VARHint Applies否 Type 整数 Default Value 84Minimum Value 10Maximum Value 84InnoDB全文搜索索引中存储的单词的最大字符长度。设置这个值的限制可以减少索引的大小,从而加速查询,方法是忽略长关键字或任意字母集合,这些字母集合不是真正的单词,也不太可能是搜索词。
更多信息,请参见第14.9.6节“微调MySQL全文搜索”。
-
Command-Line Format --innodb-ft-min-token-size=#System Variable innodb_ft_min_token_sizeScope 全局 Dynamic 否 SET_VARHint Applies否 Type 整数 Default Value 3Minimum Value 0Maximum Value 16InnoDB 全文索引中存储的最小单词长度。增加该值将减少索引的大小,从而加速查询,通过忽略搜索上下文中不太可能是重要的常见单词,例如英语单词 “a” 和 “to”。对于使用 CJK(中文、日文、韩文)字符集的内容,请指定值为 1。
更多信息,请参阅 第 14.9.6 节,“微调 MySQL 全文搜索”。
-
Command-Line Format --innodb-ft-num-word-optimize=#System Variable innodb_ft_num_word_optimizeScope 全局 Dynamic 是 SET_VARHint Applies否 Type 整数 Default Value 2000Minimum Value 1000Maximum Value 10000在每个
OPTIMIZE TABLE操作中处理的单词数量,以维护 InnoDB 全文索引。因为批量插入或更新操作可能需要大量的索引维护,因此您可能需要执行多个OPTIMIZE TABLE语句,每个语句从上一个语句结束的地方继续。更多信息,请参阅 第 14.9.6 节,“微调 MySQL 全文搜索”。
-
Command-Line Format --innodb-ft-result-cache-limit=#System Variable innodb_ft_result_cache_limitScope 全局 Dynamic 是 SET_VARHint Applies否 Type 整数 Default Value 2000000000Minimum Value 1000000Maximum Value 2**32-1Unit 字节 InnoDB 全文搜索查询结果缓存限制(以字节为单位),用于限制每个全文搜索查询或每个线程的缓存大小。中间和最终 InnoDB 全文搜索查询结果将在内存中处理。使用
innodb_ft_result_cache_limit限制全文搜索查询结果缓存大小,以避免大量内存消耗。在查询结果缓存大小达到限制时,将返回错误,指示查询超出允许的最大内存。所有平台类型和位大小的
innodb_ft_result_cache_limit的最大值为 2**32-1。 -
innodb_ft_server_stopword_tableCommand-Line Format --innodb-ft-server-stopword-table=db_name/table_nameSystem Variable innodb_ft_server_stopword_tableScope 全局 Dynamic 是 SET_VARHint Applies否 Type 字符串 Default Value NULL该选项用于指定 InnoDB 全文索引的停用词表 для所有 InnoDB 表。要配置特定 InnoDB 表的停用词表,请使用
innodb_ft_user_stopword_table。设置
innodb_ft_server_stopword_table为包含停止词列表的表名,以格式。db_name/table_name停止词表必须在配置
innodb_ft_server_stopword_table之前存在。innodb_ft_enable_stopword必须启用,innodb_ft_server_stopword_table选项必须配置在创建FULLTEXT索引之前。停止词表必须是一个
InnoDB表,包含一个名为value的单个VARCHAR列。有关更多信息,请参阅 第 14.9.4 节,“Full-Text Stopwords”。
-
Command-Line Format --innodb-ft-sort-pll-degree=#System Variable innodb_ft_sort_pll_degreeScope Global Dynamic No SET_VARHint AppliesNo Type Integer Default Value 2Minimum Value 1Maximum Value 16用于在
InnoDBFULLTEXT索引中构建搜索索引时的并行线程数。有关更多信息,请参阅 第 17.6.2.4 节,“InnoDB Full-Text Indexes”,和
innodb_sort_buffer_size。 -
Command-Line Format --innodb-ft-total-cache-size=#System Variable innodb_ft_total_cache_sizeScope Global Dynamic No SET_VARHint AppliesNo Type Integer Default Value 640000000Minimum Value 32000000Maximum Value 1600000000Unit 字节 为所有表的
InnoDB全文搜索索引缓存分配的总内存大小,以字节为单位。创建多个表,每个表都有一个FULLTEXT搜索索引,可能会消耗大量可用内存。innodb_ft_total_cache_size定义了一个全局内存限制,以避免过度内存消耗。如果达到全局限制,索引操作将触发强制同步。有关更多信息,请参阅 InnoDB Full-Text Index Cache。
-
Command-Line Format --innodb-ft-user-stopword-table=db_name/table_nameSystem Variable innodb_ft_user_stopword_tableScope Global, Session Dynamic Yes SET_VARHint AppliesNo Type String Default Value NULL用于指定特定表的
InnoDBFULLTEXT索引停止词列表。要配置所有InnoDB表的停止词列表,请使用innodb_ft_server_stopword_table。将
innodb_ft_user_stopword_table设置为包含停止词列表的表名,以格式。db_name/table_name停止词表必须在配置
innodb_ft_user_stopword_table之前存在。innodb_ft_enable_stopword必须启用,且innodb_ft_user_stopword_table必须在创建FULLTEXT索引之前配置。停止词表必须是一个
InnoDB表,包含一个名为value的单个VARCHAR列。有关更多信息,请参阅 第 14.9.4 节,“全文停止词”。
-
Command-Line Format --innodb-idle-flush-pct=#System Variable innodb_idle_flush_pctScope 全局 Dynamic 是 SET_VARHint Applies否 Type 整数 Default Value 100Minimum Value 0Maximum Value 100限制 InnoDB 空闲时的页面刷新。
innodb_idle_flush_pct值是innodb_io_capacity设置的百分比,该设置定义了 InnoDB 可用的 I/O 操作数每秒。有关更多信息,请参阅 限制缓冲区刷新率。 -
Command-Line Format --innodb-io-capacity=#System Variable innodb_io_capacityScope 全局 Dynamic 是 SET_VARHint Applies否 Type 整数 Default Value 200Minimum Value 100Maximum Value (64-bit platforms, 8.3.0) 2**64-1Maximum Value (32-bit platforms, 8.3.0) 2**32-1innodb_io_capacity变量定义了 InnoDB 后台任务的 I/O 操作数每秒,例如从缓冲池刷新页面和合并更改缓冲区中的数据。有关配置
innodb_io_capacity变量的信息,请参阅 第 17.8.7 节,“配置 InnoDB I/O 容量”。 -
Command-Line Format --innodb-io-capacity-max=#System Variable innodb_io_capacity_maxScope 全局 Dynamic 是 SET_VARHint Applies否 Type 整数 Default Value 2 * innodb_io_capacity, min of 2000Minimum Value 100Maximum Value (32-bit platforms, 8.3.0) 2**32-1Maximum Value (Unix, 64-bit platforms, 8.3.0) 2**64-1如果刷新活动落后,InnoDB 可以以高于
innodb_io_capacity变量定义的 IOPS 率进行刷新。innodb_io_capacity_max变量定义了 InnoDB 后台任务在这种情况下的最大 IOPS。有关配置
innodb_io_capacity_max变量的信息,请参阅 第 17.8.7 节,“配置 InnoDB I/O 容量”。 -
innodb_limit_optimistic_insert_debugCommand-Line Format --innodb-limit-optimistic-insert-debug=#System Variable innodb_limit_optimistic_insert_debugScope 全局 Dynamic 是 SET_VARHint Applies否 Type 整数 Default Value 0Minimum Value 0Maximum Value 2**32-1限制每个 B-tree 页的记录数。默认值为 0,表示不施加限制。此选项仅在使用
WITH_DEBUGCMake 选项编译调试支持时可用。 -
Command-Line Format --innodb-lock-wait-timeout=#System Variable innodb_lock_wait_timeoutScope 全局、会话 Dynamic 是 SET_VARHint Applies否 Type 整数 Default Value 50Minimum Value 1Maximum Value 1073741824Unit 秒 InnoDB 事务等待行锁的时间长度(以秒为单位),在等待行锁时,InnoDB 事务最多等待这么长时间。如果超时,当前语句将回滚(不是整个事务)。要使整个事务回滚,请使用
--innodb-rollback-on-timeout选项。见 第 17.20.5 节,“InnoDB 错误处理”。ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction当锁定超时发生时,当前语句将回滚(不是整个事务)。要使整个事务回滚,请使用
--innodb-rollback-on-timeout选项。见 第 17.20.5 节,“InnoDB 错误处理”。您可能会降低这个值,以便在高度交互式应用程序或 OLTP 系统中快速显示用户反馈,或者将更新放入队列中,以便稍后处理。您可能会增加这个值,以便在长时间的后端操作中,例如数据仓库中的转换步骤,等待其他大型插入或更新操作完成。
innodb_lock_wait_timeout适用于 InnoDB 行锁。MySQL 表锁不在 InnoDB 中,因此这个超时不适用于表锁等待。锁定超时值不适用于死锁检测(
innodb_deadlock_detect)启用时,因为 InnoDB 立即检测死锁并回滚其中一个死锁事务。当innodb_deadlock_detect禁用时,InnoDB 依赖于innodb_lock_wait_timeout来回滚事务。当死锁发生时,见 第 17.7.5.2 节,“死锁检测”。innodb_lock_wait_timeout可以在运行时使用SET GLOBAL或SET SESSION语句设置。更改全局设置需要足够的权限来设置全局系统变量(见 第 7.1.9.1 节,“系统变量权限”),并影响所有后续连接的客户端。任何客户端都可以更改会话设置,以影响该客户端。 -
Command-Line Format --innodb-log-buffer-size=#System Variable innodb_log_buffer_sizeScope 全局 Dynamic 是 SET_VARHint Applies否 Type 整数 Default Value 16777216Minimum Value 1048576Maximum Value 4294967295缓冲区的大小,以字节为单位,用于写入磁盘上的日志文件。默认值为16MB。大的日志缓冲区使得大型事务可以运行,而不需要在事务提交之前将日志写入磁盘。因此,如果您有更新、插入或删除许多行的事务,使日志缓冲区变大可以节省磁盘I/O。有关信息,请参见内存配置和第10.5.4节,“优化InnoDB重做日志”。对于一般的I/O调整建议,请参见第10.5.8节,“优化InnoDB磁盘I/O”。
-
innodb_log_checkpoint_fuzzy_nowCommand-Line Format --innodb-log-checkpoint-fuzzy-now[={OFF|ON}]System Variable innodb_log_checkpoint_fuzzy_nowScope 全局 Dynamic 是 SET_VARHint Applies否 Type 布尔值 Default Value OFF启用此调试选项,以强制InnoDB写入模糊检查点。此选项仅在使用
WITH_DEBUGCMake选项编译调试支持时可用。 -
Command-Line Format --innodb-log-checkpoint-now[={OFF|ON}]System Variable innodb_log_checkpoint_nowScope 全局 Dynamic 是 SET_VARHint Applies否 Type 布尔值 Default Value OFF启用此调试选项,以强制InnoDB写入检查点。此选项仅在使用
WITH_DEBUGCMake选项编译调试支持时可用。 -
Command-Line Format --innodb-log-checksums[={OFF|ON}]System Variable innodb_log_checksumsScope 全局 Dynamic 是 SET_VARHint Applies否 Type 布尔值 Default Value ON启用或禁用重做日志页的校验和。
innodb_log_checksums=ON启用CRC-32C 校验和算法用于重做日志页。当innodb_log_checksums禁用时,重做日志页校验和字段的内容将被忽略。重做日志头页和重做日志检查点页的校验和从不禁用。
-
Command-Line Format --innodb-log-compressed-pages[={OFF|ON}]System Variable innodb_log_compressed_pagesScope 全局 Dynamic 是 SET_VARHint Applies否 Type 布尔值 Default Value ON指定是否将重新压缩的页的镜像写入重做日志中。重新压缩可能发生在对压缩数据进行更改时。
innodb_log_compressed_pages默认情况下启用,以防止在恢复期间可能发生的损坏,如果使用不同的zlib压缩算法版本。如果您确定zlib版本不会更改,可以禁用innodb_log_compressed_pages以减少重做日志生成对于修改压缩数据的工作负载。要测量启用或禁用
innodb_log_compressed_pages的效果,比较相同工作负载下的重做日志生成情况。测量重做日志生成的选项包括观察日志序列号(LSN) 在LOG部分的SHOW ENGINE INNODB STATUS输出中,或者监控Innodb_os_log_written状态以获取重做日志文件中的字节数。有关信息,请参阅 第 17.9.1.6 节,“OLTP 工作负载的压缩”。
-
Command-Line Format --innodb-log-file-size=#Deprecated 是 System Variable innodb_log_file_sizeScope 全局 Dynamic 否 SET_VARHint Applies否 Type 整数 Default Value 50331648Minimum Value 4194304Maximum Value 512GB / innodb_log_files_in_groupUnit 字节 Noteinnodb_log_file_size和innodb_log_files_in_group已被innodb_redo_log_capacity取代;请参阅 第 17.6.5 节,“重做日志”。每个 日志文件 在 日志组 中的大小(以字节为单位)。组合日志文件的大小(
innodb_log_file_size*innodb_log_files_in_group)不能超过略小于 512GB 的最大值。例如,两个 255 GB 的日志文件接近限制但不超过限制。默认值为 48MB。通常,组合日志文件的大小应该足够大,以便服务器可以平滑工作负载的峰值和低谷,这通常意味着有足够的重做日志空间来处理超过一个小时的写活动。更大的日志文件也使 崩溃恢复 变慢。
最小
innodb_log_file_size是 4MB。有关信息,请参阅 重做日志配置。有关一般 I/O 调优建议,请参阅 第 10.5.8 节,“优化 InnoDB 磁盘 I/O”。
如果
innodb_dedicated_server启用,则innodb_log_file_size值将自动配置,如果未明确定义。有关更多信息,请参阅 第 17.8.12 节,“启用专用 MySQL 服务器的自动配置”。 -
Command-Line Format --innodb-log-files-in-group=#Deprecated 是 System Variable innodb_log_files_in_groupScope 全局 Dynamic 否 SET_VARHint Applies否 Type 整数 Default Value 2Minimum Value 2Maximum Value 100Noteinnodb_log_file_size和innodb_log_files_in_group已被innodb_redo_log_capacity取代;见 第 17.6.5 节,“重做日志”。日志组中的日志文件数。
InnoDB按照循环方式写入这些文件。默认(也是推荐的)值是 2。文件的位置由innodb_log_group_home_dir指定。日志文件的总大小(innodb_log_file_size*innodb_log_files_in_group)可以达到 512GB。有关信息,请见 重做日志配置。
如果
innodb_dedicated_server启用,则innodb_log_files_in_group将自动配置,如果没有明确定义。有关信息,请见 第 17.8.12 节,“为专用 MySQL 服务器启用自动配置”。 -
Command-Line Format --innodb-log-group-home-dir=dir_nameSystem Variable innodb_log_group_home_dirScope 全局 Dynamic 否 SET_VARHint Applies否 Type 目录名 InnoDB 重做日志文件的目录路径。
有关信息,请见 重做日志配置。
-
Command-Line Format --innodb-log-spin-cpu-abs-lwm=#System Variable innodb_log_spin_cpu_abs_lwmScope 全局 Dynamic 是 SET_VARHint Applies否 Type 整数 Default Value 80Minimum Value 0Maximum Value 4294967295定义了用户线程等待 flushed redo 时的最小 CPU 使用率。该值以 CPU 核心使用率的总和表示。例如,默认值 80 表示单个 CPU 核心的 80% 使用率。在多核处理器系统上,值 150 表示一个 CPU 核心的 100% 使用率加上第二个 CPU 核心的 50% 使用率。
有关信息,请见 第 10.5.4 节,“优化 InnoDB 重做日志”。
-
Command-Line Format --innodb-log-spin-cpu-pct-hwm=#System Variable innodb_log_spin_cpu_pct_hwmScope 全局 Dynamic 是 SET_VARHint Applies否 Type 整数 Default Value 50Minimum Value 0Maximum Value 100定义了用户线程等待 flushed redo 时的最大 CPU 使用率。该值以百分比表示,表示所有 CPU 核心的总处理能力。默认值为 50%。例如,两个 CPU 核心的 100% 使用率相当于四个 CPU 核心的 50% 处理能力。
变量
innodb_log_spin_cpu_pct_hwm尊重处理器亲和力。例如,如果服务器有48个核心,但 mysqld 进程仅固定在四个CPU核心上,那么其他44个CPU核心将被忽略。有关信息,请参阅 第10.5.4节,“优化InnoDB重做日志”。
-
innodb_log_wait_for_flush_spin_hwmCommand-Line Format --innodb-log-wait-for-flush-spin-hwm=#System Variable innodb_log_wait_for_flush_spin_hwmScope 全局 Dynamic 是 SET_VARHint Applies否 Type 整数 Default Value 400Minimum Value 0Maximum Value (64-bit platforms) 2**64-1Maximum Value (32-bit platforms) 2**32-1Unit 微秒 定义用户线程等待flush redo的最大平均日志刷新时间。默认值为400微秒。
有关信息,请参阅 第10.5.4节,“优化InnoDB重做日志”。
-
Command-Line Format --innodb-log-write-ahead-size=#System Variable innodb_log_write_ahead_sizeScope 全局 Dynamic 是 SET_VARHint Applies否 Type 整数 Default Value 8192Minimum Value 512 (日志文件块大小)Maximum Value 等于innodb_page_sizeUnit 字节 定义redo日志的写入提前块大小,以字节为单位。为了避免 “读取-写入”,请将
innodb_log_write_ahead_size设置为与操作系统或文件系统缓存块大小匹配。默认设置为8192字节。“读取-写入” 发生在redo日志块未完全缓存到操作系统或文件系统缓存中时,因为redo日志写入提前块大小与操作系统或文件系统缓存块大小不匹配。有效的
innodb_log_write_ahead_size值是InnoDB日志文件块大小(2n)的倍数。最小值是InnoDB日志文件块大小(512)。当最小值被指定时,不会发生写入提前。最大值等于innodb_page_size值。如果您指定的innodb_log_write_ahead_size值大于innodb_page_size值,那么innodb_log_write_ahead_size设置将被截断为innodb_page_size值。将
innodb_log_write_ahead_size值设置得太低,相对于操作系统或文件系统缓存块大小,会导致 “读取-写入”。将值设置得太高可能会对fsync性能产生轻微影响,因为多个块将被同时写入。有关信息,请参阅 第10.5.4节,“优化InnoDB重做日志”。
-
Command-Line Format --innodb-log-writer-threads[={OFF|ON}]System Variable innodb_log_writer_threadsScope 全局 Dynamic 是 SET_VARHint Applies否 Type 布尔值 Default Value ON启用专用的日志写入线程,以从日志缓冲区写入重做日志记录到系统缓冲区,并将系统缓冲区刷新到重做日志文件中。专用的日志写入线程可以提高高并发系统的性能,但对于低并发系统,禁用专用的日志写入线程可以提供更好的性能。
有关更多信息,请参阅 第 10.5.4 节,“优化 InnoDB 重做日志记录”。
-
Command-Line Format --innodb-lru-scan-depth=#System Variable innodb_lru_scan_depthScope 全局 Dynamic 是 SET_VARHint Applies否 Type 整数 Default Value 1024Minimum Value 100Maximum Value (64-bit platforms) 2**64-1Maximum Value (32-bit platforms) 2**32-1影响
InnoDB缓冲池刷新操作的算法和启发式方法的参数。主要对性能专家调整 I/O 密集型工作负载感兴趣。它指定每个缓冲池实例中,page cleaner 线程扫描查找脏页以刷新的深度。较小的设置通常适合大多数工作负载。如果值太高,可能会影响性能。只有在有闲置 I/O 容量的情况下,才考虑增加该值。相反,如果写入密集型工作负载饱和了 I/O 容量,请减少该值,特别是在大缓冲池的情况下。
调整
innodb_lru_scan_depth时,从低值开始,并以不常见零空闲页为目标。同时,考虑调整innodb_lru_scan_depth时,缓冲池实例的数量,因为innodb_lru_scan_depth*innodb_buffer_pool_instances定义了每秒 page cleaner 线程执行的工作量。有关信息,请参阅 第 17.8.3.5 节,“配置缓冲池刷新”。有关一般 I/O 调整建议,请参阅 第 10.5.8 节,“优化 InnoDB 磁盘 I/O”。
-
Command-Line Format --innodb-max-dirty-pages-pct=#System Variable innodb_max_dirty_pages_pctScope 全局 Dynamic 是 SET_VARHint Applies否 Type 数字 Default Value 90Minimum Value 0Maximum Value 99.999InnoDB尝试从缓冲池中刷新数据,以便脏页的百分比不超过该值。该
innodb_max_dirty_pages_pct设置确定了刷新活动的目标。它不影响刷新的速率。有关管理刷新速率的信息,请参阅 第 17.8.3.5 节,“配置缓冲池刷新”。有关信息,请参阅 第 17.8.3.5 节,“配置缓冲池刷新”。有关一般 I/O 调整建议,请参阅 第 10.5.8 节,“优化 InnoDB 磁盘 I/O”。
-
innodb_max_dirty_pages_pct_lwmCommand-Line Format --innodb-max-dirty-pages-pct-lwm=#System Variable innodb_max_dirty_pages_pct_lwmScope 全局 Dynamic 是 SET_VARHint Applies否 Type 数字 Default Value 10Minimum Value 0Maximum Value 99.999定义了一个低水位标记,表示脏页的百分比,以控制脏页率。当脏页率达到这个值时,预刷新行为将被启用。如果将其设置为 0,则禁用预刷新行为。配置的值应该总是小于
innodb_max_dirty_pages_pct的值。更多信息,请参见 第 17.8.3.5 节,“配置缓冲池刷新”。 -
Command-Line Format --innodb-max-purge-lag=#System Variable innodb_max_purge_lagScope 全局 Dynamic 是 SET_VARHint Applies否 Type 整数 Default Value 0Minimum Value 0Maximum Value 4294967295定义了最大 purge 延迟。如果这个值被超过,将对
INSERT、UPDATE和DELETE操作施加延迟,以便 purge 追上。默认值为 0,这意味着没有最大 purge 延迟和没有延迟。更多信息,请参见 第 17.8.9 节,“Purge 配置”。
-
Command-Line Format --innodb-max-purge-lag-delay=#System Variable innodb_max_purge_lag_delayScope 全局 Dynamic 是 SET_VARHint Applies否 Type 整数 Default Value 0Minimum Value 0Maximum Value 10000000Unit 微秒 指定了当
innodb_max_purge_lag阈值被超过时施加的最大延迟时间。指定的innodb_max_purge_lag_delay值是innodb_max_purge_lag公式计算的延迟期的上限。更多信息,请参见 第 17.8.9 节,“Purge 配置”。
-
Command-Line Format --innodb-max-undo-log-size=#System Variable innodb_max_undo_log_sizeScope 全局 Dynamic 是 SET_VARHint Applies否 Type 整数 Default Value 1073741824Minimum Value 10485760Maximum Value 2**64-1Unit 字节 定义了撤销日志表空间的阈值大小。如果撤销表空间超过这个阈值,它可以在
innodb_undo_log_truncate启用时被截断。默认值为 1073741824 字节(1024 MiB)。更多信息,请参见 截断撤销表空间。
-
innodb_merge_threshold_set_all_debugCommand-Line Format --innodb-merge-threshold-set-all-debug=#System Variable innodb_merge_threshold_set_all_debugScope 全局 Dynamic 是 SET_VARHint Applies否 Type 整数 Default Value 50Minimum Value 1Maximum Value 50定义了一个页面完整百分比值,以覆盖当前的
MERGE_THRESHOLD设置,对于所有当前在字典缓存中的索引。这项选项仅在使用WITH_DEBUGCMake 选项编译调试支持时可用。有关信息,请参阅 第 17.8.11 节,“配置索引页面合并阈值”。 -
Command-Line Format --innodb-monitor-disable={counter|module|pattern|all}System Variable innodb_monitor_disableScope 全局 Dynamic 是 SET_VARHint Applies否 Type 字符串 该变量充当开关,禁用
InnoDB指标计数器。计数器数据可以使用 Information SchemaINNODB_METRICS表查询。有关使用信息,请参阅 第 17.15.6 节,“InnoDB INFORMATION_SCHEMA 指标表”。innodb_monitor_disable='latch'禁用SHOW ENGINE INNODB MUTEX的统计信息收集。有关更多信息,请参阅 第 15.7.7.16 节,“SHOW ENGINE 语句”。 -
Command-Line Format --innodb-monitor-enable={counter|module|pattern|all}System Variable innodb_monitor_enableScope 全局 Dynamic 是 SET_VARHint Applies否 Type 字符串 该变量充当开关,启用
InnoDB指标计数器。计数器数据可以使用 Information SchemaINNODB_METRICS表查询。有关使用信息,请参阅 第 17.15.6 节,“InnoDB INFORMATION_SCHEMA 指标表”。innodb_monitor_enable='latch'启用SHOW ENGINE INNODB MUTEX的统计信息收集。有关更多信息,请参阅 第 15.7.7.16 节,“SHOW ENGINE 语句”。 -
Command-Line Format --innodb-monitor-reset={counter|module|pattern|all}System Variable innodb_monitor_resetScope 全局 Dynamic 是 SET_VARHint Applies否 Type 枚举 Default Value NULLValid Values countermodulepatternall该变量充当开关,重置
InnoDB指标计数器 的计数值为零。计数器数据可以使用 Information SchemaINNODB_METRICS表查询。有关使用信息,请参阅 第 17.15.6 节,“InnoDB INFORMATION_SCHEMA 指标表”。innodb_monitor_reset='latch'重置由SHOW ENGINE INNODB MUTEX报告的统计信息。有关更多信息,请参阅 第 15.7.7.16 节,“SHOW ENGINE 语句”。 -
Command-Line Format --innodb-monitor-reset-all={counter|module|pattern|all}System Variable innodb_monitor_reset_allScope 全局 Dynamic 是 SET_VARHint Applies否 Type 枚举 Default Value NULLValid Values countermodulepatternall该变量充当开关,重置所有值(最小值、最大值等)用于
InnoDBmetrics 计数器。计数器数据可以使用信息模式INNODB_METRICS表查询。有关使用信息,请参阅 第 17.15.6 节,“InnoDB INFORMATION_SCHEMA Metrics 表”。 -
Command-Line Format --innodb-numa-interleave[={OFF|ON}]System Variable innodb_numa_interleaveScope 全局 Dynamic 否 SET_VARHint Applies否 Type 布尔值 Default Value OFF启用 NUMA interleaved 内存策略以分配
InnoDB缓冲池。当innodb_numa_interleave启用时,NUMA 内存策略将设置为MPOL_INTERLEAVE对于 mysqld 进程。InnoDB缓冲池分配后,NUMA 内存策略将设置回MPOL_DEFAULT。要使innodb_numa_interleave选项可用,MySQL 必须在 NUMA 启用的 Linux 系统上编译。CMake 根据当前平台是否具有 NUMA 支持来设置默认
WITH_NUMA值。有关更多信息,请参阅 第 2.8.7 节,“MySQL 源代码配置选项”。 -
Command-Line Format --innodb-old-blocks-pct=#System Variable innodb_old_blocks_pctScope 全局 Dynamic 是 SET_VARHint Applies否 Type 整数 Default Value 37Minimum Value 5Maximum Value 95指定
InnoDB缓冲池中用于旧块 子列表 的近似百分比。值的范围是 5 到 95。默认值是 37(即池的 3/8)。通常与innodb_old_blocks_time结合使用。有关更多信息,请参阅 第 17.8.3.3 节,“使缓冲池扫描抵抗”。有关缓冲池管理、LRU 算法和驱逐策略的信息,请参阅 第 17.5.1 节,“缓冲池”。
-
Command-Line Format --innodb-old-blocks-time=#System Variable innodb_old_blocks_timeScope 全局 Dynamic 是 SET_VARHint Applies否 Type 整数 Default Value 1000Minimum Value 0Maximum Value 2**32-1Unit 毫秒 非零值保护缓冲池不被短暂期限的数据填充,例如在完整表扫描期间。增加该值可以提供更多保护,以免完整表扫描干扰缓冲池中的数据。
指定在旧子列表中插入的块必须等待多长时间(毫秒)后才能移到新子列表中。如果该值为 0,则插入旧子列表的块将在第一次访问时立即移到新子列表中。如果该值大于 0,则块将在旧子列表中等待至少该值毫秒后才能移到新子列表中。
默认值为 1000。
该变量通常与
innodb_old_blocks_pct结合使用。有关更多信息,请参阅 第 17.8.3.3 节,“使缓冲池扫描抵抗”。有关缓冲池管理、LRU 算法和驱逐策略的信息,请参阅 第 17.5.1 节,“缓冲池”。 -
innodb_online_alter_log_max_sizeCommand-Line Format --innodb-online-alter-log-max-size=#System Variable innodb_online_alter_log_max_sizeScope 全局 Dynamic 是 SET_VARHint Applies否 Type 整数 Default Value 134217728Minimum Value 65536Maximum Value 2**64-1Unit 字节 指定在线 DDL 操作期间临时日志文件的最大大小(以字节为单位)。该日志文件用于存储在 DDL 操作期间插入、更新或删除的数据。如果临时日志文件超过最大大小限制,DDL 操作将失败,并回滚所有未提交的并发 DML 操作。
-
Command-Line Format --innodb-open-files=#System Variable innodb_open_filesScope 全局 Dynamic 是 SET_VARHint Applies否 Type 整数 Default Value -1(表示自动调整大小,不要分配该字面值)Minimum Value 10Maximum Value 2147483647指定 InnoDB 可以同时打开的最大文件数。如果
innodb_file_per_table禁用,则默认值为 300;否则,默认值为 300 或table_open_cache设置的值,取两者中的较高值。该
innodb_open_files限制可以在运行时使用SELECT innodb_set_open_files_limit(语句设置,其中N)N是所需的innodb_open_files限制;例如:mysql> SELECT innodb_set_open_files_limit(1000);该语句执行一个存储过程,该过程设置新的限制。如果过程成功,它将返回新设置的限制值;否则,将返回失败消息。
不允许使用
SET语句设置innodb_open_files。要在运行时设置innodb_open_files,请使用上述SELECT innodb_set_open_files_limit(语句。N)设置
innodb_open_files=default不受支持。仅允许整数值。为了防止非 LRU 管理文件占用整个
innodb_open_files限制,非 LRU 管理文件被限制为该限制的 90%,以保留 10% 用于 LRU 管理文件。 -
Command-Line Format --innodb-optimize-fulltext-only[={OFF|ON}]System Variable innodb_optimize_fulltext_onlyScope Global Dynamic Yes SET_VARHint AppliesNo Type Boolean Default Value OFF更改
OPTIMIZE TABLE在InnoDB表上的操作方式。旨在临时启用,用于InnoDB表的维护操作,具有FULLTEXT索引。默认情况下,
OPTIMIZE TABLE重新组织表的聚簇索引中的数据。当启用该选项时,OPTIMIZE TABLE跳过表数据的重新组织,而是处理InnoDBFULLTEXT索引的新增、删除和更新的标记数据。有关更多信息,请参阅 优化 InnoDB 全文本索引。 -
Command-Line Format --innodb-page-cleaners=#System Variable innodb_page_cleanersScope Global Dynamic No SET_VARHint AppliesNo Type Integer Default Value 4Minimum Value 1Maximum Value 64页面清洁器线程的数量,用于从缓冲池实例中刷新脏页。页面清洁器线程执行缓冲池实例的刷新列表和 LRU 刷新任务。当有多个页面清洁器线程时,缓冲池实例的刷新任务将被分配给空闲的页面清洁器线程。
innodb_page_cleaners的默认值为 4。如果页面清洁器线程的数量超过缓冲池实例的数量,则innodb_page_cleaners将自动设置为与innodb_buffer_pool_instances相同的值。如果您的工作负载是写入 IO 绑定的,并且您的系统硬件有可用容量,那么增加页面清洁器线程的数量可能会提高写入 IO 吞吐量。
多线程页面清洁器支持扩展到关闭和恢复阶段。
在 Linux 平台上,使用
setpriority()系统调用,以便在支持该功能的系统上,mysqld 执行用户被授权给page_cleaner线程优先级高于其他 MySQL 和InnoDB线程,以帮助页面刷新跟上当前工作负载。setpriority()支持由以下InnoDB启动消息指示:[Note] InnoDB: If the mysqld execution user is authorized, page cleaner thread priority can be changed. See the man page of setpriority().对于不由 systemd 管理的服务器启动和关闭,mysqld 执行用户授权可以在
/etc/security/limits.conf中配置。例如,如果 mysqld 在mysql用户下运行,可以通过添加以下行到/etc/security/limits.conf授权mysql用户:mysql hard nice -20 mysql soft nice -20对于 systemd 管理的系统,可以通过在本地 systemd 配置文件中指定
LimitNICE=-20来实现相同的效果。例如,创建一个名为override.conf的文件在/etc/systemd/system/mysqld.service.d/override.conf并添加以下条目:[Service] LimitNICE=-20创建或更改
override.conf后,重新加载 systemd 配置,然后告诉 systemd 重新启动 MySQL 服务:systemctl daemon-reload systemctl restart mysqld # RPM platforms systemctl restart mysql # Debian platforms有关使用本地 systemd 配置文件的更多信息,请参阅 配置 systemd for MySQL。
授权 mysqld 执行用户后,使用 cat 命令来验证 mysqld 进程的配置
Nice限制:$> cat /proc/mysqld_pid/limits | grep nice Max nice priority 18446744073709551596 18446744073709551596 -
Command-Line Format --innodb-page-size=#System Variable innodb_page_sizeScope 全局 Dynamic 否 SET_VARHint Applies否 Type 枚举 Default Value 16384Valid Values 40968192163843276865536指定
InnoDB页面大小。值可以以字节或千字节指定。例如,16 千字节页面大小值可以指定为 16384、16KB 或 16k。innodb_page_size只能在初始化 MySQL 实例之前配置,不能在之后更改。如果没有指定值,则实例将使用默认页面大小。请参阅 第 17.8.1 节,“InnoDB 启动配置”。对于 32KB 和 64KB 页面大小,最大行长度约为 16000 字节。
ROW_FORMAT=COMPRESSED不支持在innodb_page_size设置为 32KB 或 64KB 时。对于innodb_page_size=32KB,extent 大小为 2MB。对于innodb_page_size=64KB,extent 大小为 4MB。innodb_log_buffer_size应该至少设置为 16M(默认)时使用 32KB 或 64KB 页面大小。默认的 16KB 页面大小或更大适合广泛的 工作负载OLTP 工作负载,涉及许多小写操作,其中争用可能是一个问题,因为单个页面包含许多行。较小的页面也可能与 SSD 存储设备一起使用,后者通常使用小块大小。将
InnoDB页面大小保持接近存储设备块大小,以最小化重写到磁盘的未更改数据量。最小的文件大小取决于第一个系统表空间数据文件 (
ibdata1) 的innodb_page_size值。请参阅innodb_data_file_path选项描述以获取更多信息。使用特定
InnoDB页大小的 MySQL 实例不能使用来自不同页大小实例的数据文件或日志文件。有关一般 I/O 调优建议,请参阅 第 10.5.8 节,“优化 InnoDB 磁盘 I/O”。
-
Command-Line Format --innodb-parallel-read-threads=#System Variable innodb_parallel_read_threadsScope 会话 Dynamic 是 SET_VARHint Applies否 Type 整数 Default Value 4Minimum Value 1Maximum Value 256定义可以用于并行聚簇索引读取的线程数。并行扫描分区也支持。并行读取线程可以提高
CHECK TABLE性能。InnoDB在CHECK TABLE操作期间两次读取聚簇索引。第二次读取可以并行进行。这项功能不适用于次要索引扫描。innodb_parallel_read_threads会话变量必须设置为大于 1 的值,以便并行聚簇索引读取发生。实际使用的线程数取决于innodb_parallel_read_threads设置或要扫描的索引子树的数量,以较小者为准。在扫描期间读取的页面将被保留在缓冲池 LRU 列表的尾部,以便在需要空闲缓冲池页面时快速释放。最大并行读取线程数(256)是所有客户端连接的总线程数。如果达到线程限制,连接将回退到使用单个线程。
-
Command-Line Format --innodb-print-all-deadlocks[={OFF|ON}]System Variable innodb_print_all_deadlocksScope 全局 Dynamic 是 SET_VARHint Applies否 Type 布尔值 Default Value OFF启用该选项时,
InnoDB用户事务中的所有 死锁 信息将被记录在mysqld错误日志 中。否则,只显示最后一个死锁信息,使用SHOW ENGINE INNODB STATUS命令。偶尔的InnoDB死锁并不一定是一个问题,因为InnoDB会立即检测到该条件并自动回滚其中一个事务。你可能使用该选项来调试为什么死锁会发生,如果应用程序没有适当的错误处理逻辑来检测回滚并重试其操作。大量死锁可能表明需要重新结构化事务,以便每个事务访问表的顺序相同,从而避免死锁条件。有关相关信息,请参阅 第 17.7.5 节,“InnoDB 中的死锁”。
-
Command-Line Format --innodb-print-ddl-logs[={OFF|ON}]System Variable innodb_print_ddl_logsScope 全局 Dynamic 是 SET_VARHint Applies否 Type 布尔值 Default Value OFF启用该选项时,MySQL 将 DDL 日志写入
stderr。有关更多信息,请参阅 查看 DDL 日志。 -
Command-Line Format --innodb-清除批量大小=#System Variable innodb_清除批量大小Scope 全局 Dynamic 是 SET_VARHint Applies否 Type 整数 Default Value 300Minimum Value 1Maximum Value 5000定义从历史列表中解析和处理的undo日志页数。在多线程清除配置中,协调器清除线程将
innodb_清除批量大小除以innodb_清除线程数,并将该数字分配给每个清除线程。innodb_清除批量大小变量还定义了清除线程在每128次迭代undo日志后释放的undo日志页数。该
innodb_清除批量大小选项旨在与innodb_清除线程数设置一起进行高级性能调整。大多数用户无需更改innodb_清除批量大小的默认值。有关信息,请参阅第17.8.9节,“清除配置”。
-
Command-Line Format --innodb-清除线程数=#System Variable innodb_清除线程数Scope 全局 Dynamic 否 SET_VARHint Applies否 Type 整数 Default Value 4Minimum Value 1Maximum Value 32背景线程数用于清除操作。增加该值将创建更多的清除线程,从而可以在多个表上执行DML操作的系统上提高效率。
有关信息,请参阅第17.8.9节,“清除配置”。
-
Command-Line Format --innodb-回滚段截断频率=#System Variable innodb_回滚段截断频率Scope 全局 Dynamic 是 SET_VARHint Applies否 Type 整数 Default Value 128Minimum Value 1Maximum Value 128定义清除系统释放回滚段的频率,以清除调用次数为单位。undo表空间不能截断,直到其回滚段被释放。通常,清除系统每128次调用释放回滚段。默认值为128。减少该值将增加清除线程释放回滚段的频率。
innodb_回滚段截断频率旨在与innodb_undo_log_truncate一起使用。有关信息,请参阅截断Undo表空间。 -
Command-Line Format --innodb-随机读取预读[={OFF|ON}]System Variable innodb_随机读取预读Scope 全局 Dynamic 是 SET_VARHint Applies否 Type 布尔值 Default Value OFF启用随机 预读 技术,以优化
InnoDBI/O。有关不同类型的预读请求性能考虑的详细信息,请参阅 第 17.8.3.4 节,“配置 InnoDB 缓冲池预读(预读)”。对于一般的 I/O 调优建议,请参阅 第 10.5.8 节,“优化 InnoDB 磁盘 I/O”。
-
Command-Line Format --innodb-read-ahead-threshold=#System Variable innodb_read_ahead_thresholdScope 全局 Dynamic 是 SET_VARHint Applies否 Type 整数 Default Value 56Minimum Value 0Maximum Value 64控制
InnoDB使用的线性 预读 来预取页面到 缓冲池 中。如果InnoDB顺序读取至少innodb_read_ahead_threshold页从一个 范围 中,它将异步读取整个后续范围。允许的值范围是 0 到 64。值为 0 将禁用预读。对于默认值 56,InnoDB必须从一个范围中顺序读取至少 56 页,以便启动异步读取下一个范围。了解通过预读机制读取的页面数量,以及这些页面从缓冲池中被驱逐而从不被访问的数量,可以在微调
innodb_read_ahead_threshold设置时非常有用。SHOW ENGINE INNODB STATUS输出显示来自Innodb_buffer_pool_read_ahead和Innodb_buffer_pool_read_ahead_evicted全局状态变量的计数器信息,这些变量报告了通过预读请求带入缓冲池的页面数量,以及这些页面从缓冲池中被驱逐而从不被访问的数量。状态变量报告自上次服务器重启以来的全局值。SHOW ENGINE INNODB STATUS还显示了预读页面的读取速率和这些页面被驱逐而从不被访问的速率。每秒平均值基于自上次SHOW ENGINE INNODB STATUS调用以来的统计信息,并在SHOW ENGINE INNODB STATUS输出的BUFFER POOL AND MEMORY部分中显示。有关更多信息,请参阅 第 17.8.3.4 节,“配置 InnoDB 缓冲池预读(预读)”。对于一般的 I/O 调优建议,请参阅 第 10.5.8 节,“优化 InnoDB 磁盘 I/O”。
-
Command-Line Format --innodb-read-io-threads=#System Variable innodb_read_io_threadsScope 全局 Dynamic 否 SET_VARHint Applies否 Type 整数 Default Value (可用逻辑处理器 / 2),最小为 4Default Value (8.3.0) 4Minimum Value 1Maximum Value 64读取操作中的I/O线程数目在
InnoDB中。其写入线程的对应项是innodb_write_io_threads。更多信息,请参阅 第 17.8.5 节,“配置背景InnoDB I/O线程”。一般 I/O 调优建议,请参阅 第 10.5.8 节,“优化InnoDB磁盘I/O”。Note在 Linux 系统上,运行多个 MySQL 服务器(通常超过 12 个)时,默认设置为
innodb_read_io_threads、innodb_write_io_threads和 Linuxaio-max-nr设置可能超过系统限制。理想情况下,增加aio-max-nr设置;作为 workaround,可以减少 MySQL 变量之一或两者的设置。 -
Command-Line Format --innodb-read-only[={OFF|ON}]System Variable innodb_read_onlyScope 全局 Dynamic 否 SET_VARHint Applies否 Type 布尔值 Default Value OFF在只读模式下启动
InnoDB。用于分布式数据库应用程序或只读媒体上的数据集。也可以在数据仓库中用于共享同一个数据目录之间的多个实例。更多信息,请参阅 第 17.8.2 节,“配置InnoDB为只读操作”。以前,启用
innodb_read_only系统变量仅阻止创建和删除表格操作仅适用于InnoDB存储引擎。从 MySQL 8.3 开始,启用innodb_read_only阻止了所有存储引擎的这些操作。表创建和删除操作对于任何存储引擎都修改数据字典表在mysql系统数据库中,但这些表使用InnoDB存储引擎且无法在innodb_read_only启用时修改。同样的原则也适用于其他表操作,需要修改数据字典表。例如:-
如果
innodb_read_only系统变量启用,ANALYZE TABLE可能失败,因为它无法更新数据字典表中的统计信息,使用InnoDB。对于ANALYZE TABLE操作更新键分布,可能会失败,即使操作更新表本身(例如,如果它是一个MyISAM表)。要获取更新的分布统计信息,请设置information_schema_stats_expiry=0。 -
ALTER TABLE失败,因为它更新存储引擎的指定,存储在数据字典中。tbl_nameENGINE=engine_name
此外,
mysql系统数据库中的其他表也使用InnoDB存储引擎在 MySQL 8.3 中。使这些表只读将限制修改它们的操作。例如:-
帐户管理语句,如
CREATE USER和GRANT失败,因为授权表使用InnoDB。 -
插件管理语句
INSTALL PLUGIN和UNINSTALL PLUGIN失败,因为mysql.plugin系统表使用InnoDB。 -
该
CREATE FUNCTION和DROP FUNCTION可加载函数管理语句失败,因为mysql.func系统表使用InnoDB。
-
-
Command-Line Format --innodb-redo-log-archive-dirsSystem Variable innodb_redo_log_archive_dirsScope 全局 Dynamic 是 SET_VARHint Applies否 Type 字符串 Default Value NULL定义 redo 日志存档文件可以创建的标记目录。您可以在分号分隔的列表中定义多个标记目录。例如:
innodb_redo_log_archive_dirs='label1:/backups1;label2:/backups2'标签可以是任何字符串,除了冒号 (:),它们是不允许的。空标签也是允许的,但冒号 (:) 仍然需要在这种情况下。
必须指定路径,并且目录必须存在。路径可以包含冒号 (':'),但分号 (;) 不是允许的。
-
Command-Line Format --innodb-redo-log-capacity=#System Variable innodb_redo_log_capacityScope 全局 Dynamic 是 SET_VARHint Applies否 Type 整数 Default Value 104857600Minimum Value 8388608Maximum Value 549755813888Unit 字节 定义 redo 日志文件所占用的磁盘空间。
该变量取代了
innodb_log_files_in_group和innodb_log_file_size变量。当innodb_redo_log_capacity设置被定义时,innodb_log_files_in_group和innodb_log_file_size设置将被忽略;否则,这些设置将用于计算innodb_redo_log_capacity设置 (innodb_log_files_in_group*innodb_log_file_size=innodb_redo_log_capacity)。如果没有设置这些变量,redo 日志容量将设置为innodb_redo_log_capacity的默认值。有关更多信息,请参阅 第 17.6.5 节,“Redo Log”。
-
Command-Line Format --innodb-redo-log-encrypt[={OFF|ON}]System Variable innodb_redo_log_encryptScope 全局 Dynamic 是 SET_VARHint Applies否 Type 布尔值 Default Value OFF控制使用
InnoDB数据静态加密功能 加密的表的 redo 日志数据加密。redo 日志数据加密默认情况下是禁用的。有关更多信息,请参阅 Redo Log 加密。 -
Command-Line Format --innodb-replication-delay=#System Variable innodb_replication_delayScope 全局 Dynamic 是 SET_VARHint Applies否 Type 整数 Default Value 0Minimum Value 0Maximum Value 4294967295Unit 毫秒 在副本服务器上,如果
innodb_thread_concurrency达到,则复制线程延迟的毫秒数。 -
Command-Line Format --innodb-rollback-on-timeout[={OFF|ON}]System Variable innodb_rollback_on_timeoutScope 全局 Dynamic 否 SET_VARHint Applies否 Type 布尔值 Default Value OFFInnoDB仅在事务超时时回滚最后一条语句。 如果指定了--innodb-rollback-on-timeout,事务超时将导致InnoDB中止并回滚整个事务。有关更多信息,请参阅 第 17.20.5 节,“InnoDB 错误处理”。
-
Command-Line Format --innodb-rollback-segments=#System Variable innodb_rollback_segmentsScope 全局 Dynamic 是 SET_VARHint Applies否 Type 整数 Default Value 128Minimum Value 1Maximum Value 128innodb_rollback_segments定义了每个撤销表空间和全局临时表空间中分配给事务的撤销段的数量。每个撤销段支持的交易数量取决于InnoDB页大小和每个事务分配的撤销日志数量。有关更多信息,请参阅 第 17.6.6 节,“撤销日志”。有关相关信息,请参阅 第 17.3 节,“InnoDB 多版本控制”。有关撤销表空间的信息,请参阅 第 17.6.3.4 节,“撤销表空间”。
-
innodb_saved_page_number_debugCommand-Line Format --innodb-saved-page-number-debug=#System Variable innodb_saved_page_number_debugScope 全局 Dynamic 是 SET_VARHint Applies否 Type 整数 Default Value 0Minimum Value 0Maximum Value 2**32-1保存一页号。设置
innodb_fil_make_page_dirty_debug选项会将innodb_saved_page_number_debug定义的页号设置为脏页。innodb_saved_page_number_debug选项仅在使用WITH_DEBUGCMake 选项编译调试支持时可用。 -
Command-Line Format --innodb-segment-reserve-factor=#System Variable innodb_segment_reserve_factorScope 全局 Dynamic 是 SET_VARHint Applies否 Type 数字 Default Value 12.5Minimum Value 0.03Maximum Value 40定义表空间文件段页面保留为空白页的百分比。该设置适用于每个表空间和通用表空间。
innodb_segment_reserve_factor的默认设置为 12.5%,与之前的 MySQL 版本相同。有关更多信息,请参阅 配置保留文件段页面的百分比。
-
Command-Line Format --innodb-sort-buffer-size=#System Variable innodb_sort_buffer_sizeScope 全局 Dynamic 否 SET_VARHint Applies否 Type 整数 Default Value 1048576Minimum Value 65536Maximum Value 67108864Unit 字节 该变量定义了在在线 DDL 操作期间记录并发 DML 时临时日志文件的扩展量,以及临时日志文件读取缓冲区和写入缓冲区的大小。
有关更多信息,请参阅 第 17.12.3 节,“在线 DDL 空间要求”。
-
Command-Line Format --innodb-spin-wait-delay=#System Variable innodb_spin_wait_delayScope 全局 Dynamic 是 SET_VARHint Applies否 Type 整数 Default Value 6Minimum Value 0Maximum Value 1000自旋锁的最大延迟时间。该机制的低级实现取决于硬件和操作系统的组合,因此延迟时间不对应于固定的时间间隔。
可以与
innodb_spin_wait_pause_multiplier变量结合使用,以获得对自旋锁轮询延迟的更大控制。有关更多信息,请参阅 第 17.8.8 节,“配置自旋锁轮询”。
-
innodb_spin_wait_pause_multiplierCommand-Line Format --innodb-spin-wait-pause-multiplier=#System Variable innodb_spin_wait_pause_multiplierScope 全局 Dynamic 是 SET_VARHint Applies否 Type 整数 Default Value 50Minimum Value 0Maximum Value 100定义了自旋锁轮询中 PAUSE 指令的数量,该指令在等待获取互斥锁或读写锁时出现。
有关更多信息,请参阅 第 17.8.8 节,“配置自旋锁轮询”。
-
Command-Line Format --innodb-stats-auto-recalc[={OFF|ON}]System Variable innodb_stats_auto_recalcScope 全局 Dynamic 是 SET_VARHint Applies否 Type 布尔值 Default Value ON使 InnoDB 在表数据发生重大变化后自动重新计算 持久统计信息。阈值为表中的 10% 行数。该设置适用于在
innodb_stats_persistent选项启用时创建的表。自动统计信息重新计算也可以通过在CREATE TABLE或ALTER TABLE语句中指定STATS_PERSISTENT=1来配置。用于生成统计信息的数据样本量由innodb_stats_persistent_sample_pages变量控制。有关更多信息,请参阅 第 17.8.10.1 节,“配置持久优化器统计参数”。
-
innodb_stats_include_delete_markedCommand-Line Format --innodb-stats-include-delete-marked[={OFF|ON}]System Variable innodb_stats_include_delete_markedScope 全局 Dynamic 是 SET_VARHint Applies否 Type 布尔值 Default Value OFF默认情况下,
InnoDB在计算统计信息时读取未提交的数据。在未提交的事务中删除表中的行时,InnoDB排除删除标记的记录,从而计算行估算和索引统计信息,这可能会导致其他事务在并发操作表时使用非最优执行计划,除非事务隔离级别为READ UNCOMMITTED。为了避免这种情况,innodb_stats_include_delete_marked可以启用,以确保InnoDB在计算持久优化器统计信息时包括删除标记的记录。当
innodb_stats_include_delete_marked启用时,ANALYZE TABLE在重新计算统计信息时考虑删除标记的记录。innodb_stats_include_delete_marked是一个全局设置,影响所有InnoDB表。它仅适用于持久优化器统计信息。有关信息,请参阅 第 17.8.10.1 节,“配置持久优化器统计信息参数”。
-
Command-Line Format --innodb-stats-method=valueSystem Variable innodb_stats_methodScope 全局 Dynamic 是 SET_VARHint Applies否 Type 枚举 Default Value nulls_equalValid Values nulls_equalnulls_unequalnulls_ignored服务器在收集
InnoDB表索引值分布统计信息时如何对待NULL值。允许的值是nulls_equal、nulls_unequal和nulls_ignored。对于nulls_equal,所有NULL索引值被认为是相等的,并形成一个大小等于NULL值数量的值组。对于nulls_unequal,NULL值被认为是不相等的,每个NULL形成一个大小为 1 的值组。对于nulls_ignored,NULL值被忽略。用于生成表统计信息的方法会影响优化器如何选择索引以执行查询,如 第 10.3.8 节,“InnoDB 和 MyISAM 索引统计信息收集” 中所述。
-
Command-Line Format --innodb-stats-on-metadata[={OFF|ON}]System Variable innodb_stats_on_metadataScope 全局 Dynamic 是 SET_VARHint Applies否 Type 布尔值 Default Value OFF该选项仅适用于优化器统计信息未持久化的情况。优化器统计信息不会持久化到磁盘时
innodb_stats_persistent禁用或单个表创建或修改时使用STATS_PERSISTENT=0。有关信息,请参阅 第 17.8.10.2 节,“配置非持久优化器统计信息参数”。当
innodb_stats_on_metadata启用时,InnoDB在元数据语句(如SHOW TABLE STATUS)或访问信息模式TABLES或STATISTICS表时更新非持久统计信息。(这些更新类似于ANALYZE TABLE的操作。)当禁用时,InnoDB不会在这些操作中更新统计信息。禁用该设置可以提高具有大量表或索引的模式的访问速度,也可以提高 查询执行计划 的稳定性。要更改设置,请发出语句
SET GLOBAL innodb_stats_on_metadata=,其中mode是modeON或OFF(或1或0)。更改设置需要足够的权限来设置全局系统变量(见 第 7.1.9.1 节,“系统变量权限”),并立即影响所有连接的操作。 -
Command-Line Format --innodb-stats-persistent[={OFF|ON}]System Variable innodb_stats_persistentScope 全局 Dynamic 是 SET_VARHint Applies否 Type 布尔值 Default Value ON指定
InnoDB索引统计信息是否持久化到磁盘。否则,统计信息可能会频繁地重新计算,从而导致 查询执行计划 的变化。该设置将与每个表一起存储在创建表时。你可以在全局级别设置innodb_stats_persistent,然后使用STATS_PERSISTENT子句在CREATE TABLE和ALTER TABLE语句中覆盖系统范围的设置,以便为单个表配置持久统计信息。有关更多信息,请参阅 第 17.8.10.1 节,“配置持久优化器统计参数”。
-
innodb_stats_persistent_sample_pagesCommand-Line Format --innodb-stats-persistent-sample-pages=#System Variable innodb_stats_persistent_sample_pagesScope 全局 Dynamic 是 SET_VARHint Applies否 Type 整数 Default Value 20Minimum Value 1Maximum Value 18446744073709551615采样索引页的数量,以估算基数和其他统计信息,例如
ANALYZE TABLE计算的统计信息。增加该值可以提高索引统计信息的准确性,从而改进查询执行计划,但是在执行ANALYZE TABLE时会增加I/O操作。更多信息,请参见第17.8.10.1节,“配置持久优化器统计参数”。Note将
innodb_stats_persistent_sample_pages设置为高值可能会导致ANALYZE TABLE执行时间延长。要估算ANALYZE TABLE访问的数据库页数,请参见第17.8.10.3节,“估算InnoDB表的ANALYZE TABLE复杂度”。innodb_stats_persistent_sample_pages仅在innodb_stats_persistent为表启用时生效;当innodb_stats_persistent禁用时,innodb_stats_transient_sample_pages生效。 -
innodb_stats_transient_sample_pagesCommand-Line Format --innodb-stats-transient-sample-pages=#System Variable innodb_stats_transient_sample_pagesScope 全局 Dynamic 是 SET_VARHint Applies否 Type 整数 Default Value 8Minimum Value 1Maximum Value 18446744073709551615采样索引页的数量,以估算基数和其他统计信息,例如
ANALYZE TABLE计算的统计信息。默认值为8。增加该值可以提高索引统计信息的准确性,从而改进查询执行计划,但是在打开InnoDB表或重新计算统计信息时会增加I/O操作。更多信息,请参见第17.8.10.2节,“配置非持久优化器统计参数”。Note将
innodb_stats_transient_sample_pages设置为高值可能会导致ANALYZE TABLE执行时间延长。要估算ANALYZE TABLE访问的数据库页数,请参见第17.8.10.3节,“估算InnoDB表的ANALYZE TABLE复杂度”。innodb_stats_transient_sample_pages只适用于表的innodb_stats_persistent禁用时;当innodb_stats_persistent启用时,innodb_stats_persistent_sample_pages生效。取代innodb_stats_sample_pages。更多信息,请参阅 第 17.8.10.2 节,“配置非持久优化器统计参数”。 -
Command-Line Format --innodb-status-output[={OFF|ON}]System Variable innodb_status_outputScope 全局 Dynamic 是 SET_VARHint Applies否 Type 布尔值 Default Value OFF启用或禁用标准
InnoDB监控器的周期性输出。也用于与innodb_status_output_locks结合启用或禁用InnoDB锁监控器的周期性输出。更多信息,请参阅 第 17.17.2 节,“启用 InnoDB 监控器”。 -
Command-Line Format --innodb-status-output-locks[={OFF|ON}]System Variable innodb_status_output_locksScope 全局 Dynamic 是 SET_VARHint Applies否 Type 布尔值 Default Value OFF启用或禁用
InnoDB锁监控器。当启用时,InnoDB锁监控器将在SHOW ENGINE INNODB STATUS输出和 MySQL 错误日志中打印附加锁信息。周期性输出为InnoDB锁监控器是标准InnoDB监控器的一部分输出。因此,标准InnoDB监控器必须启用,以便InnoDB锁监控器周期性地将数据打印到 MySQL 错误日志中。更多信息,请参阅 第 17.17.2 节,“启用 InnoDB 监控器”。 -
Command-Line Format --innodb-strict-mode[={OFF|ON}]System Variable innodb_strict_modeScope 全局、会话 Dynamic 是 SET_VARHint Applies否 Type 布尔值 Default Value ON当
innodb_strict_mode启用时,InnoDB将返回错误,而不是警告,当检查无效或不兼容的表选项时。它检查
KEY_BLOCK_SIZE、ROW_FORMAT、DATA DIRECTORY、TEMPORARY和TABLESPACE选项是否与其他设置兼容。innodb_strict_mode=ON也启用了创建或更改表时的行大小检查,以防止INSERT或UPDATE由于记录太大而失败。您可以在启动
mysqld时在命令行上启用或禁用innodb_strict_mode,或在 MySQL 配置文件 中启用或禁用。您也可以在运行时使用语句SET [GLOBAL|SESSION] innodb_strict_mode=启用或禁用modeinnodb_strict_mode,其中是modeON或OFF。更改GLOBAL设置需要足够的权限来设置全局系统变量(见 第 7.1.9.1 节,“系统变量权限”),并影响所有后续连接的客户端。任何客户端都可以更改SESSION设置的innodb_strict_mode,该设置仅影响该客户端。设置该系统变量的会话值是一个受限操作。会话用户必须具有足够的权限来设置受限会话变量。见 第 7.1.9.1 节,“系统变量权限”。
-
Command-Line Format --innodb-sync-array-size=#System Variable innodb_sync_array_sizeScope 全局 Dynamic 否 SET_VARHint Applies否 Type 整数 Default Value 1Minimum Value 1Maximum Value 1024定义 mutex/锁等待数组的大小。增加该值将分割内部数据结构,以便在大量等待线程的工作负载中提高并发性。该设置必须在 MySQL 实例启动时配置,不能在以后更改。对于频繁产生大量等待线程的工作负载(通常大于 768),建议增加该值。
-
Command-Line Format --innodb-sync-spin-loops=#System Variable innodb_sync_spin_loopsScope 全局 Dynamic 是 SET_VARHint Applies否 Type 整数 Default Value 30Minimum Value 0Maximum Value 4294967295线程等待
InnoDB互斥锁释放之前的等待次数。 -
Command-Line Format --innodb-sync-debug[={OFF|ON}]System Variable innodb_sync_debugScope 全局 Dynamic 否 SET_VARHint Applies否 Type 布尔值 Default Value OFF启用
InnoDB存储引擎的同步调试检查。该选项仅在使用WITH_DEBUGCMake 选项编译调试支持时可用。 -
Command-Line Format --innodb-table-locks[={OFF|ON}]System Variable innodb_table_locksScope 全局、会话 Dynamic 是 SET_VARHint Applies否 Type 布尔值 Default Value ON如果
autocommit = 0,InnoDB将遵守LOCK TABLES;MySQL 不会从LOCK TABLES ... WRITE返回,直到所有其他线程释放了它们对表的所有锁。默认值innodb_table_locks是 1,这意味着LOCK TABLES将导致 InnoDB 在autocommit = 0时内部锁定表。innodb_table_locks = 0对于使用LOCK TABLES ... WRITE显式锁定的表没有影响。它对通过触发器或LOCK TABLES ... WRITE或LOCK TABLES ... READ隐式锁定的表有影响。有关信息,请参阅 第 17.7 节,“InnoDB 锁定和事务模型”。
-
Command-Line Format --innodb-temp-data-file-path=file_nameSystem Variable innodb_temp_data_file_pathScope 全局 Dynamic 否 SET_VARHint Applies否 Type 字符串 Default Value ibtmp1:12M:autoextend定义全局临时表空间数据文件的相对路径、名称、大小和属性。全局临时表空间存储用户创建的临时表的回滚段。
如果未指定
innodb_temp_data_file_path的值,默认行为是创建一个名为ibtmp1的自动扩展数据文件在innodb_data_home_dir目录中。初始文件大小略大于 12MB。全局临时表空间数据文件规范包括文件名、文件大小和
autoextend和max属性:file_name:file_size[:autoextend[:max:max_file_size]]全局临时表空间数据文件不能与其他
InnoDB数据文件同名。任何无法或错误创建全局临时表空间数据文件都将被视为致命错误,服务器启动将被拒绝。文件大小以 KB、MB 或 GB 为单位,通过追加
K、M或G到大小值。文件大小总和必须略大于 12MB。单个文件的大小限制由操作系统确定。文件大小可以在支持大文件的操作系统上超过 4GB。不支持使用原始磁盘分区作为全局临时表空间数据文件。
可以仅对
innodb_temp_data_file_path设置中指定的最后一个数据文件使用autoextend和max属性。例如:[mysqld] innodb_temp_data_file_path=ibtmp1:50M;ibtmp2:12M:autoextend:max:500M使用
autoextend选项可以使数据文件在用完免费空间时自动增加大小。默认增量为 64MB。要修改增量,请更改innodb_autoextend_increment变量设置。全局临时表空间数据文件的目录路径是通过连接
innodb_data_home_dir和innodb_temp_data_file_path路径形成的。在运行
InnoDB只读模式之前,设置innodb_temp_data_file_path到数据目录之外的位置。路径必须相对于数据目录。例如:--innodb-temp-data-file-path=../../../tmp/ibtmp1:12M:autoextend有关更多信息,请参阅 全局临时表空间。
-
Command-Line Format --innodb-temp-tablespaces-dir=dir_nameSystem Variable InnoDB临时表空间目录Scope 全局 Dynamic 否 SET_VARHint Applies否 Type 目录名称 Default Value #innodb_temp定义InnoDB在启动时创建会话临时表空间池的位置。默认位置是数据目录中的
#innodb_temp目录。允许使用绝对路径或相对于数据目录的路径。会话临时表空间总是存储用户创建的临时表和优化器使用InnoDB创建的内部临时表。(以前,内部临时表的磁盘存储引擎由
internal_tmp_disk_storage_engine系统变量确定,该变量不再支持。请参阅磁盘内部临时表的存储引擎。)有关更多信息,请参阅会话临时表空间。
-
Command-Line Format --innodb-thread-concurrency=#System Variable InnoDB线程并发度Scope 全局 Dynamic 是 SET_VARHint Applies否 Type 整数 Default Value 0Minimum Value 0Maximum Value 1000定义InnoDB中的最大线程数。值为0(默认)表示无限并发度(无限制)。该变量旨在高并发系统上的性能调整。
InnoDB尝试将InnoDB中的线程数保持在
InnoDB线程并发度限制以下。等待锁定的线程不计入并发执行线程的数量。正确的设置取决于工作负载和计算环境。考虑设置该变量,如果您的MySQL实例与其他应用程序共享CPU资源,或者您的工作负载或并发用户数量正在增长。测试不同的值以确定提供最佳性能的设置。
InnoDB线程并发度是一个动态变量,允许在实时测试系统上实验不同的设置。如果某个设置性能不佳,可以快速将InnoDB线程并发度设置回0。使用以下指南来帮助找到和维护适当的设置:
-
如果并发用户线程数始终很小且不影响性能,请设置
InnoDB线程并发度=0(无限制)。 -
如果您的工作负载始终很重或偶尔激增,请设置
InnoDB线程并发度值,并调整它直到找到提供最佳性能的线程数。例如,假设您的系统通常有40到50个用户,但偶尔增加到60、70或更多。通过测试,您发现性能基本保持稳定,直到并发用户数达到80。 在这种情况下,设置InnoDB线程并发度为80。 -
如果您不想让InnoDB使用超过一定数量的虚拟CPU(例如20个虚拟CPU),请设置
InnoDB线程并发度为该数字(或可能较低,取决于性能测试)。如果您的目标是将MySQL与其他应用程序隔离,考虑将mysqld进程绑定到虚拟CPU上。但是,请注意,独占绑定可能会导致硬件使用不优化,如果mysqld进程不总是繁忙。在这种情况下,您可以将mysqld进程绑定到虚拟CPU上,但允许其他应用程序使用一些或所有虚拟CPU。Note从操作系统的角度来看,使用资源管理解决方案来管理 CPU 时间在应用程序之间的共享可能比绑定
mysqld进程更可取。例如,您可以将 90% 的虚拟 CPU 时间分配给某个应用程序,而其他关键进程 不 运行,并在其他关键进程 运行 时将该值缩减到 40%。 -
在某些情况下,最佳的
innodb_thread_concurrency设置可能小于虚拟 CPU 的数量。 -
如果
innodb_thread_concurrency的值太高,可能会导致性能回退,因为系统内部和资源的争用增加。 -
定期监控和分析您的系统。工作负载、用户数量或计算环境的变化可能需要调整
innodb_thread_concurrency设置。
值为 0 将禁用
InnoDB 中的查询和队列中的查询计数器在SHOW ENGINE INNODB STATUS输出的ROW OPERATIONS部分。有关信息,请参阅 第 17.8.4 节,“配置 InnoDB 的线程并发”。
-
-
Command-Line Format --innodb-thread-sleep-delay=#System Variable innodb_thread_sleep_delayScope 全局 Dynamic 是 SET_VARHint Applies否 Type 整数 Default Value 10000Minimum Value 0Maximum Value 1000000Unit 微秒 InnoDB 线程在加入 InnoDB 队列之前休眠的时间,以微秒为单位。默认值为 10000。值为 0 将禁用休眠。你可以将
innodb_adaptive_max_sleep_delay设置为允许的最高值,然后 InnoDB 将自动调整innodb_thread_sleep_delay的值,以适应当前线程调度活动。有关信息,请参阅 第 17.8.4 节,“配置 InnoDB 的线程并发”。
-
Command-Line Format --innodb-tmpdir=dir_nameSystem Variable innodb_tmpdirScope 全局、会话 Dynamic 是 SET_VARHint Applies否 Type 目录名称 Default Value NULL用于定义在线
ALTER TABLE操作重新构建表时的临时排序文件的备用目录。在线
ALTER TABLE操作重新构建表时也会在同一个目录下创建一个 中间 表文件。innodb_tmpdir选项不适用于中间表文件。有效的值是任何目录路径,而不是 MySQL 数据目录路径。如果值为 NULL(默认),则临时文件将创建在 MySQL 临时目录中(
$TMPDIR在 Unix 中,%TEMP%在 Windows 中,或者通过--tmpdir配置选项指定的目录)。如果指定了目录,existence of the directory 和权限只有在innodb_tmpdir使用SET语句配置时才会被检查。如果提供了符号链接目录字符串,符号链接将被解析并存储为绝对路径。路径不得超过 512 字节。在线ALTER TABLE操作将报告错误,如果innodb_tmpdir设置为无效目录。innodb_tmpdir覆盖了 MySQLtmpdir设置,但仅适用于在线ALTER TABLE操作。需要
FILE权限来配置innodb_tmpdir。引入
innodb_tmpdir选项是为了避免在tmpfs文件系统上临时文件目录溢出。这种溢出可能是由于在线ALTER TABLE操作中创建的大型临时排序文件所致。在复制环境中,只有在所有服务器具有相同的操作系统环境时,才考虑复制
innodb_tmpdir设置。否则,复制innodb_tmpdir设置可能会导致在线ALTER TABLE操作失败。如果服务器操作环境不同,建议在每个服务器上单独配置innodb_tmpdir。有关更多信息,请参阅 第 17.12.3 节,“在线 DDL 空间要求”。有关在线
ALTER TABLE操作的信息,请参阅 第 17.12 节,“InnoDB 和在线 DDL”。 -
innodb_trx_purge_view_update_only_debugCommand-Line Format --innodb-trx-purge-view-update-only-debug[={OFF|ON}]System Variable innodb_trx_purge_view_update_only_debugScope Global Dynamic Yes SET_VARHint AppliesNo Type Boolean Default Value OFF暂停删除标记记录的清除,同时允许清除视图被更新。这选项人工创建了一种情况,在这种情况下,清除视图被更新,但清除操作尚未执行。这选项仅在使用
WITH_DEBUGCMake 选项编译调试支持时可用。 -
Command-Line Format --innodb-trx-rseg-n-slots-debug=#System Variable innodb_trx_rseg_n_slots_debugScope Global Dynamic Yes SET_VARHint AppliesNo Type Integer Default Value 0Minimum Value 0Maximum Value 1024设置一个调试标志,限制
TRX_RSEG_N_SLOTS到给定的值,以便在trx_rsegf_undo_find_free函数中查找undo日志段的空闲槽位。该选项仅在使用WITH_DEBUGCMake 选项编译调试支持时可用。 -
Command-Line Format --innodb-undo-directory=dir_nameSystem Variable innodb_undo_directoryScope 全局 Dynamic 否 SET_VARHint Applies否 Type 目录名称 InnoDB 创建undo表空间的路径。通常用于将undo表空间放在不同的存储设备上。
没有默认值(为 NULL)。如果
innodb_undo_directory变量未定义,undo表空间将在数据目录中创建。默认的undo表空间(
innodb_undo_001和innodb_undo_002)在 MySQL 实例初始化时创建,总是驻留在innodb_undo_directory变量定义的目录中。使用
CREATE UNDO TABLESPACE语法创建的undo表空间将在innodb_undo_directory变量定义的目录中创建,除非指定了不同的路径。有关更多信息,请参阅 第 17.6.3.4 节,“Undo 表空间”。
-
Command-Line Format --innodb-undo-log-encrypt[={OFF|ON}]System Variable innodb_undo_log_encryptScope 全局 Dynamic 是 SET_VARHint Applies否 Type 布尔值 Default Value OFF控制使用 InnoDB 数据静态加密功能加密undo日志数据的undo表空间。仅适用于驻留在单独的undo表空间中的undo日志。请参阅 第 17.6.3.4 节,“Undo 表空间”。系统表空间中的undo日志数据不支持加密。有关更多信息,请参阅 Undo 日志加密。
-
Command-Line Format --innodb-undo-log-truncate[={OFF|ON}]System Variable innodb_undo_log_truncateScope 全局 Dynamic 是 SET_VARHint Applies否 Type 布尔值 Default Value ON启用时,超过阈值的undo表空间将被标记为截断。仅适用于undo表空间。系统表空间中的undo日志不支持截断。截断undo日志需要至少两个undo表空间。
可以使用
innodb_purge_rseg_truncate_frequency变量来加速undo表空间的截断。有关更多信息,请参阅 截断 Undo 表空间。
-
Command-Line Format --innodb-undo-tablespaces=#Deprecated 是 System Variable innodb_undo_tablespacesScope 全局 Dynamic 是 SET_VARHint Applies否 Type 整数 Default Value 2Minimum Value 2Maximum Value 127定义了 撤销表空间 的数量,用于
InnoDB。默认值和最小值为 2。Note变量
innodb_undo_tablespaces已弃用;在 MySQL 8.3 中设置它没有效果。您应该在未来 MySQL 版本中删除它。有关更多信息,请参阅 第 17.6.3.4 节,“撤销表空间”。
-
Command-Line Format --innodb-use-fdatasync[={OFF|ON}]System Variable innodb_use_fdatasyncScope 全局 Dynamic 是 SET_VARHint Applies否 Type 布尔值 Default Value OFF在支持
fdatasync()系统调用的平台上,启用变量innodb_use_fdatasync允许使用fdatasync()而不是fsync()系统调用来执行操作系统刷新。fdatasync()调用不会刷新文件元数据的更改,除非需要在后续数据检索中,提供潜在的性能优势。某些
innodb_flush_method设置,例如fsync、O_DSYNC和O_DIRECT,使用fsync()系统调用。变量innodb_use_fdatasync在使用这些设置时适用。 -
Command-Line Format --innodb-use-native-aio[={OFF|ON}]System Variable innodb_use_native_aioScope 全局 Dynamic 否 SET_VARHint Applies否 Type 布尔值 Default Value ON指定是否使用 Linux 异步 I/O 子系统。此变量仅适用于 Linux 系统,且无法在服务器运行时更改。通常,您不需要配置此选项,因为它默认启用。
InnoDB在 Windows 系统上的异步 I/O 能力现在也适用于 Linux 系统。(其他 Unix-like 系统继续使用同步 I/O 调用。)此功能提高了 I/O 密集型系统的可扩展性,通常显示许多挂起的读取/写入操作在SHOW ENGINE INNODB STATUS\G输出中。在 Linux 系统上运行大量
InnoDBI/O 线程,特别是在同一服务器机器上运行多个实例时,可能会超过容量限制。在这种情况下,您可能会收到以下错误:EAGAIN: The specified maxevents exceeds the user's limit of available events.您可以通过将更高的限制写入
/proc/sys/fs/aio-max-nr来解决此错误。但是,如果操作系统的异步 I/O 子系统的问题阻止
InnoDB启动,您可以使用innodb_use_native_aio=0启动服务器。此选项也可能在启动时自动禁用,如果InnoDB检测到潜在的问题,例如tmpdir位置、tmpfs文件系统和 Linux 内核不支持tmpfs上的 AIO。有关更多信息,请参阅 第 17.8.6 节,“在 Linux 上使用异步 I/O”。
-
innodb_validate_tablespace_pathsCommand-Line Format --innodb-validate-tablespace-paths[={OFF|ON}]System Variable innodb_validate_tablespace_pathsScope 全局 Dynamic 否 SET_VARHint Applies否 Type 布尔值 Default Value ON表空间文件路径验证控制。在启动时,
InnoDB验证已知表空间文件的路径与数据字典中存储的表空间文件路径,以防止表空间文件被移到不同的位置。innodb_validate_tablespace_paths变量允许禁用表空间路径验证。这项功能旨在于环境中表空间文件不被移动的情况下。禁用路径验证可以提高启动时间,在具有大量表空间文件的系统上。Warning在禁用表空间路径验证的情况下启动服务器,可能会导致未定义的行为。
有关更多信息,请参阅 第 17.6.3.7 节,“禁用表空间路径验证”。
-
InnoDB 版本号。在 MySQL 8.3 中,不再单独编号 InnoDB,且该值与服务器的
version号相同。 -
Command-Line Format --innodb-write-io-threads=#System Variable innodb_write_io_threadsScope 全局 Dynamic 否 SET_VARHint Applies否 Type 整数 Default Value 4Minimum Value 1Maximum Value 64InnoDB 中写操作的 I/O 线程数。默认值为 4。其读取线程对应的是
innodb_read_io_threads。有关更多信息,请参阅 第 17.8.5 节,“配置背景 InnoDB I/O 线程数”。一般 I/O 调优建议,请参阅 第 10.5.8 节,“优化 InnoDB 磁盘 I/O”。Note在 Linux 系统上,运行多个 MySQL 服务器(通常超过 12 个)时,默认设置的
innodb_read_io_threads、innodb_write_io_threads和 Linuxaio-max-nr设置可能会超过系统限制。理想情况下,增加aio-max-nr设置;作为 workaround,可以减少 MySQL 变量的设置。还需要考虑
sync_binlog的值,该值控制二进制日志的磁盘同步。一般 I/O 调优建议,请参阅 第 10.5.8 节,“优化 InnoDB 磁盘 I/O”。