-
系统变量可以在服务器启动时启用或禁用。例如,要启用或禁用 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 秒大约将pid
SHOW 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_flushing
Scope 全局 Dynamic 是 SET_VAR
Hint 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_lwm
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 10
Minimum Value 0
Maximum Value 70
定义 redo 日志容量的低水位百分比,以便启用自适应刷新。有关详细信息,请参阅 第 17.8.3.5 节,“配置缓冲池刷新”。
-
Command-Line Format --innodb-adaptive-hash-index[={OFF|ON}]
System Variable innodb_adaptive_hash_index
Scope 全局 Dynamic 是 SET_VAR
Hint 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_parts
Command-Line Format --innodb-adaptive-hash-index-parts=#
System Variable innodb_adaptive_hash_index_parts
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 数字 Default Value 8
Minimum Value 1
Maximum Value 512
将自适应哈希索引搜索系统分区。每个索引都绑定到特定的分区,每个分区都受到单独的锁保护。
自适应哈希索引搜索系统默认分区为 8 部分。最大设置为 512。
有关信息,请参阅 第 17.5.3 节,“自适应哈希索引”。
-
innodb_adaptive_max_sleep_delay
Command-Line Format --innodb-adaptive-max-sleep-delay=#
System Variable innodb_adaptive_max_sleep_delay
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 150000
Minimum Value 0
Maximum Value 1000000
Unit 微秒 允许
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_increment
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 64
Minimum Value 1
Maximum Value 1000
Unit 兆字节 自动扩展
InnoDB
系统表空间文件的增量大小(以兆字节为单位),当文件满时扩展。默认值为 64。有关信息,请参阅 系统表空间数据文件配置 和 调整系统表空间。该
innodb_autoextend_increment
设置不影响 每个表的表空间 文件或 通用表空间 文件。这些文件将自动扩展,不管innodb_autoextend_increment
设置如何。初始扩展是小量的,然后扩展以 4MB 的增量。 -
Command-Line Format --innodb-autoinc-lock-mode=#
System Variable innodb_autoinc_lock_mode
Scope Global Dynamic 否 SET_VAR
Hint Applies否 Type 整数 Default Value 2
Valid Values 0
1
2
该 锁模式 用于生成 自动递增 值。允许的值是 0、1 或 2,分别表示传统、连续或交叉锁模式。
默认设置是 2(交叉锁模式),以与基于行的复制保持兼容。
有关每种锁模式的特征,请参阅 InnoDB AUTO_INCREMENT 锁模式。
-
innodb_background_drop_list_empty
Command-Line Format --innodb-background-drop-list-empty[={OFF|ON}]
System Variable innodb_background_drop_list_empty
Scope Global Dynamic 是 SET_VAR
Hint 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_size
Scope Global Dynamic 否 SET_VAR
Hint Applies否 Type 整数 Default Value 134217728
Minimum Value 1048576
Maximum Value innodb_buffer_pool_size / innodb_buffer_pool_instances
Unit 字节 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_debug
Scope Global Dynamic No SET_VAR
Hint AppliesNo Type Boolean Default Value OFF
启用该选项时,允许在缓冲池小于 1GB 时启用多个缓冲池实例,忽略
innodb_buffer_pool_instances
的 1GB 最小缓冲池大小约束。该innodb_buffer_pool_debug
选项仅在使用WITH_DEBUG
CMake 选项编译调试支持时可用。 -
innodb_buffer_pool_dump_at_shutdown
Command-Line Format --innodb-buffer-pool-dump-at-shutdown[={OFF|ON}]
System Variable innodb_buffer_pool_dump_at_shutdown
Scope Global Dynamic Yes SET_VAR
Hint 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_now
Scope Global Dynamic Yes SET_VAR
Hint 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_pct
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Integer Default Value 25
Minimum Value 1
Maximum Value 100
指定要转储的缓冲池页面的百分比。范围是 1 到 100。默认值是 25。例如,如果有 4 个缓冲池,每个缓冲池有 100 页,并且
innodb_buffer_pool_dump_pct
设置为 25,那么每个缓冲池的 25 个最新使用的页面将被转储。 -
Command-Line Format --innodb-buffer-pool-filename=file_name
System Variable innodb_buffer_pool_filename
Scope Global Dynamic Yes SET_VAR
Hint 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_file
Command-Line Format --innodb-buffer-pool-in-core-file[={OFF|ON}]
System Variable innodb_buffer_pool_in_core_file
Scope 全局 Dynamic 是 SET_VAR
Hint 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_instances
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 整数 Default Value 8 (或 1,如果 innodb_buffer_pool_size < 1GB)
Minimum Value 1
Maximum 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_abort
Scope 全局 Dynamic 是 SET_VAR
Hint 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_startup
Command-Line Format --innodb-buffer-pool-load-at-startup[={OFF|ON}]
System Variable innodb_buffer_pool_load_at_startup
Scope 全局 Dynamic 否 SET_VAR
Hint 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_now
Scope 全局 Dynamic 是 SET_VAR
Hint 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_size
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 134217728
Minimum Value 5242880
Maximum Value (64-bit platforms) 2**64-1
Maximum Value (32-bit platforms) 2**32-1
Unit 字节 缓冲池的大小,以字节为单位,是
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_size
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 25
Minimum Value 0
Maximum Value 50
InnoDB
change buffer
的最大大小,以缓冲池总大小的百分比表示。您可能需要增加该值,以适应具有大量插入、更新和删除活动的 MySQL 服务器,或者减少该值,以适应用于报告的不变数据。有关更多信息,请参阅 第 17.5.2 节,“更改缓冲区”。有关一般 I/O 调优建议,请参阅 第 10.5.8 节,“优化 InnoDB 磁盘 I/O”。 -
Command-Line Format --innodb-change-buffering=value
System Variable innodb_change_buffering
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 枚举 Default Value all
Valid Values none
inserts
deletes
changes
purges
all
InnoDB 是否执行
change buffering
,一种优化技术,它将次要索引的写操作延迟,以便 I/O 操作可以顺序执行。允许的值在下表中描述。也可以以数字形式指定值。表 17.25 innodb_change_buffering 的允许值
Value Numeric Value Description none
0
不缓冲任何操作。 inserts
1
缓冲插入操作。 deletes
2
缓冲删除标记操作;严格来说,是在 purge 操作期间标记索引记录以供删除。 changes
3
缓冲插入和删除标记操作。 purges
4
缓冲物理删除操作,这些操作在后台发生。 all
5
默认值。缓冲插入、删除标记和 purge 操作。
有关更多信息,请参阅 第 17.5.2 节,“更改缓冲区”。有关一般 I/O 调优建议,请参阅 第 10.5.8 节,“优化 InnoDB 磁盘 I/O”。
-
Command-Line Format --innodb-change-buffering-debug=#
System Variable innodb_change_buffering_debug
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 0
Minimum Value 0
Maximum Value 2
设置
InnoDB
更改缓冲调试标志。值为 1 强制所有更改写入更改缓冲区。值为 2 导致意外退出合并。默认值为 0,表示不设置更改缓冲调试标志。此选项仅在使用WITH_DEBUG
CMake 选项编译调试支持时可用。 -
Command-Line Format --innodb-checkpoint-disabled[={OFF|ON}]
System Variable innodb_checkpoint_disabled
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 布尔值 Default Value OFF
这是一个调试选项,仅供专家调试使用。它禁用检查点,以便在服务器退出时始终启动
InnoDB
恢复。它应该仅在短时间间隔内启用,通常是在运行 DML 操作之前,写入 redo 日志条目,以便在服务器退出后恢复。该选项仅在使用WITH_DEBUG
CMake 选项编译调试支持时可用。 -
Command-Line Format --innodb-checksum-algorithm=value
System Variable innodb_checksum_algorithm
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 枚举 Default Value crc32
Valid Values crc32
strict_crc32
innodb
strict_innodb
none
strict_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_enabled
Scope 全局 Dynamic 是 SET_VAR
Hint 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_concurrency
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 0
Minimum Value 0
Maximum Value 1000
可以同时提交的 线程 数量。值为 0(默认)允许任何数量的 事务 同时提交。
innodb_commit_concurrency
的值不能从零更改为非零或从非零更改为零。该值可以从一个非零值更改为另一个非零值。 -
Command-Line Format --innodb-compress-debug=value
System Variable innodb_compress_debug
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 枚举 Default Value none
Valid Values none
zlib
lz4
lz4hc
使用指定的压缩算法压缩所有表,而不需要为每个表定义
COMPRESSION
属性。此选项仅在使用WITH_DEBUG
CMake 选项编译调试支持时可用。有关信息,请参阅 第 17.9.2 节,“InnoDB 页面压缩”。
-
innodb_compression_failure_threshold_pct
Command-Line Format --innodb-compression-failure-threshold-pct=#
System Variable innodb_compression_failure_threshold_pct
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 5
Minimum Value 0
Maximum Value 100
定义表的压缩失败率阈值,以百分比表示,在达到该阈值时,MySQL 开始在压缩页面中添加填充以避免昂贵的 压缩失败。当达到该阈值时,MySQL 开始在每个新的压缩页面中留出额外的空闲空间,动态调整空闲空间的百分比,直到达到
innodb_compression_pad_pct_max
指定的百分比。值为零禁用监控压缩效率并动态调整填充量的机制。有关信息,请参阅 第 17.9.1.6 节,“OLTP 工作负载的压缩”。
-
Command-Line Format --innodb-compression-level=#
System Variable innodb_compression_level
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 6
Minimum Value 0
Maximum Value 9
指定
InnoDB
压缩 表和索引的 zlib 压缩级别。较高的值可以将更多数据存储在存储设备上,但会增加 CPU 开销以进行压缩。较低的值可以减少 CPU 开销,以便在存储空间不紧张或数据不可压缩时使用。有关信息,请参阅 第 17.9.1.6 节,“OLTP 工作负载的压缩”。
-
innodb_compression_pad_pct_max
Command-Line Format --innodb-compression-pad-pct-max=#
System Variable innodb_compression_pad_pct_max
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 50
Minimum Value 0
Maximum Value 75
指定压缩页面中可以保留的最大百分比作为空闲空间,以便在更新压缩表或索引时重新组织数据和修改日志,并在页面中留出空间以避免 压缩失败。仅在
innodb_compression_failure_threshold_pct
设置为非零值时生效,并且压缩失败率超过阈值。有关信息,请参阅 第 17.9.1.6 节,“OLTP 工作负载的压缩”。
-
Command-Line Format --innodb-concurrency-tickets=#
System Variable innodb_concurrency_tickets
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 5000
Minimum Value 1
Maximum 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_name
System Variable innodb_data_file_path
Scope 全局 Dynamic 否 SET_VAR
Hint 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_name
System Variable innodb_data_home_dir
Scope 全局 Dynamic 否 SET_VAR
Hint 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_size
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 1048576
Minimum Value 65536
Maximum Value 4294967295
Unit 字节 定义 DDL 操作的最大缓冲区大小。默认设置为 1048576 字节(约 1 MB)。适用于在线 DDL 操作,创建或重建次要索引。请参阅 第 17.12.4 节,“在线 DDL 内存管理”。每个 DDL 线程的最大缓冲区大小是最大缓冲区大小除以 DDL 线程数(
innodb_ddl_buffer_size
/innodb_ddl_threads
)。 -
innodb_ddl_log_crash_reset_debug
Command-Line Format --innodb-ddl-log-crash-reset-debug[={OFF|ON}]
System Variable innodb_ddl_log_crash_reset_debug
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 布尔值 Default Value OFF
启用此调试选项以将 DDL 日志崩溃重置计数器重置为 1。这选项仅在使用
WITH_DEBUG
CMake 选项编译调试支持时可用。 -
Command-Line Format --innodb-ddl-threads=#
System Variable innodb_ddl_threads
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 4
Minimum Value 1
Maximum Value 64
定义在线 DDL 操作创建或重建次要索引时的最大并行线程数。有关相关信息,请参阅 第 17.12.5 节,“配置在线 DDL 操作的并行线程” 和 第 17.12.4 节,“在线 DDL 内存管理”。
-
Command-Line Format --innodb-deadlock-detect[={OFF|ON}]
System Variable innodb_deadlock_detect
Scope 全局 Dynamic 是 SET_VAR
Hint 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_server
Scope 全局 Dynamic 否 SET_VAR
Hint 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=value
System Variable innodb_default_row_format
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 枚举 Default Value DYNAMIC
Valid Values REDUNDANT
COMPACT
DYNAMIC
该
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_name
System Variable innodb_directories
Scope 全局 Dynamic 否 SET_VAR
Hint 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_cache
Command-Line Format --innodb-disable-sort-file-cache[={OFF|ON}]
System Variable innodb_disable_sort_file_cache
Scope Global Dynamic 是 SET_VAR
Hint Applies否 Type 布尔值 Default Value OFF
禁用操作系统文件系统缓存,以便合并排序临时文件。该效果相当于使用
O_DIRECT
打开这些文件。 -
Command-Line Format --innodb-doublewrite=value
System Variable innodb_doublewrite
Scope Global Dynamic 是 SET_VAR
Hint Applies否 Type 枚举 Default Value ON
Valid 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_size
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 整数 Default Value 0
Minimum Value 0
Maximum Value 256
定义双写页的批量写入数量。
有关信息,请参阅 第 17.6.4 节,“双写缓冲”。
-
Command-Line Format --innodb-doublewrite-dir=dir_name
System Variable innodb_doublewrite_dir
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 目录名称 定义双写文件的目录。如果未指定目录,双写文件将在
innodb_data_home_dir
目录中创建,该目录默认为数据目录,如果未指定。有关信息,请参阅 第 17.6.4 节,“双写缓冲”。
-
Command-Line Format --innodb-doublewrite-files=#
System Variable innodb_doublewrite_files
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 整数 Default Value innodb_buffer_pool_instances * 2
Minimum Value 2
Maximum Value 256
定义双写文件的数量。默认情况下,为每个缓冲池实例创建两个双写文件。
至少有两个双写文件。双写文件的最大数量是缓冲池实例数量的两倍。(缓冲池实例数量由
innodb_buffer_pool_instances
变量控制。)有关更多信息,请参阅第 17.6.4 节,“双写缓冲区”。
-
Command-Line Format --innodb-doublewrite-pages=#
System Variable innodb_doublewrite_pages
Scope 全局 Dynamic 否 SET_VAR
Hint 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_initialize
Scope 全局 Dynamic 是 SET_VAR
Hint 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_shutdown
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 1
Valid Values 0
1
2
InnoDB shutdown 模式。如果值为 0,InnoDB 执行慢速shutdown,完整的purge 和更改缓冲区合并,然后关闭。如果值为 1(默认),InnoDB 跳过这些操作,执行快速shutdown。如果值为 2,InnoDB 刷新日志并关闭冷启动,类似于 MySQL 崩溃;没有提交的事务不会丢失,但崩溃恢复操作使下一个启动时间更长。
慢速shutdown 可能需要几分钟,或者在极端情况下需要几个小时,数据缓冲区中的大量数据。在升级或降级 MySQL 主要版本之前,使用慢速shutdown 技术,以便在升级过程中更新文件格式时,所有数据文件都被完全准备好。
在紧急或故障排除情况下,使用
innodb_fast_shutdown=2
,以获取绝对最快的shutdown,如果数据有腐败风险。 -
innodb_fil_make_page_dirty_debug
Command-Line Format --innodb-fil-make-page-dirty-debug=#
System Variable innodb_fil_make_page_dirty_debug
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 0
Minimum Value 0
Maximum 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_DEBUG
CMake 选项编译调试支持时可用。 -
Command-Line Format --innodb-file-per-table[={OFF|ON}]
System Variable innodb_file_per_table
Scope 全局 Dynamic 是 SET_VAR
Hint 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_factor
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 100
Minimum Value 10
Maximum Value 100
InnoDB
在创建或重建索引时执行批量加载。这是一种称为““排序索引构建”的索引创建方法。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_timeout
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 1
Minimum Value 1
Maximum Value 2700
Unit 秒 每
N
秒写入和刷新日志。innodb_flush_log_at_timeout
允许增加超时期限,以减少刷新对性能的影响。默认设置为每秒一次。 -
innodb_flush_log_at_trx_commit
Command-Line Format --innodb-flush-log-at-trx-commit=#
System Variable innodb_flush_log_at_trx_commit
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 枚举 Default Value 1
Valid Values 0
1
2
控制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=value
System Variable innodb_flush_method
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 字符串 Default Value (Unix, 8.3.0) fsync
Default Value (Windows) unbuffered
Valid Values (Unix, 8.3.0) fsync
O_DSYNC
littlesync
nosync
O_DIRECT
O_DIRECT_NO_FSYNC
Valid Values (Windows) unbuffered
normal
定义了将数据刷新到
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_neighbors
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Enumeration Default Value 0
Valid Values 0
1
2
指定是否在
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_sync
Scope Global Dynamic Yes SET_VAR
Hint 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_loops
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Integer Default Value 30
Minimum Value 1
Maximum Value 1000
InnoDB保持之前计算的快照的迭代次数,以控制自适应刷新如何快速响应工作负载的变化。增加该值使刷新操作率平滑地变化,适应工作负载的变化。减少该值使自适应刷新快速地响应工作负载的变化,这可能会导致刷新活动的峰值,如果工作负载突然增加或减少。
有关信息,请参见第17.8.3.5节,“配置缓冲池刷新”。
-
Command-Line Format --innodb-force-load-corrupted[={OFF|ON}]
System Variable innodb_force_load_corrupted
Scope Global Dynamic No SET_VAR
Hint AppliesNo Type Boolean Default Value OFF
允许InnoDB在启动时加载标记为损坏的表。仅在故障排除期间使用,以恢复无法访问的数据。当故障排除完成后,禁用该设置并重新启动服务器。
-
Command-Line Format --innodb-force-recovery=#
System Variable innodb_force_recovery
Scope Global Dynamic No SET_VAR
Hint AppliesNo Type Integer Default Value 0
Minimum Value 0
Maximum 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_threshold
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Integer Default Value 0
Minimum Value 0
Maximum Value 2**64-1
默认情况下,当
InnoDB
创建新数据文件,如新日志文件或表空间文件时,该文件将完全写入操作系统缓存,然后才刷新到磁盘,这可能会导致大量磁盘写活动同时发生。要强制较小、周期性的刷新数据从操作系统缓存,可以使用innodb_fsync_threshold
变量定义字节阈值。当达到字节阈值时,操作系统缓存的内容将刷新到磁盘。默认值为0,强制默认行为,即仅在文件完全写入缓存后刷新到磁盘。指定阈值以强制较小、周期性的刷新可能有助于避免大量磁盘写活动的surge,例如,在多个MySQL实例使用相同存储设备的情况下,创建新MySQL实例及其关联数据文件可能会导致大量磁盘写活动,影响其他MySQL实例的性能。配置阈值可以避免这种写活动的surge。
-
System Variable innodb_ft_aux_table
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type String 指定包含
FULLTEXT
索引的InnoDB
表的限定名称。该变量旨在诊断目的,可以仅在运行时设置。例如:SET GLOBAL innodb_ft_aux_table = 'test/t1';
在设置该变量为格式
的名称后,db_name
/table_name
INFORMATION_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_SIZE
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 整数 Default Value 8000000
Minimum Value 1600000
Maximum Value 80000000
Unit 字节 为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_PRINT
Scope 全局 Dynamic 是 SET_VAR
Hint 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_STOPWORD
Scope 全局、会话 Dynamic 是 SET_VAR
Hint 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_SIZE
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 整数 Default Value 84
Minimum Value 10
Maximum Value 84
InnoDB全文搜索索引中存储的单词的最大字符长度。设置这个值的限制可以减少索引的大小,从而加速查询,方法是忽略长关键字或任意字母集合,这些字母集合不是真正的单词,也不太可能是搜索词。
更多信息,请参见第14.9.6节“微调MySQL全文搜索”。
-
Command-Line Format --innodb-ft-min-token-size=#
System Variable innodb_ft_min_token_size
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 整数 Default Value 3
Minimum Value 0
Maximum Value 16
InnoDB 全文索引中存储的最小单词长度。增加该值将减少索引的大小,从而加速查询,通过忽略搜索上下文中不太可能是重要的常见单词,例如英语单词 “a” 和 “to”。对于使用 CJK(中文、日文、韩文)字符集的内容,请指定值为 1。
更多信息,请参阅 第 14.9.6 节,“微调 MySQL 全文搜索”。
-
Command-Line Format --innodb-ft-num-word-optimize=#
System Variable innodb_ft_num_word_optimize
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 2000
Minimum Value 1000
Maximum 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_limit
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 2000000000
Minimum Value 1000000
Maximum Value 2**32-1
Unit 字节 InnoDB 全文搜索查询结果缓存限制(以字节为单位),用于限制每个全文搜索查询或每个线程的缓存大小。中间和最终 InnoDB 全文搜索查询结果将在内存中处理。使用
innodb_ft_result_cache_limit
限制全文搜索查询结果缓存大小,以避免大量内存消耗。在查询结果缓存大小达到限制时,将返回错误,指示查询超出允许的最大内存。所有平台类型和位大小的
innodb_ft_result_cache_limit
的最大值为 2**32-1。 -
innodb_ft_server_stopword_table
Command-Line Format --innodb-ft-server-stopword-table=db_name/table_name
System Variable innodb_ft_server_stopword_table
Scope 全局 Dynamic 是 SET_VAR
Hint 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_degree
Scope Global Dynamic No SET_VAR
Hint AppliesNo Type Integer Default Value 2
Minimum Value 1
Maximum Value 16
用于在
InnoDB
FULLTEXT
索引中构建搜索索引时的并行线程数。有关更多信息,请参阅 第 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_size
Scope Global Dynamic No SET_VAR
Hint AppliesNo Type Integer Default Value 640000000
Minimum Value 32000000
Maximum Value 1600000000
Unit 字节 为所有表的
InnoDB
全文搜索索引缓存分配的总内存大小,以字节为单位。创建多个表,每个表都有一个FULLTEXT
搜索索引,可能会消耗大量可用内存。innodb_ft_total_cache_size
定义了一个全局内存限制,以避免过度内存消耗。如果达到全局限制,索引操作将触发强制同步。有关更多信息,请参阅 InnoDB Full-Text Index Cache。
-
Command-Line Format --innodb-ft-user-stopword-table=db_name/table_name
System Variable innodb_ft_user_stopword_table
Scope Global, Session Dynamic Yes SET_VAR
Hint AppliesNo Type String Default Value NULL
用于指定特定表的
InnoDB
FULLTEXT
索引停止词列表。要配置所有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_pct
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 100
Minimum Value 0
Maximum Value 100
限制 InnoDB 空闲时的页面刷新。
innodb_idle_flush_pct
值是innodb_io_capacity
设置的百分比,该设置定义了 InnoDB 可用的 I/O 操作数每秒。有关更多信息,请参阅 限制缓冲区刷新率。 -
Command-Line Format --innodb-io-capacity=#
System Variable innodb_io_capacity
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 200
Minimum Value 100
Maximum Value (64-bit platforms, 8.3.0) 2**64-1
Maximum Value (32-bit platforms, 8.3.0) 2**32-1
innodb_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_max
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 2 * innodb_io_capacity, min of 2000
Minimum Value 100
Maximum Value (32-bit platforms, 8.3.0) 2**32-1
Maximum 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_debug
Command-Line Format --innodb-limit-optimistic-insert-debug=#
System Variable innodb_limit_optimistic_insert_debug
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 0
Minimum Value 0
Maximum Value 2**32-1
限制每个 B-tree 页的记录数。默认值为 0,表示不施加限制。此选项仅在使用
WITH_DEBUG
CMake 选项编译调试支持时可用。 -
Command-Line Format --innodb-lock-wait-timeout=#
System Variable innodb_lock_wait_timeout
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 50
Minimum Value 1
Maximum Value 1073741824
Unit 秒 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_size
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 16777216
Minimum Value 1048576
Maximum Value 4294967295
缓冲区的大小,以字节为单位,用于写入磁盘上的日志文件。默认值为16MB。大的日志缓冲区使得大型事务可以运行,而不需要在事务提交之前将日志写入磁盘。因此,如果您有更新、插入或删除许多行的事务,使日志缓冲区变大可以节省磁盘I/O。有关信息,请参见内存配置和第10.5.4节,“优化InnoDB重做日志”。对于一般的I/O调整建议,请参见第10.5.8节,“优化InnoDB磁盘I/O”。
-
innodb_log_checkpoint_fuzzy_now
Command-Line Format --innodb-log-checkpoint-fuzzy-now[={OFF|ON}]
System Variable innodb_log_checkpoint_fuzzy_now
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 布尔值 Default Value OFF
启用此调试选项,以强制InnoDB写入模糊检查点。此选项仅在使用
WITH_DEBUG
CMake选项编译调试支持时可用。 -
Command-Line Format --innodb-log-checkpoint-now[={OFF|ON}]
System Variable innodb_log_checkpoint_now
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 布尔值 Default Value OFF
启用此调试选项,以强制InnoDB写入检查点。此选项仅在使用
WITH_DEBUG
CMake选项编译调试支持时可用。 -
Command-Line Format --innodb-log-checksums[={OFF|ON}]
System Variable innodb_log_checksums
Scope 全局 Dynamic 是 SET_VAR
Hint 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_pages
Scope 全局 Dynamic 是 SET_VAR
Hint 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_size
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 整数 Default Value 50331648
Minimum Value 4194304
Maximum Value 512GB / innodb_log_files_in_group
Unit 字节 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_group
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 整数 Default Value 2
Minimum Value 2
Maximum Value 100
Noteinnodb_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_name
System Variable innodb_log_group_home_dir
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 目录名 InnoDB 重做日志文件的目录路径。
有关信息,请见 重做日志配置。
-
Command-Line Format --innodb-log-spin-cpu-abs-lwm=#
System Variable innodb_log_spin_cpu_abs_lwm
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 80
Minimum Value 0
Maximum 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_hwm
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 50
Minimum Value 0
Maximum 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_hwm
Command-Line Format --innodb-log-wait-for-flush-spin-hwm=#
System Variable innodb_log_wait_for_flush_spin_hwm
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 400
Minimum Value 0
Maximum Value (64-bit platforms) 2**64-1
Maximum Value (32-bit platforms) 2**32-1
Unit 微秒 定义用户线程等待flush redo的最大平均日志刷新时间。默认值为400微秒。
有关信息,请参阅 第10.5.4节,“优化InnoDB重做日志”。
-
Command-Line Format --innodb-log-write-ahead-size=#
System Variable innodb_log_write_ahead_size
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 8192
Minimum Value 512 (日志文件块大小)
Maximum Value 等于innodb_page_size
Unit 字节 定义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_threads
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 布尔值 Default Value ON
启用专用的日志写入线程,以从日志缓冲区写入重做日志记录到系统缓冲区,并将系统缓冲区刷新到重做日志文件中。专用的日志写入线程可以提高高并发系统的性能,但对于低并发系统,禁用专用的日志写入线程可以提供更好的性能。
有关更多信息,请参阅 第 10.5.4 节,“优化 InnoDB 重做日志记录”。
-
Command-Line Format --innodb-lru-scan-depth=#
System Variable innodb_lru_scan_depth
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 1024
Minimum Value 100
Maximum Value (64-bit platforms) 2**64-1
Maximum 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_pct
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 数字 Default Value 90
Minimum Value 0
Maximum Value 99.999
InnoDB
尝试从缓冲池中刷新数据,以便脏页的百分比不超过该值。该
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_lwm
Command-Line Format --innodb-max-dirty-pages-pct-lwm=#
System Variable innodb_max_dirty_pages_pct_lwm
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 数字 Default Value 10
Minimum Value 0
Maximum 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_lag
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 0
Minimum Value 0
Maximum 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_delay
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 0
Minimum Value 0
Maximum Value 10000000
Unit 微秒 指定了当
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_size
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 1073741824
Minimum Value 10485760
Maximum Value 2**64-1
Unit 字节 定义了撤销日志表空间的阈值大小。如果撤销表空间超过这个阈值,它可以在
innodb_undo_log_truncate
启用时被截断。默认值为 1073741824 字节(1024 MiB)。更多信息,请参见 截断撤销表空间。
-
innodb_merge_threshold_set_all_debug
Command-Line Format --innodb-merge-threshold-set-all-debug=#
System Variable innodb_merge_threshold_set_all_debug
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 50
Minimum Value 1
Maximum Value 50
定义了一个页面完整百分比值,以覆盖当前的
MERGE_THRESHOLD
设置,对于所有当前在字典缓存中的索引。这项选项仅在使用WITH_DEBUG
CMake 选项编译调试支持时可用。有关信息,请参阅 第 17.8.11 节,“配置索引页面合并阈值”。 -
Command-Line Format --innodb-monitor-disable={counter|module|pattern|all}
System Variable innodb_monitor_disable
Scope 全局 Dynamic 是 SET_VAR
Hint 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_enable
Scope 全局 Dynamic 是 SET_VAR
Hint 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_reset
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 枚举 Default Value NULL
Valid Values counter
module
pattern
all
该变量充当开关,重置
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_all
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 枚举 Default Value NULL
Valid Values counter
module
pattern
all
该变量充当开关,重置所有值(最小值、最大值等)用于
InnoDB
metrics 计数器。计数器数据可以使用信息模式INNODB_METRICS
表查询。有关使用信息,请参阅 第 17.15.6 节,“InnoDB INFORMATION_SCHEMA Metrics 表”。 -
Command-Line Format --innodb-numa-interleave[={OFF|ON}]
System Variable innodb_numa_interleave
Scope 全局 Dynamic 否 SET_VAR
Hint 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_pct
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 37
Minimum Value 5
Maximum 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_time
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 1000
Minimum Value 0
Maximum Value 2**32-1
Unit 毫秒 非零值保护缓冲池不被短暂期限的数据填充,例如在完整表扫描期间。增加该值可以提供更多保护,以免完整表扫描干扰缓冲池中的数据。
指定在旧子列表中插入的块必须等待多长时间(毫秒)后才能移到新子列表中。如果该值为 0,则插入旧子列表的块将在第一次访问时立即移到新子列表中。如果该值大于 0,则块将在旧子列表中等待至少该值毫秒后才能移到新子列表中。
默认值为 1000。
该变量通常与
innodb_old_blocks_pct
结合使用。有关更多信息,请参阅 第 17.8.3.3 节,“使缓冲池扫描抵抗”。有关缓冲池管理、LRU 算法和驱逐策略的信息,请参阅 第 17.5.1 节,“缓冲池”。 -
innodb_online_alter_log_max_size
Command-Line Format --innodb-online-alter-log-max-size=#
System Variable innodb_online_alter_log_max_size
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 134217728
Minimum Value 65536
Maximum Value 2**64-1
Unit 字节 指定在线 DDL 操作期间临时日志文件的最大大小(以字节为单位)。该日志文件用于存储在 DDL 操作期间插入、更新或删除的数据。如果临时日志文件超过最大大小限制,DDL 操作将失败,并回滚所有未提交的并发 DML 操作。
-
Command-Line Format --innodb-open-files=#
System Variable innodb_open_files
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value -1
(表示自动调整大小,不要分配该字面值)Minimum Value 10
Maximum 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_only
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Boolean Default Value OFF
更改
OPTIMIZE TABLE
在InnoDB
表上的操作方式。旨在临时启用,用于InnoDB
表的维护操作,具有FULLTEXT
索引。默认情况下,
OPTIMIZE TABLE
重新组织表的聚簇索引中的数据。当启用该选项时,OPTIMIZE TABLE
跳过表数据的重新组织,而是处理InnoDB
FULLTEXT
索引的新增、删除和更新的标记数据。有关更多信息,请参阅 优化 InnoDB 全文本索引。 -
Command-Line Format --innodb-page-cleaners=#
System Variable innodb_page_cleaners
Scope Global Dynamic No SET_VAR
Hint AppliesNo Type Integer Default Value 4
Minimum Value 1
Maximum 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_size
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 枚举 Default Value 16384
Valid Values 4096
8192
16384
32768
65536
指定
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_threads
Scope 会话 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 4
Minimum Value 1
Maximum 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_deadlocks
Scope 全局 Dynamic 是 SET_VAR
Hint 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_logs
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 布尔值 Default Value OFF
启用该选项时,MySQL 将 DDL 日志写入
stderr
。有关更多信息,请参阅 查看 DDL 日志。 -
Command-Line Format --innodb-清除批量大小=#
System Variable innodb_清除批量大小
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 300
Minimum Value 1
Maximum 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_VAR
Hint Applies否 Type 整数 Default Value 4
Minimum Value 1
Maximum Value 32
背景线程数用于清除操作。增加该值将创建更多的清除线程,从而可以在多个表上执行DML操作的系统上提高效率。
有关信息,请参阅第17.8.9节,“清除配置”。
-
Command-Line Format --innodb-回滚段截断频率=#
System Variable innodb_回滚段截断频率
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 128
Minimum Value 1
Maximum Value 128
定义清除系统释放回滚段的频率,以清除调用次数为单位。undo表空间不能截断,直到其回滚段被释放。通常,清除系统每128次调用释放回滚段。默认值为128。减少该值将增加清除线程释放回滚段的频率。
innodb_回滚段截断频率
旨在与innodb_undo_log_truncate
一起使用。有关信息,请参阅截断Undo表空间。 -
Command-Line Format --innodb-随机读取预读[={OFF|ON}]
System Variable innodb_随机读取预读
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 布尔值 Default Value OFF
启用随机 预读 技术,以优化
InnoDB
I/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_threshold
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 56
Minimum Value 0
Maximum 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_threads
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 整数 Default Value (可用逻辑处理器 / 2),最小为 4
Default Value (8.3.0) 4
Minimum Value 1
Maximum 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_only
Scope 全局 Dynamic 否 SET_VAR
Hint 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_name
ENGINE=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-dirs
System Variable innodb_redo_log_archive_dirs
Scope 全局 Dynamic 是 SET_VAR
Hint 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_capacity
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 104857600
Minimum Value 8388608
Maximum Value 549755813888
Unit 字节 定义 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_encrypt
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 布尔值 Default Value OFF
控制使用
InnoDB
数据静态加密功能 加密的表的 redo 日志数据加密。redo 日志数据加密默认情况下是禁用的。有关更多信息,请参阅 Redo Log 加密。 -
Command-Line Format --innodb-replication-delay=#
System Variable innodb_replication_delay
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 0
Minimum Value 0
Maximum Value 4294967295
Unit 毫秒 在副本服务器上,如果
innodb_thread_concurrency
达到,则复制线程延迟的毫秒数。 -
Command-Line Format --innodb-rollback-on-timeout[={OFF|ON}]
System Variable innodb_rollback_on_timeout
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 布尔值 Default Value OFF
InnoDB
仅在事务超时时回滚最后一条语句。 如果指定了--innodb-rollback-on-timeout
,事务超时将导致InnoDB
中止并回滚整个事务。有关更多信息,请参阅 第 17.20.5 节,“InnoDB 错误处理”。
-
Command-Line Format --innodb-rollback-segments=#
System Variable innodb_rollback_segments
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 128
Minimum Value 1
Maximum Value 128
innodb_rollback_segments
定义了每个撤销表空间和全局临时表空间中分配给事务的撤销段的数量。每个撤销段支持的交易数量取决于InnoDB
页大小和每个事务分配的撤销日志数量。有关更多信息,请参阅 第 17.6.6 节,“撤销日志”。有关相关信息,请参阅 第 17.3 节,“InnoDB 多版本控制”。有关撤销表空间的信息,请参阅 第 17.6.3.4 节,“撤销表空间”。
-
innodb_saved_page_number_debug
Command-Line Format --innodb-saved-page-number-debug=#
System Variable innodb_saved_page_number_debug
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 0
Minimum Value 0
Maximum Value 2**32-1
保存一页号。设置
innodb_fil_make_page_dirty_debug
选项会将innodb_saved_page_number_debug
定义的页号设置为脏页。innodb_saved_page_number_debug
选项仅在使用WITH_DEBUG
CMake 选项编译调试支持时可用。 -
Command-Line Format --innodb-segment-reserve-factor=#
System Variable innodb_segment_reserve_factor
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 数字 Default Value 12.5
Minimum Value 0.03
Maximum Value 40
定义表空间文件段页面保留为空白页的百分比。该设置适用于每个表空间和通用表空间。
innodb_segment_reserve_factor
的默认设置为 12.5%,与之前的 MySQL 版本相同。有关更多信息,请参阅 配置保留文件段页面的百分比。
-
Command-Line Format --innodb-sort-buffer-size=#
System Variable innodb_sort_buffer_size
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 整数 Default Value 1048576
Minimum Value 65536
Maximum Value 67108864
Unit 字节 该变量定义了在在线 DDL 操作期间记录并发 DML 时临时日志文件的扩展量,以及临时日志文件读取缓冲区和写入缓冲区的大小。
有关更多信息,请参阅 第 17.12.3 节,“在线 DDL 空间要求”。
-
Command-Line Format --innodb-spin-wait-delay=#
System Variable innodb_spin_wait_delay
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 6
Minimum Value 0
Maximum Value 1000
自旋锁的最大延迟时间。该机制的低级实现取决于硬件和操作系统的组合,因此延迟时间不对应于固定的时间间隔。
可以与
innodb_spin_wait_pause_multiplier
变量结合使用,以获得对自旋锁轮询延迟的更大控制。有关更多信息,请参阅 第 17.8.8 节,“配置自旋锁轮询”。
-
innodb_spin_wait_pause_multiplier
Command-Line Format --innodb-spin-wait-pause-multiplier=#
System Variable innodb_spin_wait_pause_multiplier
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 50
Minimum Value 0
Maximum Value 100
定义了自旋锁轮询中 PAUSE 指令的数量,该指令在等待获取互斥锁或读写锁时出现。
有关更多信息,请参阅 第 17.8.8 节,“配置自旋锁轮询”。
-
Command-Line Format --innodb-stats-auto-recalc[={OFF|ON}]
System Variable innodb_stats_auto_recalc
Scope 全局 Dynamic 是 SET_VAR
Hint 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_marked
Command-Line Format --innodb-stats-include-delete-marked[={OFF|ON}]
System Variable innodb_stats_include_delete_marked
Scope 全局 Dynamic 是 SET_VAR
Hint 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=value
System Variable innodb_stats_method
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 枚举 Default Value nulls_equal
Valid Values nulls_equal
nulls_unequal
nulls_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_metadata
Scope 全局 Dynamic 是 SET_VAR
Hint 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
是mode
ON
或OFF
(或1
或0
)。更改设置需要足够的权限来设置全局系统变量(见 第 7.1.9.1 节,“系统变量权限”),并立即影响所有连接的操作。 -
Command-Line Format --innodb-stats-persistent[={OFF|ON}]
System Variable innodb_stats_persistent
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 布尔值 Default Value ON
指定
InnoDB
索引统计信息是否持久化到磁盘。否则,统计信息可能会频繁地重新计算,从而导致 查询执行计划 的变化。该设置将与每个表一起存储在创建表时。你可以在全局级别设置innodb_stats_persistent
,然后使用STATS_PERSISTENT
子句在CREATE TABLE
和ALTER TABLE
语句中覆盖系统范围的设置,以便为单个表配置持久统计信息。有关更多信息,请参阅 第 17.8.10.1 节,“配置持久优化器统计参数”。
-
innodb_stats_persistent_sample_pages
Command-Line Format --innodb-stats-persistent-sample-pages=#
System Variable innodb_stats_persistent_sample_pages
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 20
Minimum Value 1
Maximum 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_pages
Command-Line Format --innodb-stats-transient-sample-pages=#
System Variable innodb_stats_transient_sample_pages
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 8
Minimum Value 1
Maximum 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_output
Scope 全局 Dynamic 是 SET_VAR
Hint 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_locks
Scope 全局 Dynamic 是 SET_VAR
Hint 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_mode
Scope 全局、会话 Dynamic 是 SET_VAR
Hint 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=
启用或禁用mode
innodb_strict_mode
,其中
是mode
ON
或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_size
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 整数 Default Value 1
Minimum Value 1
Maximum Value 1024
定义 mutex/锁等待数组的大小。增加该值将分割内部数据结构,以便在大量等待线程的工作负载中提高并发性。该设置必须在 MySQL 实例启动时配置,不能在以后更改。对于频繁产生大量等待线程的工作负载(通常大于 768),建议增加该值。
-
Command-Line Format --innodb-sync-spin-loops=#
System Variable innodb_sync_spin_loops
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 30
Minimum Value 0
Maximum Value 4294967295
线程等待
InnoDB
互斥锁释放之前的等待次数。 -
Command-Line Format --innodb-sync-debug[={OFF|ON}]
System Variable innodb_sync_debug
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 布尔值 Default Value OFF
启用
InnoDB
存储引擎的同步调试检查。该选项仅在使用WITH_DEBUG
CMake 选项编译调试支持时可用。 -
Command-Line Format --innodb-table-locks[={OFF|ON}]
System Variable innodb_table_locks
Scope 全局、会话 Dynamic 是 SET_VAR
Hint 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_name
System Variable innodb_temp_data_file_path
Scope 全局 Dynamic 否 SET_VAR
Hint 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_name
System Variable InnoDB临时表空间目录
Scope 全局 Dynamic 否 SET_VAR
Hint 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_VAR
Hint Applies否 Type 整数 Default Value 0
Minimum Value 0
Maximum 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_delay
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 10000
Minimum Value 0
Maximum Value 1000000
Unit 微秒 InnoDB 线程在加入 InnoDB 队列之前休眠的时间,以微秒为单位。默认值为 10000。值为 0 将禁用休眠。你可以将
innodb_adaptive_max_sleep_delay
设置为允许的最高值,然后 InnoDB 将自动调整innodb_thread_sleep_delay
的值,以适应当前线程调度活动。有关信息,请参阅 第 17.8.4 节,“配置 InnoDB 的线程并发”。
-
Command-Line Format --innodb-tmpdir=dir_name
System Variable innodb_tmpdir
Scope 全局、会话 Dynamic 是 SET_VAR
Hint 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_debug
Command-Line Format --innodb-trx-purge-view-update-only-debug[={OFF|ON}]
System Variable innodb_trx_purge_view_update_only_debug
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Boolean Default Value OFF
暂停删除标记记录的清除,同时允许清除视图被更新。这选项人工创建了一种情况,在这种情况下,清除视图被更新,但清除操作尚未执行。这选项仅在使用
WITH_DEBUG
CMake 选项编译调试支持时可用。 -
Command-Line Format --innodb-trx-rseg-n-slots-debug=#
System Variable innodb_trx_rseg_n_slots_debug
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Integer Default Value 0
Minimum Value 0
Maximum Value 1024
设置一个调试标志,限制
TRX_RSEG_N_SLOTS
到给定的值,以便在trx_rsegf_undo_find_free
函数中查找undo日志段的空闲槽位。该选项仅在使用WITH_DEBUG
CMake 选项编译调试支持时可用。 -
Command-Line Format --innodb-undo-directory=dir_name
System Variable innodb_undo_directory
Scope 全局 Dynamic 否 SET_VAR
Hint 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_encrypt
Scope 全局 Dynamic 是 SET_VAR
Hint 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_truncate
Scope 全局 Dynamic 是 SET_VAR
Hint 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_tablespaces
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 2
Minimum Value 2
Maximum 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_fdatasync
Scope 全局 Dynamic 是 SET_VAR
Hint 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_aio
Scope 全局 Dynamic 否 SET_VAR
Hint 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 系统上运行大量
InnoDB
I/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_paths
Command-Line Format --innodb-validate-tablespace-paths[={OFF|ON}]
System Variable innodb_validate_tablespace_paths
Scope 全局 Dynamic 否 SET_VAR
Hint 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_threads
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 整数 Default Value 4
Minimum Value 1
Maximum Value 64
InnoDB 中写操作的 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”。