真或假的系统变量可以在服务器启动时通过命名来启用,或者通过使用
--skip-
前缀来禁用。例如,要启用或禁用InnoDB
自适应哈希索引,您可以 在命令行或 选项 文件中 使用--innodb-adaptive-hash-index
或 。--skip-innodb-adaptive-hash-index
innodb_adaptive_hash_index
skip_innodb_adaptive_hash_index
可以在命令行或 选项文件 中指定采用数值的系统变量 。
--
var_name
=value
var_name
=value
许多系统变量可以在运行时更改(请参阅 第 5.1.8.2 节,“动态系统变量”)。
有关变量作用域修饰符的信息,请参阅
GLOBAL
语句 文档。SESSION
SET
某些选项控制
InnoDB
数据文件的位置和布局。 第 14.8.1 节,“InnoDB 启动配置”解释了如何使用这些选项。一些您最初可能不会使用的选项有助于
InnoDB
根据机器容量和您的数据库 工作负载调整性能特征。有关指定选项和系统变量的更多信息,请参阅第 4.2.2 节,“指定程序选项”。
表 14.18 InnoDB 选项和变量引用
InnoDB 命令选项
-
命令行格式 --innodb[=value]
弃用 是的 类型 枚举 默认值 ON
有效值 OFF
ON
FORCE
InnoDB
如果服务器编译时InnoDB
支持,则 控制存储引擎的加载。此选项具有三态格式,可能的值为OFF
、ON
或FORCE
。请参阅 第 5.5.1 节,“安装和卸载插件”。要禁用
InnoDB
,请使用--innodb=OFF
或--skip-innodb
。在这种情况下,因为默认存储引擎是InnoDB
,服务器不会启动,除非您还使用--default-storage-engine
并将 默认值设置为永久和表--default-tmp-storage-engine
的其他引擎 。TEMPORARY
InnoDB
不能再禁用存储引擎,并且 和--innodb=OFF
选项--skip-innodb
已弃用且无效。它们的使用会导致警告。您应该期望在未来的 MySQL 版本中删除这些选项。 -
命令行格式 --innodb-status-file[={OFF|ON}]
类型 布尔值 默认值 OFF
--innodb-status-file
启动选项控制是否InnoDB
创建一个 在数据目录中命名的文件,并大约每 15 秒向其中写入 一次输出。innodb_status.
pid
SHOW ENGINE INNODB STATUS
默认情况下不创建 该 文件。要创建它, 请使用该 选项 启动mysqld 。服务器正常关闭时删除文件。如果发生异常关机,则可能必须手动删除状态文件。
innodb_status.
pid
--innodb-status-file
InnoDB
该
--innodb-status-file
选项仅供临时使用,因为SHOW ENGINE INNODB STATUS
输出生成会影响性能,并且 文件会随着时间的推移变得非常大。innodb_status.
pid
有关相关信息,请参阅 第 14.18.2 节,“启用 InnoDB 监视器”。
禁用
InnoDB
存储引擎。见说明--innodb
。
InnoDB 系统变量
daemon_memcached_enable_binlog
命令行格式 --daemon-memcached-enable-binlog[={OFF|ON}]
系统变量 daemon_memcached_enable_binlog
范围 全球的 动态的 不 类型 布尔值 默认值 OFF
在源服务器上启用此选项以将
InnoDB
memcached plugin(daemon_memcached
) 与 MySQL 二进制日志一起使用。此选项只能在服务器启动时设置。--log-bin
您还必须使用该选项 在源服务器上启用 MySQL 二进制日志 。有关更多信息,请参阅 第 14.21.6 节,“InnoDB memcached 插件和复制”。
daemon_memcached_engine_lib_name
命令行格式 --daemon-memcached-engine-lib-name=file_name
系统变量 daemon_memcached_engine_lib_name
范围 全球的 动态的 不 类型 文件名 默认值 innodb_engine.so
指定实现
InnoDB
memcached插件的共享库。有关详细信息,请参阅 第 14.21.3 节,“设置 InnoDB memcached 插件”。
daemon_memcached_engine_lib_path
命令行格式 --daemon-memcached-engine-lib-path=dir_name
系统变量 daemon_memcached_engine_lib_path
范围 全球的 动态的 不 类型 目录名称 默认值 NULL
包含实现
InnoDB
memcached插件的共享库的目录路径。默认值为NULL,代表MySQL插件目录。memcached
除非为位于 MySQL 插件目录之外的不同存储引擎 指定插件,否则不需要修改此参数 。有关详细信息,请参阅 第 14.21.3 节,“设置 InnoDB memcached 插件”。
-
命令行格式 --daemon-memcached-option=options
系统变量 daemon_memcached_option
范围 全球的 动态的 不 类型 细绳 默认值 用于在启动时将以空格分隔的 memcached 选项传递给底层memcached内存对象缓存守护进程。例如,您可以更改 memcached侦听的端口、减少同时连接的最大数量、更改键值对的最大内存大小或为错误日志启用调试消息。
有关使用详细信息,请参阅第 14.21.3 节,“设置 InnoDB memcached 插件”。有关memcached 选项的信息,请参阅memcached手册页。
-
命令行格式 --daemon-memcached-r-batch-size=#
系统变量 daemon_memcached_r_batch_size
范围 全球的 动态的 不 类型 整数 默认值 1
最小值 1
最大值 1073741824
指定在开始新事务之前要执行 多少memcached读取操作( operations )。的对口 。
get
COMMIT
daemon_memcached_w_batch_size
此值默认设置为 1,因此通过 SQL 语句对表所做的任何更改都会立即对 memcached操作可见。您可能会增加它以减少在仅通过 memcached接口访问基础表的系统上频繁提交的开销。如果将值设置得太大,撤消或重做数据量可能会造成一些存储开销,就像任何长时间运行的事务一样。
有关详细信息,请参阅 第 14.21.3 节,“设置 InnoDB memcached 插件”。
-
命令行格式 --daemon-memcached-w-batch-size=#
系统变量 daemon_memcached_w_batch_size
范围 全球的 动态的 不 类型 整数 默认值 1
最小值 1
最大值 1048576
指定在执行 a以启动新事务之前要执行 多少memcached写操作,例如
add
、set
和。的对口 。incr
COMMIT
daemon_memcached_r_batch_size
默认情况下,此值设置为 1,假设存储的数据对于在发生中断时保留很重要并且应立即提交。当存储非关键数据时,您可以增加此值以减少频繁提交的开销;
N
但是如果发生意外退出 ,最后的 -1 未提交的写操作可能会丢失。有关详细信息,请参阅 第 14.21.3 节,“设置 InnoDB memcached 插件”。
-
命令行格式 --ignore-builtin-innodb[={OFF|ON}]
弃用 是的 系统变量 ignore_builtin_innodb
范围 全球的 动态的 不 类型 布尔值 在早期版本的 MySQL 中,启用此变量会导致服务器表现得好像内置变量
InnoDB
不存在一样,从而InnoDB Plugin
可以使用 。在 MySQL 5.7 中,InnoDB
是默认的存储引擎并且InnoDB Plugin
没有被使用,所以这个变量被忽略。 -
命令行格式 --innodb-adaptive-flushing[={OFF|ON}]
系统变量 innodb_adaptive_flushing
范围 全球的 动态的 是的 类型 布尔值 默认值 ON
指定是否根据工作负载动态调整缓冲池中脏页的 刷新率 。动态调整刷新率旨在避免 I/O 活动的突发。默认情况下启用此设置。有关详细信息,请参阅第 14.8.3.5 节,“配置缓冲池刷新”。有关一般 I/O 调整建议,请参阅 第 8.5.8 节,“优化 InnoDB 磁盘 I/O”。
InnoDB
-
命令行格式 --innodb-adaptive-flushing-lwm=#
系统变量 innodb_adaptive_flushing_lwm
范围 全球的 动态的 是的 类型 整数 默认值 10
最小值 0
最大值 70
定义表示启用自适应刷新的重做日志容量 百分比的低水位 线。有关详细信息,请参阅 第 14.8.3.5 节,“配置缓冲池刷新”。
-
命令行格式 --innodb-adaptive-hash-index[={OFF|ON}]
系统变量 innodb_adaptive_hash_index
范围 全球的 动态的 是的 类型 布尔值 默认值 ON
InnoDB
自适应哈希索引是启用还是禁用 。根据您的工作负载,可能需要动态启用或禁用 自适应哈希索引以提高查询性能。由于自适应哈希索引可能并非对所有工作负载都有用,因此在启用和禁用它的情况下使用实际工作负载进行基准测试。有关详细信息,请参阅 第 14.5.3 节,“自适应哈希索引”。默认情况下启用此变量。
SET GLOBAL
您可以使用语句修改此参数,而无需重新启动服务器。在运行时更改设置需要足够的权限来设置全局系统变量。请参阅第 5.1.8.1 节,“系统变量权限”。您也可以--skip-innodb-adaptive-hash-index
在服务器启动时使用它来禁用它。禁用自适应哈希索引会立即清空哈希表。当哈希表被清空时,正常操作可以继续,并且执行使用哈希表的查询直接访问索引 B 树。当重新启用自适应哈希索引时,哈希表会在正常操作期间再次填充。
innodb_adaptive_hash_index_parts
命令行格式 --innodb-adaptive-hash-index-parts=#
系统变量 innodb_adaptive_hash_index_parts
范围 全球的 动态的 不 类型 数字 默认值 8
最小值 1
最大值 512
分区自适应散列索引搜索系统。每个索引都绑定到一个特定的分区,每个分区由一个单独的锁存器保护。
在早期版本中,自适应散列索引搜索系统由单个锁存器 (
btr_search_latch
) 保护,这可能成为争论的焦点。随着innodb_adaptive_hash_index_parts
选项的引入,搜索系统默认分为 8 个部分。最大设置为 512。有关相关信息,请参阅 第 14.5.3 节,“自适应哈希索引”。
innodb_adaptive_max_sleep_delay
命令行格式 --innodb-adaptive-max-sleep-delay=#
系统变量 innodb_adaptive_max_sleep_delay
范围 全球的 动态的 是的 类型 整数 默认值 150000
最小值 0
最大值 1000000
单元 微秒 允许根据当前工作量
InnoDB
自动调整向上或向下的值 。innodb_thread_sleep_delay
任何非零值都可以自动动态调整innodb_thread_sleep_delay
值,直到选项中指定的最大值innodb_adaptive_max_sleep_delay
。该值表示微秒数。InnoDB
此选项在线程数超过 16 个的繁忙系统中很有用 。(实际上,它对于具有数百或数千个同时连接的 MySQL 系统最有价值。)有关详细信息,请参阅 第 14.8.5 节,“为 InnoDB 配置线程并发”。
-
命令行格式 --innodb-api-bk-commit-interval=#
系统变量 innodb_api_bk_commit_interval
范围 全球的 动态的 是的 类型 整数 默认值 5
最小值 1
最大值 1073741824
单元 秒 以秒 为单位自动提交使用
InnoDB
memcached接口的空闲连接的频率。有关更多信息,请参阅 第 14.21.5.4 节,“控制 InnoDB memcached 插件的事务行为”。 -
命令行格式 --innodb-api-disable-rowlock[={OFF|ON}]
系统变量 innodb_api_disable_rowlock
范围 全球的 动态的 不 类型 布尔值 默认值 OFF
InnoDB
使用此选项可在memcached 执行 DML 操作 时禁用行锁 。默认情况下,innodb_api_disable_rowlock
禁用,这意味着memcached 请求行锁get
和set
操作。innodb_api_disable_rowlock
启用时 , memcached请求表锁而不是行锁。innodb_api_disable_rowlock
不是动态的。它必须在 mysqld命令行上指定或输入到 MySQL 配置文件中。配置在安装插件时生效,这发生在 MySQL 服务器启动时。有关更多信息,请参阅 第 14.21.5.4 节,“控制 InnoDB memcached 插件的事务行为”。
-
命令行格式 --innodb-api-enable-binlog[={OFF|ON}]
系统变量 innodb_api_enable_binlog
范围 全球的 动态的 不 类型 布尔值 默认值 OFF
允许您将
InnoDB
memcached插件与 MySQL 二进制日志一起使用。有关更多信息,请参阅 启用 InnoDB memcached 二进制日志。 -
命令行格式 --innodb-api-enable-mdl[={OFF|ON}]
系统变量 innodb_api_enable_mdl
范围 全球的 动态的 不 类型 布尔值 默认值 OFF
InnoDB
锁定memcached插件 使用的表,使其无法 通过 SQL 接口被DDL删除或更改。有关更多信息,请参阅 第 14.21.5.4 节,“控制 InnoDB memcached 插件的事务行为”。 -
命令行格式 --innodb-api-trx-level=#
系统变量 innodb_api_trx_level
范围 全球的 动态的 是的 类型 整数 默认值 0
最小值 0
最大值 3
控制由memcached 接口处理的查询 的事务 隔离级别。熟悉的名字对应的常量是:
3 =
SERIALIZABLE
有关更多信息,请参阅 第 14.21.5.4 节,“控制 InnoDB memcached 插件的事务行为”。
-
命令行格式 --innodb-autoextend-increment=#
系统变量 innodb_autoextend_increment
范围 全球的 动态的 是的 类型 整数 默认值 64
最小值 1
最大值 1000
单元 兆字节 InnoDB
自动扩展系统表空间文件变满时 用于扩展其大小的增量大小(以兆字节为单位) 。默认值为 64。有关相关信息,请参阅 系统表空间数据文件配置和 调整系统表空间大小。该
innodb_autoextend_increment
设置不影响 file-per-table 表 空间文件或 通用表空间文件。无论设置如何,这些文件都会自动扩展innodb_autoextend_increment
。最初的扩展是少量的,之后以 4MB 的增量进行扩展。 -
命令行格式 --innodb-autoinc-lock-mode=#
系统变量 innodb_autoinc_lock_mode
范围 全球的 动态的 不 类型 整数 默认值 1
有效值 0
1
2
用于生成 自动增量 值 的锁定模式。允许的值为 0、1 或 2,分别表示传统、连续或交错。默认设置为 1(连续)。对于每种锁模式的特性,请参阅InnoDB AUTO_INCREMENT Lock Modes。
innodb_background_drop_list_empty
命令行格式 --innodb-background-drop-list-empty[={OFF|ON}]
介绍 5.7.10 系统变量 innodb_background_drop_list_empty
范围 全球的 动态的 是的 类型 布尔值 默认值 OFF
启用
innodb_background_drop_list_empty
调试选项有助于通过延迟表创建直到后台下拉列表为空来避免测试用例失败。例如,如果测试用例 A 将表t1
放在后台下拉列表中,则测试用例 B 会等到后台下拉列表为空后再创建表t1
。-
命令行格式 --innodb-buffer-pool-chunk-size=#
系统变量 innodb_buffer_pool_chunk_size
范围 全球的 动态的 不 类型 整数 默认值 134217728
最小值 1048576
最大值 innodb_buffer_pool_size / innodb_buffer_pool_instances
单元 字节 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
。调整发生在缓冲池初始化时。
重要的更改时应小心
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
,并且更改这些变量设置中的任何一个都需要重新启动服务器。有关详细信息,请参阅第 14.8.3.1 节,“配置 InnoDB 缓冲池大小”。
innodb_buffer_pool_dump_at_shutdown
命令行格式 --innodb-buffer-pool-dump-at-shutdown[={OFF|ON}]
系统变量 innodb_buffer_pool_dump_at_shutdown
范围 全球的 动态的 是的 类型 布尔值 默认值 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
。有关详细信息,请参阅 第 14.8.3.6 节,“保存和恢复缓冲池状态”。
-
命令行格式 --innodb-buffer-pool-dump-now[={OFF|ON}]
系统变量 innodb_buffer_pool_dump_now
范围 全球的 动态的 是的 类型 布尔值 默认值 OFF
立即在
InnoDB
缓冲池中缓存页面记录。通常与 结合使用innodb_buffer_pool_load_now
。启用
innodb_buffer_pool_dump_now
会触发记录操作但不会更改变量设置,变量设置始终保持为OFF
或0
。要在触发转储后查看缓冲池转储状态,请查询Innodb_buffer_pool_dump_status
变量。有关详细信息,请参阅 第 14.8.3.6 节,“保存和恢复缓冲池状态”。
-
命令行格式 --innodb-buffer-pool-dump-pct=#
系统变量 innodb_buffer_pool_dump_pct
范围 全球的 动态的 是的 类型 整数 默认值 25
最小值 1
最大值 100
指定每个缓冲池要读出和转储的最近使用页面的百分比。范围是 1 到 100。默认值是 25。例如,如果有 4 个缓冲池,每个缓冲池有 100 个页面,并且
innodb_buffer_pool_dump_pct
设置为 25,则转储每个缓冲池中最近使用的 25 个页面。默认值的更改 与 和
innodb_buffer_pool_dump_pct
的默认值更改一致 ,它们在 MySQL 5.7 中默认启用。innodb_buffer_pool_dump_at_shutdown
innodb_buffer_pool_load_at_startup
-
命令行格式 --innodb-buffer-pool-filename=file_name
系统变量 innodb_buffer_pool_filename
范围 全球的 动态的 是的 类型 文件名 默认值 ib_buffer_pool
指定包含由
innodb_buffer_pool_dump_at_shutdown
或 生成的表空间 ID 和页面 ID 列表的文件的名称innodb_buffer_pool_dump_now
。表空间 ID 和页面 ID 以以下格式保存:space, page_id
. 默认情况下,该文件已命名ib_buffer_pool
并位于InnoDB
数据目录中。必须指定相对于数据目录的非默认位置。可以在运行时使用
SET
语句指定文件名:SET GLOBAL innodb_buffer_pool_filename='file_name';
您还可以在启动时在启动字符串或 MySQL 配置文件中指定文件名。启动时指定文件名时,该文件必须存在,否则
InnoDB
返回启动错误,提示不存在该文件或目录。有关详细信息,请参阅 第 14.8.3.6 节,“保存和恢复缓冲池状态”。
-
命令行格式 --innodb-buffer-pool-instances=#
系统变量 innodb_buffer_pool_instances
范围 全球的 动态的 不 类型 整数 默认值(Windows,32 位平台) (autosized)
默认值(其他) 8 (or 1 if innodb_buffer_pool_size < 1GB)
最小值 1
最大值 64
InnoDB
缓冲池划分 的区域数。对于缓冲池在数 GB 范围内的系统,将缓冲池划分为单独的实例可以提高并发性,方法是减少不同线程读取和写入缓存页面时的争用。使用散列函数将存储在缓冲池中或从中读取的每个页面随机分配给缓冲池实例之一。每个缓冲池管理自己的空闲列表、 刷新列表、 LRU和连接到缓冲池的所有其他数据结构,并受其自己的缓冲池互斥锁保护。innodb_buffer_pool_size
此选项仅在设置为 1GB 或更大 时生效 。总缓冲池大小在所有缓冲池之间分配。为了获得最佳效率,请指定 和 的组合,innodb_buffer_pool_instances
以便innodb_buffer_pool_size
每个缓冲池实例至少为 1GB。32 位 Windows 系统上的默认值取决于 的值
innodb_buffer_pool_size
,如下所述:如果
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。有关相关信息,请参阅 第 14.8.3.1 节,“配置 InnoDB 缓冲池大小”。
-
命令行格式 --innodb-buffer-pool-load-abort[={OFF|ON}]
系统变量 innodb_buffer_pool_load_abort
范围 全球的 动态的 是的 类型 布尔值 默认值 OFF
中断由或 触发 的恢复
InnoDB
缓冲池内容的过程。innodb_buffer_pool_load_at_startup
innodb_buffer_pool_load_now
启用
innodb_buffer_pool_load_abort
会触发中止操作但不会更改变量设置,变量设置始终保持为OFF
或0
。要在触发中止操作后查看缓冲池负载状态,请查询Innodb_buffer_pool_load_status
变量。有关详细信息,请参阅 第 14.8.3.6 节,“保存和恢复缓冲池状态”。
innodb_buffer_pool_load_at_startup
命令行格式 --innodb-buffer-pool-load-at-startup[={OFF|ON}]
系统变量 innodb_buffer_pool_load_at_startup
范围 全球的 动态的 不 类型 布尔值 默认值 ON
指定在 MySQL 服务器启动时,
InnoDB
缓冲池通过加载它在较早时间保存的相同页面来自动预热。通常与 结合使用innodb_buffer_pool_dump_at_shutdown
。默认 情况下启用
innodb_buffer_pool_dump_at_shutdown
和innodb_buffer_pool_load_at_startup
。有关详细信息,请参阅 第 14.8.3.6 节,“保存和恢复缓冲池状态”。
-
命令行格式 --innodb-buffer-pool-load-now[={OFF|ON}]
系统变量 innodb_buffer_pool_load_now
范围 全球的 动态的 是的 类型 布尔值 默认值 OFF
通过加载数据页立即预热
InnoDB
缓冲池,而 无需等待服务器重新启动。在基准测试期间将缓存内存恢复到已知状态或准备好 MySQL 服务器在运行报告或维护查询后恢复其正常工作负载可能很有用。启用
innodb_buffer_pool_load_now
会触发加载操作但不会更改变量设置,变量设置始终保持为OFF
或0
。要在触发加载后查看缓冲池加载进度,请查询Innodb_buffer_pool_load_status
变量。有关详细信息,请参阅 第 14.8.3.6 节,“保存和恢复缓冲池状态”。
-
命令行格式 --innodb-buffer-pool-size=#
系统变量 innodb_buffer_pool_size
范围 全球的 动态的 是的 类型 整数 默认值 134217728
最小值 5242880
最大值(64 位平台) 2**64-1
最大值(32 位平台) 2**32-1
单元 字节 缓冲池 的字节大小 ,
InnoDB
缓存表和索引数据的内存区域。默认值为 134217728 字节 (128MB)。最大值取决于 CPU 架构;在 32 位系统上最大值为 4294967295 (2 32 -1),在 64 位系统上最大值为 18446744073709551615 (2 64 -1)。在 32 位系统上,CPU 体系结构和操作系统可能会施加比规定的最大值更低的实际最大大小。当缓冲池的大小大于 1GB 时,设置innodb_buffer_pool_instances
为大于 1 的值可以提高繁忙服务器上的可伸缩性。较大的缓冲池需要较少的磁盘 I/O 来多次访问相同的表数据。在专用数据库服务器上,您可以将缓冲池大小设置为机器物理内存大小的 80%。配置缓冲池大小时请注意以下潜在问题,并准备在必要时缩减缓冲池的大小。
对物理内存的竞争会导致操作系统中的分页。
InnoDB
为缓冲区和控制结构保留额外的内存,以便分配的总空间比指定的缓冲池大小大约大 10%。缓冲池的地址空间必须是连续的,这在具有加载到特定地址的 DLL 的 Windows 系统上可能是一个问题。
初始化缓冲池的时间大致与其大小成正比。在具有大型缓冲池的实例上,初始化时间可能很长。为了减少初始化周期,您可以在服务器关闭时保存缓冲池状态并在服务器启动时恢复它。请参阅第 14.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
status 变量报告在线缓冲池大小调整操作的状态。 有关详细信息,请参阅 第 14.8.3.1 节,“配置 InnoDB 缓冲池大小”。 -
命令行格式 --innodb-change-buffer-max-size=#
系统变量 innodb_change_buffer_max_size
范围 全球的 动态的 是的 类型 整数 默认值 25
最小值 0
最大值 50
InnoDB
更改缓冲区 的最大大小,以缓冲池总大小的百分比表示 。对于具有大量插入、更新和删除活动的 MySQL 服务器,您可以增加此值,或者对于具有用于报告的不变数据的 MySQL 服务器,可以减少此值。有关详细信息,请参阅第 14.5.2 节,“更改缓冲区”。有关一般 I/O 调整建议,请参阅第 8.5.8 节,“优化 InnoDB 磁盘 I/O”。 -
命令行格式 --innodb-change-buffering=value
系统变量 innodb_change_buffering
范围 全球的 动态的 是的 类型 枚举 默认值 all
有效值 none
inserts
deletes
changes
purges
all
是否
InnoDB
执行 更改缓冲,这是一种延迟对二级索引的写入操作的优化,以便可以按顺序执行 I/O 操作。下表描述了允许的值。表 14.19 innodb_change_buffering 的允许值
价值 描述 none
不要缓冲任何操作。 inserts
缓冲区插入操作。 deletes
缓冲区删除标记操作;严格来说,标记索引记录以供稍后在清除操作期间删除的写入。 changes
缓冲区插入和删除标记操作。 purges
缓冲在后台发生的物理删除操作。 all
默认值。缓冲区插入、删除标记操作和清除。 有关详细信息,请参阅 第 14.5.2 节,“更改缓冲区”。有关一般 I/O 调整建议,请参阅第 8.5.8 节,“优化 InnoDB 磁盘 I/O”。
-
命令行格式 --innodb-change-buffering-debug=#
系统变量 innodb_change_buffering_debug
范围 全球的 动态的 是的 类型 整数 默认值 0
最小值 0
最大值 2
InnoDB
为更改缓冲 设置调试标志。值为 1 会强制对更改缓冲区进行所有更改。值为 2 会导致合并时意外退出。默认值 0 表示未设置更改缓冲调试标志。此选项仅在使用 CMake选项编译调试支持时可用。WITH_DEBUG
-
命令行格式 --innodb-checksum-algorithm=value
系统变量 innodb_checksum_algorithm
范围 全球的 动态的 是的 类型 枚举 默认值 crc32
有效值 crc32
strict_crc32
innodb
strict_innodb
none
strict_none
指定如何生成和验证 存储在表空间的磁盘块中的校验和。 是 MySQL 5.7.7 的默认值。
InnoDB
crc32
innodb_checksum_algorithm
替换innodb_checksums
选项。为兼容 MySQL 5.7.6 提供了以下值:从 MySQL 5.7.7 开始,默认
innodb_checksum_algorithm
值为 crc32,innodb_checksums=ON
现在与innodb_checksum_algorithm=crc32
.innodb_checksums=OFF
仍然与innodb_checksum_algorithm=none
.innodb_checksums
为避免冲突,请从 MySQL 配置文件和启动脚本 中删除对的引用 。该值
innodb
与早期版本的 MySQL 向后兼容。该值crc32
使用一种更快的算法来计算每个修改块的校验和,并检查每个磁盘读取的校验和。它一次扫描 64 位块,比一次innodb
扫描 8 位块的校验和算法更快。该值none
在校验和字段中写入一个常量值,而不是根据块数据计算一个值。表空间中的块可以混合使用旧的、新的和无校验和的值,随着数据的修改而逐渐更新;一旦表空间中的块被修改为使用crc32
算法,关联的表不能被早期版本的 MySQL 读取。如果在表空间中遇到有效但不匹配的校验和值,则校验和算法的严格形式会报告错误。建议您仅在新实例中使用严格设置,以便首次设置表空间。严格设置稍微快一些,因为它们不需要在磁盘读取期间计算所有校验和值。
笔记在 MySQL 5.7.8 之前,严格模式设置 会在遇到 有效但不匹配的校验和时
innodb_checksum_algorithm
导致停止。在 MySQL 5.7.8 及更高版本中,仅打印一条错误消息,如果页面具有有效 的或 校验和,则该页面被接受为有效。InnoDB
innodb
crc32
none
none
下表显示了、innodb
和crc32
选项值与其严格对应值 之间的差异 。none
,innodb
, 并将crc32
指定类型的校验和值写入每个数据块,但为了兼容性,在读取操作期间验证块时接受其他校验和值。严格设置也接受有效的校验和值,但在遇到有效的不匹配校验和值时打印错误消息。InnoDB
如果一个实例中的所有数据文件都是在相同的innodb_checksum_algorithm
值 下创建的,则使用严格形式可以加快验证速度 。表 14.20 允许的 innodb_checksum_algorithm 值
价值 生成的校验和(写入时) 允许的校验和(读取时) 没有任何 一个常数。 none
、innodb
或生成的任何校验和crc32
。创新数据库 在软件中计算的校验和,使用来自 InnoDB
.none
、innodb
或生成的任何校验和crc32
。crc32 使用该 crc32
算法计算的校验和,可能通过硬件辅助完成。none
、innodb
或生成的任何校验和crc32
。严格无 一个常数 none
、innodb
或生成的任何校验和crc32
。InnoDB
如果遇到有效但不匹配的校验和,则打印一条错误消息。strict_innodb 在软件中计算的校验和,使用来自 InnoDB
.none
、innodb
或生成的任何校验和crc32
。InnoDB
如果遇到有效但不匹配的校验和,则打印一条错误消息。strict_crc32 使用该 crc32
算法计算的校验和,可能通过硬件辅助完成。none
、innodb
或生成的任何校验和crc32
。InnoDB
如果遇到有效但不匹配的校验和,则打印一条错误消息。高达 3.8.0 的MySQL Enterprise Backup 版本不支持备份使用 CRC32 校验和的表空间。 MySQL Enterprise Backup在 3.8.1 中添加了 CRC32 校验和支持,但有一些限制。有关详细信息,请参阅 MySQL Enterprise Backup 3.8.1 更改历史记录。
-
命令行格式 --innodb-checksums[={OFF|ON}]
弃用 是的 系统变量 innodb_checksums
范围 全球的 动态的 不 类型 布尔值 默认值 ON
InnoDB
可以对从磁盘读取的所有表空间页面使用 校验和验证,以确保对硬件故障或损坏的数据文件具有额外的容错能力。默认情况下启用此验证。在特殊情况下(例如运行基准测试时)可以使用禁用此安全功能--skip-innodb-checksums
。innodb_checksum_algorithm
您可以使用该选项 指定计算校验和的方法 。innodb_checksums
已弃用,替换为innodb_checksum_algorithm
.在 MySQL 5.7.7 之前,
innodb_checksums=ON
与innodb_checksum_algorithm=innodb
. 从 MySQL 5.7.7 开始,innodb_checksum_algorithm
默认值为crc32
,innodb_checksums=ON
与innodb_checksum_algorithm=crc32
.innodb_checksums=OFF
与 相同innodb_checksum_algorithm=none
。从配置文件和启动脚本中删除任何
innodb_checksums
选项以避免与innodb_checksum_algorithm
.innodb_checksums=OFF
自动设置innodb_checksum_algorithm=none
。innodb_checksums=ON
被 的任何其他设置忽略和覆盖innodb_checksum_algorithm
。 -
命令行格式 --innodb-cmp-per-index-enabled[={OFF|ON}]
系统变量 innodb_cmp_per_index_enabled
范围 全球的 动态的 是的 类型 布尔值 默认值 OFF
在表中启用与每个索引压缩相关的统计信息
INFORMATION_SCHEMA.INNODB_CMP_PER_INDEX
。由于收集这些统计数据的成本很高,因此在与InnoDB
压缩表相关的性能调整期间,仅在开发、测试或副本实例上启用此选项。有关详细信息,请参阅 第 24.4.7 节,“INFORMATION_SCHEMA INNODB_CMP_PER_INDEX 和 INNODB_CMP_PER_INDEX_RESET 表”和第 14.9.1.4 节,“在运行时监视 InnoDB 表压缩”。
-
命令行格式 --innodb-commit-concurrency=#
系统变量 innodb_commit_concurrency
范围 全球的 动态的 是的 类型 整数 默认值 0
最小值 0
最大值 1000
可以同时提交的线程 数。值 0(默认值)允许 同时提交 任意数量的事务。
的值
innodb_commit_concurrency
不能在运行时从零更改为非零,反之亦然。该值可以从一个非零值更改为另一个。 -
命令行格式 --innodb-compress-debug=value
系统变量 innodb_compress_debug
范围 全球的 动态的 是的 类型 枚举 默认值 none
有效值 none
zlib
lz4
lz4hc
使用指定的压缩算法压缩所有表,而不必
COMPRESSION
为每个表定义属性。此选项仅在使用 CMake选项编译调试支持时可用。WITH_DEBUG
有关相关信息,请参阅 第 14.9.2 节,“InnoDB 页面压缩”。
innodb_compression_failure_threshold_pct
命令行格式 --innodb-compression-failure-threshold-pct=#
系统变量 innodb_compression_failure_threshold_pct
范围 全球的 动态的 是的 类型 整数 默认值 5
最小值 0
最大值 100
定义表的压缩失败率阈值,以百分比表示,此时 MySQL 开始在压缩 页面内添加填充以避免昂贵的 压缩失败。当超过这个阈值时,MySQL 开始在每个新的压缩页面中留下额外的可用空间,动态地将可用空间量调整为由指定的页面大小的百分比
innodb_compression_pad_pct_max
。零值禁用监视压缩效率和动态调整填充量的机制。有关详细信息,请参阅 第 14.9.1.6 节,“OLTP 工作负载的压缩”。
-
命令行格式 --innodb-compression-level=#
系统变量 innodb_compression_level
范围 全球的 动态的 是的 类型 整数 默认值 6
最小值 0
最大值 9
指定用于
InnoDB
压缩表和索引的 zlib 压缩级别。较高的值可让您将更多数据放入存储设备,但代价是在压缩期间会占用更多 CPU 开销。较低的值可以让您在存储空间不重要时减少 CPU 开销,或者您预计数据不是特别可压缩。有关详细信息,请参阅 第 14.9.1.6 节,“OLTP 工作负载的压缩”。
innodb_compression_pad_pct_max
命令行格式 --innodb-compression-pad-pct-max=#
系统变量 innodb_compression_pad_pct_max
范围 全球的 动态的 是的 类型 整数 默认值 50
最小值 0
最大值 75
指定在每个压缩页 中可以保留为可用空间的最大百分比, 以便在更新压缩表或索引并且可能重新压缩数据时允许空间重新组织页面中的数据和修改日志。仅在
innodb_compression_failure_threshold_pct
设置为非零值且 压缩失败率超过截止点时适用。有关详细信息,请参阅 第 14.9.1.6 节,“OLTP 工作负载的压缩”。
-
命令行格式 --innodb-concurrency-tickets=#
系统变量 innodb_concurrency_tickets
范围 全球的 动态的 是的 类型 整数 默认值 5000
最小值 1
最大值 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
值的缺点是同时运行太多的大事务会使较小的事务在执行前等待更长的时间,从而使它们饿死。对于非零
innodb_thread_concurrency
值,您可能需要innodb_concurrency_tickets
向上或向下调整该值以找到较大和较小事务之间的最佳平衡。该SHOW ENGINE INNODB STATUS
报告显示当前通过队列的执行交易剩余的票数。该数据也可以从表的TRX_CONCURRENCY_TICKETS
列中 获得INFORMATION_SCHEMA.INNODB_TRX
。有关详细信息,请参阅 第 14.8.5 节,“为 InnoDB 配置线程并发”。
-
命令行格式 --innodb-data-file-path=file_name
系统变量 innodb_data_file_path
范围 全球的 动态的 不 类型 细绳 默认值 ibdata1:12M:autoextend
定义系统表空间数据文件的名称、大小和属性
InnoDB
。如果您没有为 指定值innodb_data_file_path
,则默认行为是创建一个略大于 12MB 的自动扩展数据文件,名为ibdata1
.数据文件规范的完整语法包括文件名、文件大小、
autoextend
属性和max
属性:file_name:file_size[:autoextend[:max:max_file_size]]
K
通过将,M
或 附加G
到大小值 ,以千字节、兆字节或千兆字节为单位指定文件大小。如果以千字节为单位指定数据文件大小,请以 1024 的倍数进行指定。否则,KB 值将四舍五入到最接近的兆字节 (MB) 边界。文件大小总和必须至少略大于 12MB。有关其他配置信息,请参阅 系统表空间数据文件配置。有关调整大小的说明,请参阅 调整系统表空间的大小。
-
命令行格式 --innodb-data-home-dir=dir_name
系统变量 innodb_data_home_dir
范围 全球的 动态的 不 类型 目录名称 InnoDB
系统表空间数据文件 目录路径的公共部分 。默认值为 MySQLdata
目录。设置与innodb_data_file_path
设置连接。如果将值指定为空字符串,则可以为 指定绝对路径innodb_data_file_path
。为 指定值时需要尾部斜杠
innodb_data_home_dir
。例如:[mysqld] innodb_data_home_dir = /path/to/myibdata/
此设置不影响 file-per-table 表空间的位置 。
有关相关信息,请参阅 第 14.8.1 节,“InnoDB 启动配置”。
-
命令行格式 --innodb-deadlock-detect[={OFF|ON}]
介绍 5.7.15 系统变量 innodb_deadlock_detect
范围 全球的 动态的 是的 类型 布尔值 默认值 ON
此选项用于禁用死锁检测。在高并发系统上,当大量线程等待同一个锁时,死锁检测会导致速度减慢。
innodb_lock_wait_timeout
有时,禁用死锁检测并依赖发生死锁时事务回滚 的设置可能更有效。有关相关信息,请参阅 第 14.7.5.2 节,“死锁检测”。
-
命令行格式 --innodb-default-row-format=value
系统变量 innodb_default_row_format
范围 全球的 动态的 是的 类型 枚举 默认值 DYNAMIC
有效值 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
。有关详细信息,请参阅 定义表的行格式。服务器创建的用于处理查询的内部
InnoDB
临时表使用DYNAMIC
行格式,而不管innodb_default_row_format
设置如何。 innodb_disable_sort_file_cache
命令行格式 --innodb-disable-sort-file-cache[={OFF|ON}]
系统变量 innodb_disable_sort_file_cache
范围 全球的 动态的 是的 类型 布尔值 默认值 OFF
为合并排序临时文件禁用操作系统文件系统缓存。效果是用相当于
O_DIRECT
.innodb_disable_resize_buffer_pool_debug
命令行格式 --innodb-disable-resize-buffer-pool-debug[={OFF|ON}]
系统变量 innodb_disable_resize_buffer_pool_debug
范围 全球的 动态的 是的 类型 布尔值 默认值 ON
禁用调整
InnoDB
缓冲池的大小。此选项仅在使用CMake选项编译调试支持时可用。WITH_DEBUG
-
命令行格式 --innodb-doublewrite[={OFF|ON}]
系统变量 innodb_doublewrite
范围 全球的 动态的 不 类型 布尔值 默认值 ON
启用时(默认),
InnoDB
将所有数据存储两次,首先是 双写缓冲区,然后是实际 数据文件。--skip-innodb-doublewrite
当需要最高性能而不是关心数据完整性或可能的故障时, 可以关闭此变量以 用于基准测试或案例。如果系统表空间数据文件(
ibdata*
files )位于支持原子写入的 Fusion-io 设备上,双写缓冲将自动禁用,并且 Fusion-io 原子写入用于所有数据文件。由于双写缓冲区设置是全局的,因此对于驻留在非 Fusion-io 硬件上的数据文件,双写缓冲区也被禁用。此功能仅在 Fusion-io 硬件上受支持,并且仅在 Linux 上为 Fusion-io NVMFS 启用。要充分利用此功能, 建议innodb_flush_method
设置O_DIRECT
为 。有关相关信息,请参阅 第 14.6.5 节,“双写缓冲区”。
-
命令行格式 --innodb-fast-shutdown=#
系统变量 innodb_fast_shutdown
范围 全球的 动态的 是的 类型 整数 默认值 1
有效值 0
1
2
InnoDB
关机模式 。如果该值为 0,InnoDB
则 在关闭之前执行慢速关闭、完全清除和更改缓冲区合并。如果值为 1(默认值),则InnoDB
在关机时跳过这些操作,这一过程称为 快速关机。如果值为 2,则InnoDB
刷新其日志并冷关闭,就好像 MySQL 崩溃了一样;没有提交的事务丢失,但 崩溃恢复 操作使下一次启动需要更长的时间。在仍有大量数据缓冲的极端情况下,缓慢关闭可能需要几分钟甚至几小时。在 MySQL 主要版本之间升级或降级之前使用慢关机技术,以便在升级过程更新文件格式时为所有数据文件做好充分准备。
在紧急情况或故障排除情况下使用
innodb_fast_shutdown=2
,以便在数据存在损坏风险时获得绝对最快的关闭。 innodb_fil_make_page_dirty_debug
命令行格式 --innodb-fil-make-page-dirty-debug=#
系统变量 innodb_fil_make_page_dirty_debug
范围 全球的 动态的 是的 类型 整数 默认值 0
最小值 0
最大值 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
只有在使用CMake选项编译调试支持时,该 选项才可用。WITH_DEBUG
-
命令行格式 --innodb-file-format=value
弃用 是的 系统变量 innodb_file_format
范围 全球的 动态的 是的 类型 细绳 默认值 Barracuda
有效值 Antelope
Barracuda
为file-per-table 表空间 启用
InnoDB
文件格式 。支持的文件格式是 和。 是原始 文件格式,支持 和 行格式。是较新的文件格式,它支持和 行格式。Antelope
Barracuda
Antelope
InnoDB
REDUNDANT
COMPACT
Barracuda
COMPRESSED
DYNAMIC
COMPRESSED
和行格式为表DYNAMIC
启用重要的存储功能 。InnoDB
请参阅 第 14.11 节,“InnoDB 行格式”。更改
innodb_file_format
设置不会影响现有InnoDB
表空间文件的文件格式。该
innodb_file_format
设置不适用于通用表空间,它支持所有行格式的表。请参阅 第 14.6.3.3 节,“通用表空间”。默认值在MySQL 5.7
innodb_file_format
中更改为。Barracuda
innodb_file_format
创建使用DYNAMIC
行格式的表时将忽略 该设置。无论 设置如何,使用行格式创建的表DYNAMIC
始终使用 文件格式。要使用行格式, 必须设置为.Barracuda
innodb_file_format
COMPRESSED
innodb_file_format
Barracuda
该
innodb_file_format
选项已弃用;希望在未来的版本中将其删除。该innodb_file_format
选项的目的是允许用户降级到 MySQL 早期版本的内置InnoDB
版本。现在,这些版本的 MySQL 已经达到其产品生命周期的终点,不再需要此选项提供的降级支持。有关更多信息,请参阅 第 14.10 节,“InnoDB 文件格式管理”。
-
命令行格式 --innodb-file-format-check[={OFF|ON}]
弃用 是的 系统变量 innodb_file_format_check
范围 全球的 动态的 不 类型 布尔值 默认值 ON
可以在服务器启动时将此变量设置为 1 或 0,以启用或禁用是否
InnoDB
检查 系统表空间中的文件格式标记 (例如,或 )。如果勾选tag高于当前版本支持的tag,则 报错 不启动。如果标签不高,则将 的值设置 为文件格式标签。Antelope
Barracuda
InnoDB
InnoDB
InnoDB
innodb_file_format_max
笔记尽管默认值有时显示为
ON
或OFF
,但始终使用数值 1 或 0 在配置文件或命令行字符串中打开或关闭此选项。有关详细信息,请参阅 第 14.10.2.1 节,“InnoDB 启动时的兼容性检查”。
该
innodb_file_format_check
选项与选项一起弃用innodb_file_format
。您应该期望在未来的版本中删除这两个选项。 -
命令行格式 --innodb-file-format-max=value
弃用 是的 系统变量 innodb_file_format_max
范围 全球的 动态的 是的 类型 细绳 默认值 Barracuda
有效值 Antelope
Barracuda
在服务器启动时,
InnoDB
将此变量的值设置为系统表空间中的文件格式标记 (例如,或 )。如果服务器创建或打开一个具有“高级”文件格式的表,它会将 的值设置 为该格式。Antelope
Barracuda
innodb_file_format_max
有关相关信息,请参阅 第 14.10 节,“InnoDB 文件格式管理”。
该
innodb_file_format_max
选项与选项一起弃用innodb_file_format
。您应该期望在未来的版本中删除这两个选项。 -
命令行格式 --innodb-file-per-table[={OFF|ON}]
系统变量 innodb_file_per_table
范围 全球的 动态的 是的 类型 布尔值 默认值 ON
启用时
innodb_file_per_table
,默认情况下在 file-per-table 表空间中创建表。禁用时,默认情况下在系统表空间中创建表。有关 file-per-table 表空间的信息,请参阅 第 14.6.3.2 节,“File-Per-Table 表空间”。有关InnoDB
系统表空间的信息,请参阅第 14.6.3.1 节,“系统表空间”。该
innodb_file_per_table
变量可以在运行时使用SET GLOBAL
语句配置,在启动时在命令行上指定,或在选项文件中指定。运行时的配置需要足够的权限来设置全局系统变量(请参阅第 5.1.8.1 节,“系统变量权限”)并立即影响所有连接的操作。当驻留在 file-per-table 表空间中的表被截断或删除时,释放的空间将返回给操作系统。截断或删除驻留在系统表空间中的表只会释放系统表空间中的空间。系统表空间中释放的空间可以再次用于
InnoDB
数据,但不会返回给操作系统,因为系统表空间数据文件永远不会缩小。启用时
innodb_file_per_table
,驻留在系统表空间中的表的表复制ALTER TABLE
操作隐式地在每个表文件表空间中重新创建表。为防止这种情况发生,请在对驻留在系统表空间中的表innodb_file_per_table
执行表复制操作之前禁用。ALTER TABLE
该
innodb_file_per-table
设置不影响临时表的创建。临时表是在临时表空间中创建的。请参阅 第 14.6.3.5 节,“临时表空间”。 -
命令行格式 --innodb-fill-factor=#
系统变量 innodb_fill_factor
范围 全球的 动态的 是的 类型 整数 默认值 100
最小值 10
最大值 100
InnoDB
在创建或重建索引时执行批量加载。这种创建索引的方法被称为“排序索引构建”。innodb_fill_factor
定义在排序索引构建期间填充的每个 B 树页面上的空间百分比,剩余空间保留用于未来的索引增长。例如,设置innodb_fill_factor
为 80 会在每个 B 树页面上保留 20% 的空间用于未来的索引增长。实际百分比可能会有所不同。该innodb_fill_factor
设置被解释为提示而不是硬限制。设置为 100 时,聚集索引页中有
innodb_fill_factor
1/16 的空间可用于将来的索引增长。innodb_fill_factor
适用于 B 树叶页和非叶页。它不适用于用于TEXT
或BLOB
条目的外部页面。有关详细信息,请参阅 第 14.6.2.3 节,“排序索引构建”。
-
命令行格式 --innodb-flush-log-at-timeout=#
系统变量 innodb_flush_log_at_timeout
范围 全球的 动态的 是的 类型 整数 默认值 1
最小值 1
最大值 2700
单元 秒 每秒写入并刷新日志
N
。innodb_flush_log_at_timeout
允许增加刷新之间的超时时间,以减少刷新并避免影响二进制日志组提交的性能。默认设置为innodb_flush_log_at_timeout
每秒一次。 innodb_flush_log_at_trx_commit
命令行格式 --innodb-flush-log-at-trx-commit=#
系统变量 innodb_flush_log_at_trx_commit
范围 全球的 动态的 是的 类型 枚举 默认值 1
有效值 0
1
2
控制提交操作的严格ACID合规性 与重新安排和批量完成提交相关 I/O 操作时可能实现的更高性能 之间的平衡 。您可以通过更改默认值来获得更好的性能,但是您可能会在崩溃中丢失事务。
完全符合 ACID 需要默认设置 1。日志在每次提交事务时写入并刷新到磁盘。
设置为 0 时,日志每秒写入并刷新到磁盘一次。尚未刷新日志的事务可能会在崩溃中丢失。
设置为 2 时,日志在每次事务提交后写入并每秒刷新到磁盘一次。尚未刷新日志的事务可能会在崩溃中丢失。
对于设置 0 和 2,不能 100% 保证每秒刷新一次。由于 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
.
有关对意外停止最具弹性的副本设置组合的信息,请参阅 第 16.3.2 节,“处理副本的意外停止”。
警告许多操作系统和一些磁盘硬件会欺骗刷新到磁盘的操作。他们可能会告诉 mysqld刷新已经发生,即使它没有发生。在这种情况下,即使使用推荐的设置也无法保证事务的持久性,在最坏的情况下,断电可能会损坏
InnoDB
数据。在 SCSI 磁盘控制器或磁盘本身中使用电池供电的磁盘缓存可以加快文件刷新速度,并使操作更安全。您还可以尝试禁用硬件缓存中的磁盘写入缓存。-
命令行格式 --innodb-flush-method=value
系统变量 innodb_flush_method
范围 全球的 动态的 不 类型 细绳 默认值 NULL
有效值 (Unix) fsync
O_DSYNC
littlesync
nosync
O_DIRECT
O_DIRECT_NO_FSYNC
有效值 (Windows) async_unbuffered
normal
unbuffered
定义用于将 数据刷新到
InnoDB
数据文件和日志文件的方法,这会影响 I/O 吞吐量。如果在类 Unix 系统上
innodb_flush_method
设置为,则默认使用该选项。如果 在 Windows 上 设置为 ,则默认使用该选项。NULL
fsync
innodb_flush_method
NULL
async_unbuffered
innodb_flush_method
类 Unix 系统 的选项包括:fsync
:InnoDB
使用fsync()
系统调用刷新数据和日志文件。fsync
是默认设置。O_DSYNC
:InnoDB
用于O_SYNC
打开和刷新日志文件,以及fsync()
刷新数据文件。InnoDB
不O_DSYNC
直接使用,因为它在许多 Unix 变体上都存在问题。littlesync
:该选项用于内部性能测试,目前不支持。使用风险自负。nosync
:该选项用于内部性能测试,目前不支持。使用风险自负。O_DIRECT
:InnoDB
使用O_DIRECT
(或directio()
在 Solaris 上)打开数据文件,并使用fsync()
刷新数据和日志文件。此选项在某些 GNU/Linux 版本、FreeBSD 和 Solaris 上可用。O_DIRECT_NO_FSYNC
: 在刷新 I/O 期间InnoDB
使用,但在每次写入操作后O_DIRECT
跳过 系统调用。fsync()
在 MySQL 5.7.25 之前,此设置不适合 XFS 和 EXT4 等文件系统,这些文件系统需要
fsync()
系统调用来同步文件系统元数据的更改。如果您不确定您的文件系统是否需要fsync()
系统调用来同步文件系统元数据更改,请O_DIRECT
改用。从 MySQL 5.7.25 开始,
fsync()
在创建新文件、增加文件大小和关闭文件后调用,以确保同步文件系统元数据更改。fsync()
每次写操作后仍然会跳过系统调用 。如果重做日志文件和数据文件驻留在不同的存储设备上,则可能会丢失数据,并且在数据文件写入从非电池供电的设备缓存中刷新之前会发生意外退出。如果您使用或打算将不同的存储设备用于重做日志文件和数据文件,并且您的数据文件驻留在具有非电池后备缓存的设备上,请
O_DIRECT
改用。
Windows 系统的
innodb_flush_method
选项包括:async_unbuffered
:InnoDB
使用 Windows 异步 I/O 和非缓冲 I/O。async_unbuffered
是 Windows 系统上的默认设置。不支持在 Windows 上的 4K 扇区硬盘驱动器上运行 MySQL 服务器
async_unbuffered
。解决方法是使用innodb_flush_method=normal
.normal
:InnoDB
使用模拟异步 I/O 和缓冲 I/O。unbuffered
:InnoDB
使用模拟异步 I/O 和非缓冲 I/O。
每个设置如何影响性能取决于硬件配置和工作负载。对您的特定配置进行基准测试,以确定要使用的设置,或者是否保留默认设置。检查 状态变量以查看每个设置
Innodb_data_fsyncs
的调用总数 。fsync()
工作负载中读写操作的混合会影响设置的执行方式。例如,在具有硬件 RAID 控制器和电池备份写缓存的系统上,O_DIRECT
可以帮助避免InnoDB
缓冲池和操作系统文件系统缓存之间的双重缓冲。在某些系统上InnoDB
数据和日志文件位于 SAN 上,这是默认值,或者对于主要包含语句O_DSYNC
的读取繁重的工作负载来说可能更快 。SELECT
始终使用反映您的生产环境的硬件和工作负载测试此参数。有关一般 I/O 调整建议,请参阅 第 8.5.8 节,“优化 InnoDB 磁盘 I/O”。 -
命令行格式 --innodb-flush-neighbors=#
系统变量 innodb_flush_neighbors
范围 全球的 动态的 是的 类型 枚举 默认值 1
有效值 0
1
2
指定从缓冲池中刷新页面是否也刷新相同 范围内的其他脏页。
InnoDB
设置为 0 将禁用
innodb_flush_neighbors
。相同范围内的脏页不会被刷新。默认设置 1 会刷新同一范围内的连续脏页。
设置为 2 会刷新相同范围内的脏页。
当表数据存储在传统 HDD存储设备上时, 与在不同时间刷新单个页面相比,在一次操作中刷新此类相邻页面可减少 I/O 开销(主要用于磁盘查找操作)。对于存储在 SSD上的表数据,寻道时间不是一个重要因素,您可以关闭此设置以分散写入操作。有关相关信息,请参阅 第 14.8.3.5 节,“配置缓冲池刷新”。
-
命令行格式 --innodb-flush-sync[={OFF|ON}]
系统变量 innodb_flush_sync
范围 全球的 动态的 是的 类型 布尔值 默认值 ON
默认情况下启用的
innodb_flush_sync
变量会导致 设置在检查点innodb_io_capacity
发生的 I/O 活动突发期间被忽略 。要遵守 设置定义的 I/O 速率,请禁用。innodb_io_capacity
innodb_flush_sync
有关配置
innodb_flush_sync
变量的信息,请参阅第 14.8.8 节,“配置 InnoDB I/O 容量”。 -
命令行格式 --innodb-flushing-avg-loops=#
系统变量 innodb_flushing_avg_loops
范围 全球的 动态的 是的 类型 整数 默认值 30
最小值 1
最大值 1000
保留先前计算的刷新状态快照的迭代次数
InnoDB
,控制 自适应刷新响应不断变化的 工作负载的速度。增加该值可使 刷新操作的速率随着工作负载的变化而平滑且逐渐变化。降低该值会使自适应刷新快速适应工作负载变化,如果工作负载突然增加和减少,这可能会导致刷新活动出现峰值。有关相关信息,请参阅 第 14.8.3.5 节,“配置缓冲池刷新”。
-
命令行格式 --innodb-force-load-corrupted[={OFF|ON}]
系统变量 innodb_force_load_corrupted
范围 全球的 动态的 不 类型 布尔值 默认值 OFF
允许
InnoDB
在启动时加载标记为已损坏的表。仅在故障排除期间使用,以恢复否则无法访问的数据。故障排除完成后,禁用此设置并重新启动服务器。 -
命令行格式 --innodb-force-recovery=#
系统变量 innodb_force_recovery
范围 全球的 动态的 不 类型 整数 默认值 0
最小值 0
最大值 6
崩溃恢复 模式,通常只在严重的故障排除情况下才会改变 。可能的值是从 0 到 6。有关这些值的含义和重要信息
innodb_force_recovery
,请参阅 第 14.22.2 节,“强制 InnoDB 恢复”。警告仅在紧急情况下将此变量设置为大于 0 的值,以便您可以启动
InnoDB
和转储表。作为一项安全措施,当大于 0 时,会InnoDB
阻止INSERT
、UPDATE
或DELETE
操作 。 设置为 4 或更大时,将 进入只读模式。innodb_force_recovery
innodb_force_recovery
InnoDB
这些限制可能会导致复制管理命令失败并出现错误,因为复制设置如
relay_log_info_repository=TABLE
和master_info_repository=TABLE
将信息存储在InnoDB
表中。 -
系统变量 innodb_ft_aux_table
范围 全球的 动态的 是的 类型 细绳 指定
InnoDB
包含FULLTEXT
索引的表的限定名称。此变量用于诊断目的,只能在运行时设置。例如: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
有关更多信息,请参阅 第 14.16.4 节,“InnoDB INFORMATION_SCHEMA FULLTEXT 索引表”。
-
命令行格式 --innodb-ft-cache-size=#
系统变量 innodb_ft_cache_size
范围 全球的 动态的 不 类型 整数 默认值 8000000
最小值 1600000
最大值 80000000
单元 字节 为搜索索引缓存分配的内存(以字节为单位)
InnoDB
FULLTEXT
,它在创建InnoDB
FULLTEXT
索引时将已解析的文档保存在内存中。索引插入和更新仅在innodb_ft_cache_size
达到大小限制时提交到磁盘。innodb_ft_cache_size
在每个表的基础上定义缓存大小。要为所有表设置全局限制,请参阅innodb_ft_total_cache_size
。有关更多信息,请参阅 InnoDB 全文索引缓存。
-
命令行格式 --innodb-ft-enable-diag-print[={OFF|ON}]
系统变量 innodb_ft_enable_diag_print
范围 全球的 动态的 是的 类型 布尔值 默认值 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
-
命令行格式 --innodb-ft-enable-stopword[={OFF|ON}]
系统变量 innodb_ft_enable_stopword
范围 全局,会话 动态的 是的 类型 布尔值 默认值 ON
指定 在创建索引时将一组停用词与索引相关联。
InnoDB
FULLTEXT
如果innodb_ft_user_stopword_table
设置了该选项,则停用词将从该表中获取。否则,如果innodb_ft_server_stopword_table
设置了该选项,则停用词将从该表中获取。否则,将使用一组内置的默认停用词。有关详细信息,请参阅 第 12.10.4 节,“全文停用词”。
-
命令行格式 --innodb-ft-max-token-size=#
系统变量 innodb_ft_max_token_size
范围 全球的 动态的 不 类型 整数 默认值 84
最小值 10
最大值 84
存储在
InnoDB
FULLTEXT
索引中的单词的最大字符长度。对该值设置限制可减少索引的大小,从而通过省略长关键字或不是真实单词且不太可能是搜索词的任意字母集合来加快查询速度。有关详细信息,请参阅 第 12.10.6 节,“微调 MySQL 全文搜索”。
-
命令行格式 --innodb-ft-min-token-size=#
系统变量 innodb_ft_min_token_size
范围 全球的 动态的 不 类型 整数 默认值 3
最小值 0
最大值 16
存储在
InnoDB
FULLTEXT
索引中的单词的最小长度。增加这个值会减少索引的大小,从而通过省略在搜索上下文中不太可能重要的常用词(例如英语单词“ a ”和“ to ” )来加快查询速度。对于使用 CJK(中文、日语、韩语)字符集的内容,指定值 1。有关详细信息,请参阅 第 12.10.6 节,“微调 MySQL 全文搜索”。
-
命令行格式 --innodb-ft-num-word-optimize=#
系统变量 innodb_ft_num_word_optimize
范围 全球的 动态的 是的 类型 整数 默认值 2000
最小值 1000
最大值 10000
在索引的每个
OPTIMIZE TABLE
操作 期间要处理的单词数 。InnoDB
FULLTEXT
由于对包含全文搜索索引的表进行批量插入或更新操作可能需要大量索引维护以合并所有更改,因此您可能会执行一系列OPTIMIZE TABLE
语句,每个语句都从上一个停止的地方开始。有关详细信息,请参阅 第 12.10.6 节,“微调 MySQL 全文搜索”。
-
命令行格式 --innodb-ft-result-cache-limit=#
系统变量 innodb_ft_result_cache_limit
范围 全球的 动态的 是的 类型 整数 默认值 2000000000
最小值 1000000
最大值 2**32-1
单元 字节 InnoDB
每个全文搜索查询或每个线程的全文搜索查询结果缓存限制(以字节为单位定义) 。中间和最终InnoDB
的全文搜索查询结果在内存中处理。用于innodb_ft_result_cache_limit
对全文搜索查询结果缓存设置大小限制,以避免在非常大InnoDB
的全文搜索查询结果(例如数百万或数亿行)的情况下消耗过多的内存。处理全文搜索查询时,会根据需要分配内存。如果达到结果缓存大小限制,则会返回一个错误,表明查询超出了最大允许内存。innodb_ft_result_cache_limit
所有平台类型和位大小 的最大值 为 2**32-1。 innodb_ft_server_stopword_table
命令行格式 --innodb-ft-server-stopword-table=db_name/table_name
系统变量 innodb_ft_server_stopword_table
范围 全球的 动态的 是的 类型 细绳 默认值 NULL
此选项用于为所有表 指定您自己的
InnoDB
FULLTEXT
索引停用词列表。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
表,包含一个VARCHAR
名为 的列value
。有关详细信息,请参阅 第 12.10.4 节,“全文停用词”。
-
命令行格式 --innodb-ft-sort-pll-degree=#
系统变量 innodb_ft_sort_pll_degree
范围 全球的 动态的 不 类型 整数 默认值 2
最小值 1
最大值 32
InnoDB
FULLTEXT
构建搜索索引时 并行使用的线程数,用于对索引中的文本进行索引和标记化。有关相关信息,请参阅 第 14.6.2.4 节,“InnoDB 全文索引”和
innodb_sort_buffer_size
。 -
命令行格式 --innodb-ft-total-cache-size=#
系统变量 innodb_ft_total_cache_size
范围 全球的 动态的 不 类型 整数 默认值 640000000
最小值 32000000
最大值 1600000000
单元 字节 InnoDB
为所有表的全文搜索索引缓存 分配的总内存(以字节为单位) 。创建大量表,每个表都有一个FULLTEXT
搜索索引,可能会消耗很大一部分可用内存。innodb_ft_total_cache_size
为所有全文搜索索引定义一个全局内存限制,以帮助避免过多的内存消耗。如果索引操作达到全局限制,则会触发强制同步。有关更多信息,请参阅 InnoDB 全文索引缓存。
-
命令行格式 --innodb-ft-user-stopword-table=db_name/table_name
系统变量 innodb_ft_user_stopword_table
范围 全局,会话 动态的 是的 类型 细绳 默认值 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
表,包含一个VARCHAR
名为 的列value
。有关详细信息,请参阅 第 12.10.4 节,“全文停用词”。
-
命令行格式 --innodb-io-capacity=#
系统变量 innodb_io_capacity
范围 全球的 动态的 是的 类型 整数 默认值 200
最小值 100
最大值(64 位平台) 2**64-1
最大值(32 位平台) 2**32-1
该
innodb_io_capacity
变量定义后台任务可用的每秒 I/O 操作数 (IOPS)InnoDB
,例如从缓冲池刷新 页面和从更改缓冲区合并数据 。有关配置
innodb_io_capacity
变量的信息,请参阅第 14.8.8 节,“配置 InnoDB I/O 容量”。 -
命令行格式 --innodb-io-capacity-max=#
系统变量 innodb_io_capacity_max
范围 全球的 动态的 是的 类型 整数 默认值 see description
最小值 100
最大值(32 位平台) 2**32-1
最大值(Unix,64 位平台) 2**64-1
最大值(Windows,64 位平台) 2**32-1
如果刷新活动落后,
InnoDB
可以更积极地刷新,每秒 I/O 操作 (IOPS) 的速率高于innodb_io_capacity
变量定义的速率。该变量定义了在这种情况下后台任务innodb_io_capacity_max
执行的最大 IOPS 数 。InnoDB
有关配置
innodb_io_capacity_max
变量的信息,请参阅 第 14.8.8 节,“配置 InnoDB I/O 容量”。 -
命令行格式 --innodb-large-prefix[={OFF|ON}]
弃用 是的 系统变量 innodb_large_prefix
范围 全球的 动态的 是的 类型 布尔值 默认值 ON
启用此选项后,对于使用或 行格式的
InnoDB
表, 允许使用超过 767 字节(最多 3072 字节)的索引键前缀 。有关各种设置下与索引键前缀关联的最大值,请参阅第 14.23 节,“InnoDB 限制”。DYNAMIC
COMPRESSED
对于使用
REDUNDANT
或COMPACT
行格式的表,此选项不影响允许的索引键前缀长度。innodb_large_prefix
在 MySQL 5.7 中默认启用。此更改与 的默认值更改一致, 在 MySQL 5.7 中默认innodb_file_format
设置为Barracuda
。这些默认值更改一起允许在使用DYNAMIC
或COMPRESSED
行格式时创建更大的索引键前缀。如果任一选项设置为非默认值,则大于 767 字节的索引键前缀将被静默截断。innodb_large_prefix
已弃用;希望在未来的版本中将其删除。 引入是为了禁用大索引键前缀,以便与不支持大索引键前缀innodb_large_prefix
的早期版本兼容 。InnoDB
innodb_limit_optimistic_insert_debug
命令行格式 --innodb-limit-optimistic-insert-debug=#
系统变量 innodb_limit_optimistic_insert_debug
范围 全球的 动态的 是的 类型 整数 默认值 0
最小值 0
最大值 2**32-1
限制每个 B 树页面的记录数。默认值 0 表示不施加限制。此选项仅在使用 CMake选项编译调试支持时可用。
WITH_DEBUG
-
命令行格式 --innodb-lock-wait-timeout=#
系统变量 innodb_lock_wait_timeout
范围 全局,会话 动态的 是的 类型 整数 默认值 50
最小值 1
最大值 1073741824
单元 秒 InnoDB
事务在放弃之前等待行锁 的时间长度(以秒为单位)。默认值为 50 秒。试图访问被另一个InnoDB
事务锁定的行的事务在发出以下错误之前最多等待这么多秒来对该行进行写访问:ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
当发生锁等待超时时, 回滚当前语句(而不是整个事务)。要使整个事务回滚,请使用该
--innodb-rollback-on-timeout
选项启动服务器。另见第 14.22.4 节,“InnoDB 错误处理”。对于高度交互的应用程序或OLTP系统, 您可以降低此值,以快速显示用户反馈或将更新放入队列中以供稍后处理。您可以为长时间运行的后端操作增加此值,例如数据仓库中等待其他大型插入或更新操作完成的转换步骤。
innodb_lock_wait_timeout
仅适用于InnoDB
行锁。内部不会发生MySQL 表锁InnoDB
,并且此超时不适用于等待表锁。锁定等待超时值在启用(默认)时 不适用于 死锁,因为它 会立即检测到死锁并回滚其中一个死锁事务。禁用时,依赖 于 发生死锁时的事务回滚。请参阅 第 14.7.5.2 节,“死锁检测”。
innodb_deadlock_detect
InnoDB
innodb_deadlock_detect
InnoDB
innodb_lock_wait_timeout
innodb_lock_wait_timeout
可以在运行时使用SET GLOBAL
orSET SESSION
语句设置。更改GLOBAL
设置需要足够的权限来设置全局系统变量(请参阅 第 5.1.8.1 节,“系统变量权限”)并影响随后连接的所有客户端的操作。任何客户端都可以更改 的SESSION
设置innodb_lock_wait_timeout
,这只会影响该客户端。 innodb_locks_unsafe_for_binlog
命令行格式 --innodb-locks-unsafe-for-binlog[={OFF|ON}]
弃用 是的 系统变量 innodb_locks_unsafe_for_binlog
范围 全球的 动态的 不 类型 布尔值 默认值 OFF
此变量影响如何
InnoDB
使用 间隙锁定进行搜索和索引扫描。innodb_locks_unsafe_for_binlog
已弃用;希望在未来的 MySQL 版本中将其删除。通常,
InnoDB
使用一种称为 next-key locking 的算法,该算法结合了 index-row locking 和 gap locking。InnoDB
执行行级锁定的方式是,当它搜索或扫描表索引时,它会在遇到的索引记录上设置共享或排他锁。因此,行级锁实际上是索引记录锁。此外,索引记录上的 next-key 锁也会影响索引记录之前的间隙。也就是说,下一个键锁是索引记录锁加上索引记录之前的间隙上的间隙锁。如果一个会话记录了共享锁或排他锁R
在一个索引中,另一个会话不能R
在索引顺序之前的空隙中插入新的索引记录。请参阅 第 14.7.1 节,“InnoDB 锁定”。默认情况下,值为
innodb_locks_unsafe_for_binlog
0(禁用),这意味着间隙锁定已启用:InnoDB
使用下一键锁进行搜索和索引扫描。要启用该变量,请将其设置为 1。这会导致间隙锁定被禁用:InnoDB
仅使用索引记录锁进行搜索和索引扫描。启用
innodb_locks_unsafe_for_binlog
不会禁用间隙锁定用于外键约束检查或重复键检查。启用的效果
innodb_locks_unsafe_for_binlog
与将事务隔离级别设置为相同READ COMMITTED
,但以下情况除外:启用
innodb_locks_unsafe_for_binlog
是一个全局设置,会影响所有会话,而隔离级别可以为所有会话全局设置,也可以为每个会话单独设置。innodb_locks_unsafe_for_binlog
只能在服务器启动时设置,而隔离级别可以在启动时设置或在运行时更改。
READ COMMITTED
因此提供比 . 更精细和更灵活的控制innodb_locks_unsafe_for_binlog
。有关隔离级别对间隙锁定的影响的更多信息,请参阅 第 14.7.2.1 节,“事务隔离级别”。启用
innodb_locks_unsafe_for_binlog
可能会导致幻象问题,因为在禁用间隙锁定时其他会话可以将新行插入间隙。假设表的id
列上有一个索引,child
并且您想要读取并锁定表中标识符值大于 100 的所有行,目的是稍后更新所选行中的某些列:SELECT * FROM child WHERE id > 100 FOR UPDATE;
查询从第一个
id
大于 100 的记录开始扫描索引。如果在该范围内的索引记录上设置的锁没有锁定在间隙中进行的插入,则另一个会话可以将新行插入到表中。因此,如果您要在同SELECT
一个事务中再次执行相同的操作,您会在查询返回的结果集中看到一个新行。这也意味着如果新项目被添加到数据库中,InnoDB
不保证可序列化。因此,如果innodb_locks_unsafe_for_binlog
启用,InnoDB
最多保证隔离级别READ COMMITTED
. (仍然保证冲突可串行化。)有关幻影的更多信息,请参阅 第 14.7.4 节,“幻影行”。启用
innodb_locks_unsafe_for_binlog
有额外的效果:考虑以下示例,从该表开始:
CREATE TABLE t (a INT NOT NULL, b INT) ENGINE = InnoDB; INSERT INTO t VALUES (1,2),(2,3),(3,2),(4,3),(5,2); COMMIT;
在这种情况下,表没有索引,因此搜索和索引扫描使用隐藏的聚集索引进行记录锁定(请参阅 第 14.6.2.1 节,“聚集索引和二级索引”)。
假设一个客户端
UPDATE
使用这些语句执行:SET autocommit = 0; UPDATE t SET b = 5 WHERE b = 3;
还假设第二个客户端
UPDATE
通过在第一个客户端之后执行这些语句来执行:SET autocommit = 0; UPDATE t SET b = 4 WHERE b = 2;
在
InnoDB
执行eachUPDATE
时,先为每一行获取一个独占锁,然后再判断是否修改。如果InnoDB
不修改行并innodb_locks_unsafe_for_binlog
启用,则释放锁。否则,InnoDB
保留锁直到事务结束。这会影响事务处理,如下所示。如果
innodb_locks_unsafe_for_binlog
被禁用,第一个UPDATE
获取 x 锁并且不释放它们中的任何一个:x-lock(1,2); retain x-lock x-lock(2,3); update(2,3) to (2,5); retain x-lock x-lock(3,2); retain x-lock x-lock(4,3); update(4,3) to (4,5); retain x-lock x-lock(5,2); retain x-lock
第二
UPDATE
个在尝试获取任何锁时立即阻塞(因为第一个更新保留了所有行上的锁),并且在第一个UPDATE
提交或回滚之前不会继续:x-lock(1,2); block and wait for first UPDATE to commit or roll back
如果
innodb_locks_unsafe_for_binlog
启用,第一个UPDATE
获取 x 锁并释放那些它不修改的行:x-lock(1,2); unlock(1,2) x-lock(2,3); update(2,3) to (2,5); retain x-lock x-lock(3,2); unlock(3,2) x-lock(4,3); update(4,3) to (4,5); retain x-lock x-lock(5,2); unlock(5,2)
对于第二个
UPDATE
,InnoDB
执行 “半一致”读取,将每行的最新提交版本返回给 MySQL,以便 MySQL 可以确定该行是否符合以下WHERE
条件UPDATE
:x-lock(1,2); update(1,2) to (1,4); retain x-lock x-lock(2,3); unlock(2,3) x-lock(3,2); update(3,2) to (3,4); retain x-lock x-lock(4,3); unlock(4,3) x-lock(5,2); update(5,2) to (5,4); retain x-lock
-
命令行格式 --innodb-log-buffer-size=#
系统变量 innodb_log_buffer_size
范围 全球的 动态的 不 类型 整数 默认值 16777216
最小值 1048576
最大值 4294967295
InnoDB
用于写入磁盘上的日志文件 的缓冲区的大小(以字节为单位) 。随着 32KB 和 64KB 值的引入,默认值从 8MB 更改为 16MBinnodb_page_size
。大型日志缓冲区 使大型 事务无需在事务提交之前将日志写入磁盘即可运行。因此,如果您有更新、插入或删除许多行的事务,那么增大日志缓冲区可以节省磁盘 I/O。有关相关信息,请参阅 内存配置和 第 8.5.4 节,“优化 InnoDB 重做日志记录”. 有关一般 I/O 调整建议,请参阅第 8.5.8 节,“优化 InnoDB 磁盘 I/O”。 -
命令行格式 --innodb-log-checkpoint-now[={OFF|ON}]
系统变量 innodb_log_checkpoint_now
范围 全球的 动态的 是的 类型 布尔值 默认值 OFF
启用此调试选项以强制
InnoDB
写入检查点。此选项仅在使用 CMake选项编译调试支持时可用。WITH_DEBUG
-
命令行格式 --innodb-log-checksums[={OFF|ON}]
系统变量 innodb_log_checksums
范围 全球的 动态的 是的 类型 布尔值 默认值 ON
启用或禁用重做日志页面的校验和。
innodb_log_checksums=ON
为重做日志页启用CRC-32C
校验和算法。禁用时innodb_log_checksums
,重做日志页校验和字段的内容将被忽略。永远不会禁用重做日志标题页和重做日志检查点页上的校验和。
-
命令行格式 --innodb-log-compressed-pages[={OFF|ON}]
系统变量 innodb_log_compressed_pages
范围 全球的 动态的 是的 类型 布尔值 默认值 ON
指定是否将 重新压缩 页面的图像写入 重做日志。当对压缩数据进行更改时,可能会发生重新压缩。
innodb_log_compressed_pages
zlib
默认情况下启用,以防止在恢复期间使用不同版本的压缩算法 时可能发生的损坏。如果您确定zlib
版本不会更改,则可以禁用innodb_log_compressed_pages
以减少修改压缩数据的工作负载的重做日志生成。要衡量启用或禁用的效果
innodb_log_compressed_pages
,请比较相同工作负载下两种设置的重做日志生成。测量重做日志生成的选项包括观察输出部分中 的Log sequence number
(LSN) ,或监视 写入重做日志文件的字节数的状态。LOG
SHOW ENGINE INNODB STATUS
Innodb_os_log_written
有关相关信息,请参阅 第 14.9.1.6 节,“OLTP 工作负载的压缩”。
-
命令行格式 --innodb-log-file-size=#
系统变量 innodb_log_file_size
范围 全球的 动态的 不 类型 整数 默认值 50331648
最小值 (≥ 5.7.11) 4194304
最小值(≤ 5.7.10) 1048576
最大值 512GB / innodb_log_files_in_group
单元 字节 日志组中每个日志文件的 大小(以字节为单位)。日志文件 ( * ) 的组合大小不能超过略小于 512GB 的最大值。例如,一对 255 GB 的日志文件接近限制但未超过限制。默认值为 48MB。
innodb_log_file_size
innodb_log_files_in_group
通常,日志文件的组合大小应该足够大,以便服务器可以消除工作负载活动中的高峰和低谷,这通常意味着有足够的重做日志空间来处理一个多小时的写入活动。值越大,缓冲池中需要的检查点刷新活动越少,从而节省磁盘 I/O。较大的日志文件也会使崩溃恢复变慢。
在 MySQL 5.7.11 中,最小值
innodb_log_file_size
从 1MB 增加到 4MB。有关相关信息,请参阅 重做日志文件配置。有关一般 I/O 调整建议,请参阅 第 8.5.8 节,“优化 InnoDB 磁盘 I/O”。
-
命令行格式 --innodb-log-files-in-group=#
系统变量 innodb_log_files_in_group
范围 全球的 动态的 不 类型 整数 默认值 2
最小值 2
最大值 100
日志组 中 的日志文件数。 以循环方式写入文件。默认(推荐)值为 2。文件的位置由 指定 。日志文件 ( * )的组合大小最大可达 512GB。
InnoDB
innodb_log_group_home_dir
innodb_log_file_size
innodb_log_files_in_group
有关相关信息,请参阅 重做日志文件配置。
-
命令行格式 --innodb-log-group-home-dir=dir_name
系统变量 innodb_log_group_home_dir
范围 全球的 动态的 不 类型 目录名称 InnoDB
重做日志文件 的目录路径,其编号由 指定innodb_log_files_in_group
。如果不指定任何InnoDB
日志变量,则默认 在 MySQL 数据目录中创建两个名为ib_logfile0
和 的文件。ib_logfile1
日志文件大小由innodb_log_file_size
系统变量给出。有关相关信息,请参阅 重做日志文件配置。
-
命令行格式 --innodb-log-write-ahead-size=#
系统变量 innodb_log_write_ahead_size
范围 全球的 动态的 是的 类型 整数 默认值 8192
最小值 512 (log file block size)
最大值 Equal to innodb_page_size
单元 字节 定义重做日志的预写块大小,以字节为单位。为避免“写时读”,设置
innodb_log_write_ahead_size
为与操作系统或文件系统缓存块大小相匹配。默认设置为 8192 字节。当由于重做日志的预写块大小与操作系统或文件系统缓存块大小不匹配而导致重做日志块未完全缓存到操作系统或文件系统时,会发生写时读。的有效值为 日志文件块大小 (2 n )
innodb_log_write_ahead_size
的倍数。最小值为 日志文件块大小 (512)。指定最小值时不会发生预写。最大值等于该 值。如果您为其指定的值 大于该 值,则该 设置将被截断为该 值。InnoDB
InnoDB
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
由于一次写入多个块, 将值设置得太高可能会对日志文件写入的性能产生轻微影响。有关相关信息,请参阅 第 8.5.4 节,“优化 InnoDB 重做日志记录”。
-
命令行格式 --innodb-lru-scan-depth=#
系统变量 innodb_lru_scan_depth
范围 全球的 动态的 是的 类型 整数 默认值 1024
最小值 100
最大值(64 位平台) 2**64-1
最大值(32 位平台) 2**32-1
影响缓冲池刷新操作 的算法和试探法的参数。性能专家主要对调整 I/O 密集型工作负载感兴趣。它为每个缓冲池实例指定页面清理器线程扫描缓冲池 LRU 页面列表的多远以查找要刷新的脏页面。这是每秒执行一次的后台操作。
InnoDB
小于默认值的设置通常适用于大多数工作负载。远高于必要值的值可能会影响性能。只有在典型工作负载下有备用 I/O 容量时,才考虑增加该值。相反,如果写入密集型工作负载使您的 I/O 容量饱和,请降低该值,尤其是在大型缓冲池的情况下。
调整时
innodb_lru_scan_depth
,从低值开始并向上配置设置,目标是很少看到零空闲页面。此外,innodb_lru_scan_depth
在更改缓冲池实例数时考虑进行调整,因为innodb_lru_scan_depth
*innodb_buffer_pool_instances
定义了页面清理器线程每秒执行的工作量。有关相关信息,请参阅 第 14.8.3.5 节,“配置缓冲池刷新”。有关一般 I/O 调整建议,请参阅第 8.5.8 节,“优化 InnoDB 磁盘 I/O”。
-
命令行格式 --innodb-max-dirty-pages-pct=#
系统变量 innodb_max_dirty_pages_pct
范围 全球的 动态的 是的 类型 数字 默认值 75
最小值 0
最大值 99.99
InnoDB
尝试 从缓冲池中刷新数据,以 使脏页的百分比不超过此值。默认值为 75。该
innodb_max_dirty_pages_pct
设置建立了冲洗活动的目标。它不影响冲洗速度。有关管理刷新率的信息,请参阅 第 14.8.3.5 节,“配置缓冲池刷新”。有关相关信息,请参阅 第 14.8.3.5 节,“配置缓冲池刷新”。有关一般 I/O 调整建议,请参阅第 8.5.8 节,“优化 InnoDB 磁盘 I/O”。
innodb_max_dirty_pages_pct_lwm
命令行格式 --innodb-max-dirty-pages-pct-lwm=#
系统变量 innodb_max_dirty_pages_pct_lwm
范围 全球的 动态的 是的 类型 数字 默认值 0
最小值 0
最大值 99.99
定义一个低水位线,表示启用预刷新的 脏页百分比,以控制脏页比率。默认值 0 会完全禁用预刷新行为。配置值应始终低于该
innodb_max_dirty_pages_pct
值。有关详细信息,请参阅 第 14.8.3.5 节,“配置缓冲池刷新”。-
命令行格式 --innodb-max-purge-lag=#
系统变量 innodb_max_purge_lag
范围 全球的 动态的 是的 类型 整数 默认值 0
最小值 0
最大值 4294967295
定义所需的最大清除滞后。如果超过此值,则会对 、 和 操作施加延迟
INSERT
,UPDATE
以便DELETE
有时间进行清除。默认值为 0,这意味着没有最大清除滞后且没有延迟。有关详细信息,请参阅 第 14.8.10 节,“清除配置”。
-
命令行格式 --innodb-max-purge-lag-delay=#
系统变量 innodb_max_purge_lag_delay
范围 全球的 动态的 是的 类型 整数 默认值 0
最小值 0
最大值 10000000
单元 毫秒 innodb_max_purge_lag
指定超过阈值 时施加的延迟的最大延迟(以微秒为单位 )。指定innodb_max_purge_lag_delay
值是通过公式计算的延迟时间的上限innodb_max_purge_lag
。有关详细信息,请参阅 第 14.8.10 节,“清除配置”。
-
命令行格式 --innodb-max-undo-log-size=#
系统变量 innodb_max_undo_log_size
范围 全球的 动态的 是的 类型 整数 默认值 1073741824
最小值 10485760
最大值 2**64-1
单元 字节 定义撤消表空间的阈值大小。如果撤消表空间超过阈值,则可以在
innodb_undo_log_truncate
启用时将其标记为截断。默认值为 1073741824 字节 (1024 MiB)。有关详细信息,请参阅 截断撤消表空间。
innodb_merge_threshold_set_all_debug
命令行格式 --innodb-merge-threshold-set-all-debug=#
系统变量 innodb_merge_threshold_set_all_debug
范围 全球的 动态的 是的 类型 整数 默认值 50
最小值 1
最大值 50
为索引页定义一个页面已满百分比值,该值覆盖
MERGE_THRESHOLD
当前在字典缓存中的所有索引的当前设置。此选项仅在使用CMake选项编译调试支持时可用。有关相关信息,请参阅 第 14.8.12 节,“为索引页配置合并阈值”。WITH_DEBUG
-
命令行格式 --innodb-monitor-disable={counter|module|pattern|all}
系统变量 innodb_monitor_disable
范围 全球的 动态的 是的 类型 细绳 此变量充当开关,禁用
InnoDB
指标计数器。可以使用该INFORMATION_SCHEMA.INNODB_METRICS
表查询计数器数据。有关使用信息,请参阅 第 14.16.6 节,“InnoDB INFORMATION_SCHEMA 指标表”。innodb_monitor_disable='latch'
禁用 的统计信息收集SHOW ENGINE INNODB MUTEX
。有关详细信息,请参阅 第 13.7.5.15 节,“SHOW ENGINE 语句”。 -
命令行格式 --innodb-monitor-enable={counter|module|pattern|all}
系统变量 innodb_monitor_enable
范围 全球的 动态的 是的 类型 细绳 此变量充当开关,启用
InnoDB
指标计数器。可以使用该INFORMATION_SCHEMA.INNODB_METRICS
表查询计数器数据。有关使用信息,请参阅 第 14.16.6 节,“InnoDB INFORMATION_SCHEMA 指标表”。innodb_monitor_enable='latch'
为 启用统计信息收集SHOW ENGINE INNODB MUTEX
。有关详细信息,请参阅 第 13.7.5.15 节,“SHOW ENGINE 语句”。 -
命令行格式 --innodb-monitor-reset={counter|module|pattern|all}
系统变量 innodb_monitor_reset
范围 全球的 动态的 是的 类型 枚举 默认值 NULL
有效值 counter
module
pattern
all
此变量充当开关,将
InnoDB
指标计数器的计数值重置 为零。可以使用该INFORMATION_SCHEMA.INNODB_METRICS
表查询计数器数据。有关使用信息,请参阅 第 14.16.6 节,“InnoDB INFORMATION_SCHEMA 指标表”。innodb_monitor_reset='latch'
重置 报告的统计数据SHOW ENGINE INNODB MUTEX
。有关详细信息,请参阅 第 13.7.5.15 节,“SHOW ENGINE 语句”。 -
命令行格式 --innodb-monitor-reset-all={counter|module|pattern|all}
系统变量 innodb_monitor_reset_all
范围 全球的 动态的 是的 类型 枚举 默认值 NULL
有效值 counter
module
pattern
all
此变量充当开关,重置
InnoDB
指标计数器的所有值(最小值、最大值等) 。可以使用该INFORMATION_SCHEMA.INNODB_METRICS
表查询计数器数据。有关使用信息,请参阅 第 14.16.6 节,“InnoDB INFORMATION_SCHEMA 指标表”。 -
命令行格式 --innodb-numa-interleave[={OFF|ON}]
系统变量 innodb_numa_interleave
范围 全球的 动态的 不 类型 布尔值 默认值 OFF
InnoDB
为缓冲池 的分配启用 NUMA 交错内存策略。启用时innodb_numa_interleave
,NUMA 内存策略设置为MPOL_INTERLEAVE
用于 mysqld进程。分配缓冲池后InnoDB
,NUMA 内存策略设置回MPOL_DEFAULT
。要使该innodb_numa_interleave
选项可用,必须在支持 NUMA 的 Linux 系统上编译 MySQL。从 MySQL 5.7.17 开始,CMake
WITH_NUMA
根据当前平台是否NUMA
支持设置默认 值。有关详细信息,请参阅 第 2.9.7 节,“MySQL 源配置选项”。 -
命令行格式 --innodb-old-blocks-pct=#
系统变量 innodb_old_blocks_pct
范围 全球的 动态的 是的 类型 整数 默认值 37
最小值 5
最大值 95
指定用于旧块子列表的
InnoDB
缓冲池 的近似百分比 。值的范围是 5 到 95。默认值为 37(即池的 3/8)。常与 结合使用 。innodb_old_blocks_time
有关详细信息,请参阅 第 14.8.3.3 节,“使缓冲池具有抗扫描性”。有关缓冲池管理、 LRU算法和 驱逐策略的信息,请参阅 第 14.5.1 节,“缓冲池”。
-
命令行格式 --innodb-old-blocks-time=#
系统变量 innodb_old_blocks_time
范围 全球的 动态的 是的 类型 整数 默认值 1000
最小值 0
最大值 2**32-1
单元 毫秒 非零值可防止 缓冲池被仅在短时间内引用的数据填充,例如在全表扫描期间。增加此值可以更好地防止全表扫描干扰缓冲池中缓存的数据。
指定插入旧子列表的块在第一次访问后必须保留多长时间才能移动到新子列表。如果该值为 0,则插入旧子列表的块在第一次访问时立即移动到新子列表,无论插入后多久发生访问。如果该值大于 0,块将保留在旧子列表中,直到在第一次访问后至少那么多毫秒发生访问。例如,值为 1000 会导致块在第一次访问后在旧子列表中停留 1 秒,然后才有资格移动到新子列表。
默认值为 1000。
此变量通常与 结合使用
innodb_old_blocks_pct
。有关详细信息,请参阅 第 14.8.3.3 节,“使缓冲池具有抗扫描性”。有关缓冲池管理、 LRU算法和 驱逐策略的信息,请参阅 第 14.5.1 节,“缓冲池”。 innodb_online_alter_log_max_size
命令行格式 --innodb-online-alter-log-max-size=#
系统变量 innodb_online_alter_log_max_size
范围 全球的 动态的 是的 类型 整数 默认值 134217728
最小值 65536
最大值 2**64-1
单元 字节 指定在表的联机 DDL操作 期间使用的临时日志文件大小的上限(以字节为单位)
InnoDB
。每个正在创建的索引或正在更改的表都有一个这样的日志文件。此日志文件存储在 DDL 操作期间在表中插入、更新或删除的数据。临时日志文件在需要时扩展 的值innodb_sort_buffer_size
,直到 指定的最大值innodb_online_alter_log_max_size
。如果临时日志文件超过大小上限,ALTER TABLE
操作失败,所有未提交的并发 DML 操作都将回滚。因此,此选项的较大值允许在联机 DDL 操作期间发生更多 DML,但也会延长 DDL 操作结束时表被锁定以应用日志中的数据的时间段。-
命令行格式 --innodb-open-files=#
系统变量 innodb_open_files
范围 全球的 动态的 不 类型 整数 默认值 -1
(表示自动调整大小;不要分配此文字值)最小值 10
最大值 2147483647
指定
InnoDB
一次可以打开的最大文件数。最小值为 10。如果innodb_file_per_table
禁用,则默认值为 300;否则,默认值为 300 或table_open_cache
设置,以较高者为准。 -
命令行格式 --innodb-optimize-fulltext-only[={OFF|ON}]
系统变量 innodb_optimize_fulltext_only
范围 全球的 动态的 是的 类型 布尔值 默认值 OFF
改变对表的
OPTIMIZE TABLE
操作方式。InnoDB
旨在在 具有索引 的InnoDB
表的 维护操作期间临时启用。FULLTEXT
默认情况下,
OPTIMIZE TABLE
重组表的 聚集索引中的数据。启用该选项时, 跳过表数据的重组,而是处理索引OPTIMIZE TABLE
的新增、删除和更新的令牌数据 。InnoDB
FULLTEXT
有关更多信息,请参阅优化 InnoDB 全文索引。 -
命令行格式 --innodb-page-cleaners=#
系统变量 innodb_page_cleaners
范围 全球的 动态的 不 类型 整数 默认值 4
最小值 1
最大值 64
从缓冲池实例中清除脏页的页面清理器线程数。页面清理器线程执行刷新列表和 LRU 刷新。MySQL 5.6 中引入了一个单页清理线程,以从
InnoDB
主线程卸载缓冲池刷新工作。在 MySQL 5.7 中,InnoDB
提供了对多个页面清理器线程的支持。值 1 保持 MySQL 5.7 之前的配置,其中有一个页面清理器线程。当有多个页面清理器线程时,每个缓冲池实例的缓冲池刷新任务被分派给空闲的页面清理器线程。这innodb_page_cleaners
在 MySQL 5.7 中,默认值从 1 更改为 4。如果页面清理器线程的数量超过缓冲池实例的数量,innodb_page_cleaners
则自动设置为与 相同的值innodb_buffer_pool_instances
。如果在将脏页从缓冲池实例刷新到数据文件时您的工作负载受写 IO 限制,并且如果您的系统硬件有可用容量,则增加页面清理器线程的数量可能有助于提高写 IO 吞吐量。
多线程页面清理器支持扩展到 MySQL 5.7 中的关闭和恢复阶段。
setpriority()
系统调用在支持它的 Linux 平台上使用,并且 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中配置mysqld执行用户授权
/etc/security/limits.conf
。例如,如果mysqld在用户下运行 ,您可以通过将这些行添加到来mysql
授权 用户:mysql
/etc/security/limits.conf
mysql hard nice -20 mysql soft nice -20
对于 systemd 管理的系统,同样可以通过
LimitNICE=-20
在本地化的 systemd 配置文件中指定来实现。例如,创建一个名为override.conf
in 的文件/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 配置文件的更多信息,请参阅 为 MySQL 配置 systemd。
授权mysqld执行用户后,使用cat命令验证mysqld进程 的配置
Nice
限制 :$> cat /proc/mysqld_pid/limits | grep nice Max nice priority 18446744073709551596 18446744073709551596
-
命令行格式 --innodb-page-size=#
系统变量 innodb_page_size
范围 全球的 动态的 不 类型 枚举 默认值 16384
有效值 4096
8192
16384
32768
65536
指定表空间的页面大小 。可以字节或千字节为单位指定值。例如,16 KB 的页面大小值可以指定为 16384、16KB 或 16k。
InnoDB
innodb_page_size
只能在初始化 MySQL 实例之前配置,之后不能更改。如果未指定值,则使用默认页面大小初始化实例。请参阅 第 14.8.1 节,“InnoDB 启动配置”。MySQL 5.7 中添加了对 32KB 和 64KB 页面大小的支持。对于 32KB 和 64KB 页面大小,最大行长度约为 16000 字节。 设置为 32KB 或 64KB
ROW_FORMAT=COMPRESSED
时不支持 。innodb_page_size
对于innodb_page_size=32k
,扩展区大小为 2MB。对于innodb_page_size=64KB
,扩展区大小为 4MB。innodb_log_buffer_size
使用 32KB 或 64KB 页面大小时,应至少设置为 16M(默认值)。默认的 16KB 页面大小或更大适用于范围广泛的工作负载,特别是涉及表扫描的查询和涉及批量更新的 DML 操作。对于涉及许多小写入的OLTP工作负载,较小的页面大小可能更有效, 当单个页面包含许多行时,争用可能成为一个问题。较小的页面对于通常使用较小块大小的SSD存储设备也可能很有效 。使
InnoDB
页面大小接近存储设备块大小可以最大限度地减少重写到磁盘的未更改数据量。第一个系统表空间数据文件 (
ibdata1
) 的最小文件大小因innodb_page_size
值而异。有关详细信息,请参阅innodb_data_file_path
选项说明。使用特定
InnoDB
页面大小的 MySQL 实例不能使用来自使用不同页面大小的实例的数据文件或日志文件。有关一般 I/O 调整建议,请参阅 第 8.5.8 节,“优化 InnoDB 磁盘 I/O”。
-
命令行格式 --innodb-print-all-deadlocks[={OFF|ON}]
系统变量 innodb_print_all_deadlocks
范围 全球的 动态的 是的 类型 布尔值 默认值 OFF
启用此选项后,有关用户事务中所有 死锁的 信息
InnoDB
将记录在mysqld
错误日志中。SHOW ENGINE INNODB STATUS
否则,您只能使用该命令查看有关最后一个死锁的信息。偶尔的InnoDB
死锁不一定是问题,因为InnoDB
立即检测条件并自动回滚其中一个事务。如果应用程序没有适当的错误处理逻辑来检测回滚并重试其操作,您可以使用此选项来解决死锁发生的原因。大量的死锁可能表明需要重组为多个表发出 DML或SELECT ... FOR UPDATE
语句的事务,以便每个事务以相同的顺序访问表,从而避免死锁情况。有关相关信息,请参阅 第 14.7.5 节,“InnoDB 中的死锁”。
-
命令行格式 --innodb-purge-batch-size=#
系统变量 innodb_purge_batch_size
范围 全球的 动态的 是的 类型 整数 默认值 300
最小值 1
最大值 5000
定义从历史列表 中清除一批分析和处理的撤消日志页数 。在多线程清除配置中,协调器清除线程除以
innodb_purge_batch_size
该innodb_purge_threads
页数并将其分配给每个清除线程。该innodb_purge_batch_size
变量还定义了在通过撤消日志每 128 次迭代后清除释放的撤消日志页数。该
innodb_purge_batch_size
选项旨在结合innodb_purge_threads
设置进行高级性能调整。大多数用户不需要更改innodb_purge_batch_size
其默认值。有关相关信息,请参阅 第 14.8.10 节,“清除配置”。
-
命令行格式 --innodb-purge-threads=#
系统变量 innodb_purge_threads
范围 全球的 动态的 不 类型 整数 默认值 4
最小值 1
最大值 32
专用于
InnoDB
清除操作的后台线程数。增加该值会创建额外的清除线程,这可以提高 对多个表执行 DML操作的系统的效率。有关相关信息,请参阅 第 14.8.10 节,“清除配置”。
innodb_purge_rseg_truncate_frequency
命令行格式 --innodb-purge-rseg-truncate-frequency=#
系统变量 innodb_purge_rseg_truncate_frequency
范围 全球的 动态的 是的 类型 整数 默认值 128
最小值 1
最大值 128
根据调用清除的次数定义清除系统释放回滚段的频率。在释放回滚段之前,无法截断撤消表空间。通常,清除系统每调用清除 128 次就会释放一次回滚段。默认值为 128。减小此值会增加清除线程释放回滚段的频率。
innodb_purge_rseg_truncate_frequency
旨在与 一起使用innodb_undo_log_truncate
。有关详细信息,请参阅 截断撤消表空间。-
命令行格式 --innodb-random-read-ahead[={OFF|ON}]
系统变量 innodb_random_read_ahead
范围 全球的 动态的 是的 类型 布尔值 默认值 OFF
启用用于优化I/O 的随机 预读技术。
InnoDB
有关不同类型预读请求的性能注意事项的详细信息,请参阅 第 14.8.3.4 节,“配置 InnoDB 缓冲池预取(预读)”。有关一般 I/O 调整建议,请参阅 第 8.5.8 节,“优化 InnoDB 磁盘 I/O”。
-
命令行格式 --innodb-read-ahead-threshold=#
系统变量 innodb_read_ahead_threshold
范围 全球的 动态的 是的 类型 整数 默认值 56
最小值 0
最大值 64
控制用于将页面预取到 缓冲 池中 的线性 预读的灵敏度。如果 从一个范围(64 页)中至少 顺序 读取页面,它会启动对整个后续范围的异步读取。允许的值范围是 0 到 64。值 0 禁用预读。对于默认值 56, 必须从一个盘区连续读取至少 56 页才能启动对后续盘区的异步读取。
InnoDB
InnoDB
innodb_read_ahead_threshold
InnoDB
了解通过预读机制读取了多少页,以及其中有多少页在未访问的情况下从缓冲池中逐出,在微调
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
并显示在输出BUFFER POOL AND MEMORY
部分。SHOW ENGINE INNODB STATUS
有关更多信息,请参阅 第 14.8.3.4 节,“配置 InnoDB 缓冲池预取(预读)”。有关一般 I/O 调整建议,请参阅 第 8.5.8 节,“优化 InnoDB 磁盘 I/O”。
-
命令行格式 --innodb-read-io-threads=#
系统变量 innodb_read_io_threads
范围 全球的 动态的 不 类型 整数 默认值 4
最小值 1
最大值 64
中读取操作的 I/O 线程数
InnoDB
。其对应的写线程是innodb_write_io_threads
. 有关详细信息,请参阅 第 14.8.6 节,“配置后台 InnoDB I/O 线程的数量”。有关一般 I/O 调整建议,请参阅 第 8.5.8 节,“优化 InnoDB 磁盘 I/O”。笔记innodb_read_io_threads
在 Linux 系统上, 使用innodb_write_io_threads
、 和 Linux 设置的 默认设置运行多个 MySQL 服务器(通常超过 12 个)aio-max-nr
可能会超出系统限制。理想情况下,增加aio-max-nr
设置;作为解决方法,您可以减少一个或两个 MySQL 变量的设置。 -
命令行格式 --innodb-read-only[={OFF|ON}]
系统变量 innodb_read_only
范围 全球的 动态的 不 类型 布尔值 默认值 OFF
InnoDB
以只读模式 启动。用于在只读介质上分发数据库应用程序或数据集。也可以用在数据仓库中,在多个实例之间共享同一个数据目录。有关更多信息,请参阅第 14.8.2 节,“为只读操作配置 InnoDB”。 -
命令行格式 --innodb-replication-delay=#
系统变量 innodb_replication_delay
范围 全球的 动态的 是的 类型 整数 默认值 0
最小值 0
最大值 4294967295
单元 毫秒 innodb_thread_concurrency
如果达到 副本服务器上的复制线程延迟(以毫秒为单位 )。 -
命令行格式 --innodb-rollback-on-timeout[={OFF|ON}]
系统变量 innodb_rollback_on_timeout
范围 全球的 动态的 不 类型 布尔值 默认值 OFF
InnoDB
默认情况下只回滚事务超时的最后一条语句。如果--innodb-rollback-on-timeout
指定,事务超时会导致InnoDB
中止并回滚整个事务。有关更多信息,请参阅 第 14.22.4 节,“InnoDB 错误处理”。
-
命令行格式 --innodb-rollback-segments=#
系统变量 innodb_rollback_segments
范围 全球的 动态的 是的 类型 整数 默认值 128
最小值 1
最大值 128
定义 用于生成撤消记录的事务的回滚段数。
InnoDB
每个回滚段支持的事务数取决于InnoDB
页面大小和分配给每个事务的撤消日志数。有关详细信息,请参阅 第 14.6.7 节,“撤消日志”。1个回滚段总是分配给系统表空间,32个回滚段保留给临时表使用,驻留在临时表空间(
ibtmp1
)中。要分配额外的回滚段,innodb_rollback_segments
必须设置为大于 33 的值。如果配置单独的撤消表空间,则系统表空间中的回滚段将变为非活动状态。当
innodb_rollback_segments
设置为32或更少时,InnoDB
将一个回滚段分配给系统表空间,将32个分配给临时表空间。当
innodb_rollback_segments
设置为大于 32 的值时,InnoDB
将一个回滚段分配给系统表空间,将 32 分配给临时表空间,并将额外的回滚段分配给撤消表空间(如果存在)。如果不存在撤消表空间,则会将额外的回滚段分配给系统表空间。尽管您可以增加或减少 所使用的回滚段
InnoDB
数,但系统中实际存在的回滚段数永远不会减少。因此,您可以从较低的值开始并逐渐增加它以避免分配不需要的回滚段。默认值和innodb_rollback_segments
最大值为 128。有关相关信息,请参阅 第 14.3 节,“InnoDB 多版本控制”。有关配置单独的撤消表空间的信息,请参阅 第 14.6.3.4 节,“撤消表空间”。
innodb_saved_page_number_debug
命令行格式 --innodb-saved-page-number-debug=#
系统变量 innodb_saved_page_number_debug
范围 全球的 动态的 是的 类型 整数 默认值 0
最小值 0
最大值 2**23-1
保存页码。设置该
innodb_fil_make_page_dirty_debug
选项会弄脏由 定义的页面innodb_saved_page_number_debug
。innodb_saved_page_number_debug
只有在使用CMake选项编译调试支持时,该 选项才可用。WITH_DEBUG
-
命令行格式 --innodb-sort-buffer-size=#
系统变量 innodb_sort_buffer_size
范围 全球的 动态的 不 类型 整数 默认值 1048576
最小值 65536
最大值 67108864
单元 字节 该变量定义:
创建或重建二级索引的在线 DDL 操作的排序缓冲区大小。
在线DDL操作 记录并发DML时临时日志文件的扩展量 ,以及临时日志文件读缓冲区和写缓冲区的大小。
有关相关信息,请参阅 第 14.13.3 节,“在线 DDL 空间要求”。
-
命令行格式 --innodb-spin-wait-delay=#
系统变量 innodb_spin_wait_delay
范围 全球的 动态的 是的 类型 整数 默认值 6
最小值 0
最大值(64 位平台) 2**64-1
最大值(32 位平台) 2**32-1
自旋锁 轮询之间的最大延迟 。该机制的底层实现因硬件和操作系统的组合而异,因此延迟不对应固定的时间间隔。有关详细信息,请参阅 第 14.8.9 节,“配置自旋锁轮询”。
-
命令行格式 --innodb-stats-auto-recalc[={OFF|ON}]
系统变量 innodb_stats_auto_recalc
范围 全球的 动态的 是的 类型 布尔值 默认值 ON
导致在表中的数据发生实质性更改后
InnoDB
自动重新计算 持久统计信息。阈值是表中行的 10%。此设置适用于innodb_stats_persistent
启用该选项时创建的表。也可以通过STATS_PERSISTENT=1
在CREATE TABLE
orALTER TABLE
语句中指定来配置自动统计重新计算。用于生成统计数据的采样数据量由innodb_stats_persistent_sample_pages
变量控制。有关详细信息,请参阅 第 14.8.11.1 节,“配置持久优化器统计参数”。
innodb_stats_include_delete_marked
命令行格式 --innodb-stats-include-delete-marked[={OFF|ON}]
介绍 5.7.17 系统变量 innodb_stats_include_delete_marked
范围 全球的 动态的 是的 类型 布尔值 默认值 OFF
默认情况下,
InnoDB
在计算统计信息时读取未提交的数据。在从表中删除行的未提交事务的情况下,InnoDB
在计算行估计和索引统计信息时排除被删除标记的记录,这可能导致同时使用表操作的其他事务的非最佳执行计划以外的事务隔离级别READ UNCOMMITTED
。为避免这种情况,innodb_stats_include_delete_marked
可以启用以确保InnoDB
在计算持久优化器统计信息时包括删除标记的记录。innodb_stats_include_delete_marked
启用时, 在ANALYZE TABLE
重新计算统计信息时考虑删除标记的记录。innodb_stats_include_delete_marked
是影响所有InnoDB
表的全局设置。它仅适用于持久优化器统计信息。有关相关信息,请参阅 第 14.8.11.1 节,“配置持久优化器统计参数”。
-
命令行格式 --innodb-stats-method=value
系统变量 innodb_stats_method
范围 全球的 动态的 是的 类型 枚举 默认值 nulls_equal
有效值 nulls_equal
nulls_unequal
nulls_ignored
服务器
NULL
在收集有关表 的索引值分布的 统计InnoDB
信息时如何处理值。允许的值为nulls_equal
、nulls_unequal
和nulls_ignored
。对于nulls_equal
,所有NULL
索引值都被认为是相等的,并形成一个大小等于值数的NULL
值组。对于nulls_unequal
,NULL
值被认为是不相等的,并且每个NULL
值形成一个大小为 1 的不同值组。对于nulls_ignored
,NULL
值被忽略。用于生成表统计信息的方法会影响优化器如何为查询执行选择索引,如第 8.3.7 节,“InnoDB 和 MyISAM 索引统计信息收集”中所述。
-
命令行格式 --innodb-stats-on-metadata[={OFF|ON}]
系统变量 innodb_stats_on_metadata
范围 全球的 动态的 是的 类型 布尔值 默认值 OFF
此选项仅在优化器 统计信息配置为非持久性时适用。
innodb_stats_persistent
禁用时或使用创建或更改单个表 时,优化器统计信息不会持久保存到磁盘STATS_PERSISTENT=0
。有关详细信息,请参阅第 14.8.11.2 节,“配置非持久性优化器统计参数”。innodb_stats_on_metadata
启用时, 在元数据语句(例如访问 或 表时)InnoDB
更新非持久 统计信息。(这些更新类似于 发生的情况 。)禁用时, 不会在这些操作期间更新统计信息。禁用该设置可以提高具有大量表或索引的模式的访问速度。它还可以提高 涉及 表 的查询的执行计划的稳定性。SHOW TABLE STATUS
INFORMATION_SCHEMA.TABLES
INFORMATION_SCHEMA.STATISTICS
ANALYZE TABLE
InnoDB
InnoDB
要更改设置,请发出语句,其中是or (或 or )。更改设置需要足够的权限来设置全局系统变量(请参阅第 5.1.8.1 节,“系统变量权限”)并立即影响所有连接的操作。
SET GLOBAL innodb_stats_on_metadata=
mode
mode
ON
OFF
1
0
-
命令行格式 --innodb-stats-persistent[={OFF|ON}]
系统变量 innodb_stats_persistent
范围 全球的 动态的 是的 类型 布尔值 默认值 ON
指定
InnoDB
索引统计信息是否持久保存到磁盘。否则,可能会频繁地重新计算统计信息,从而导致 查询执行计划发生变化。创建表时,此设置与每个表一起存储。您可以innodb_stats_persistent
在创建表之前在全局级别设置,或者使用 and 语句的STATS_PERSISTENT
子句 覆盖系统范围的设置并为单个表配置持久统计信息。CREATE TABLE
ALTER TABLE
有关详细信息,请参阅 第 14.8.11.1 节,“配置持久优化器统计参数”。
innodb_stats_persistent_sample_pages
命令行格式 --innodb-stats-persistent-sample-pages=#
系统变量 innodb_stats_persistent_sample_pages
范围 全球的 动态的 是的 类型 整数 默认值 20
最小值 1
最大值 18446744073709551615
估计索引列的基数和其他 统计信息时要采样 的索引页数,例如由 计算的那些 。增加该值可以提高索引统计的准确性,这可以改进查询执行计划,但代价是在执行表时增加 I/ O 。有关详细信息,请参阅第 14.8.11.1 节,“配置持久优化器统计参数”。
ANALYZE TABLE
ANALYZE TABLE
InnoDB
笔记为 设置高值
innodb_stats_persistent_sample_pages
可能会导致ANALYZE TABLE
执行时间过长。要估计访问的数据库页面数ANALYZE TABLE
,请参阅 第 14.8.11.3 节,“估计 InnoDB 表的分析表复杂性”。innodb_stats_persistent_sample_pages
仅在innodb_stats_persistent
为表启用时适用;当innodb_stats_persistent
被禁用时,innodb_stats_transient_sample_pages
改为应用。-
命令行格式 --innodb-stats-sample-pages=#
弃用 是的 系统变量 innodb_stats_sample_pages
范围 全球的 动态的 是的 类型 整数 默认值 8
最小值 1
最大值 2**64-1
已弃用。改用
innodb_stats_transient_sample_pages
。 innodb_stats_transient_sample_pages
命令行格式 --innodb-stats-transient-sample-pages=#
系统变量 innodb_stats_transient_sample_pages
范围 全球的 动态的 是的 类型 整数 默认值 8
最小值 1
最大值 18446744073709551615
估计索引列的基数和其他 统计信息时要采样 的索引页数,例如由 计算的那些 。默认值为 8。增加该值可以提高索引统计的准确性,这可以改进 查询执行计划,但代价是在打开 表或重新计算统计时增加 I/O。有关详细信息,请参阅 第 14.8.11.2 节,“配置非持久性优化器统计参数”。
ANALYZE TABLE
InnoDB
笔记为 设置高值
innodb_stats_transient_sample_pages
可能会导致ANALYZE TABLE
执行时间过长。要估计访问的数据库页面数ANALYZE TABLE
,请参阅 第 14.8.11.3 节,“估计 InnoDB 表的分析表复杂性”。innodb_stats_transient_sample_pages
仅在innodb_stats_persistent
对表禁用时适用;innodb_stats_persistent
启用 时 ,innodb_stats_persistent_sample_pages
改为应用。代替innodb_stats_sample_pages
. 有关详细信息,请参阅 第 14.8.11.2 节,“配置非持久性优化器统计参数”。-
命令行格式 --innodb-status-output[={OFF|ON}]
系统变量 innodb_status_output
范围 全球的 动态的 是的 类型 布尔值 默认值 OFF
启用或禁用标准
InnoDB
监视器的定期输出。还与 结合使用innodb_status_output_locks
以启用或禁用InnoDB
锁定监视器的定期输出。有关详细信息,请参阅第 14.18.2 节,“启用 InnoDB 监视器”。 -
命令行格式 --innodb-status-output-locks[={OFF|ON}]
系统变量 innodb_status_output_locks
范围 全球的 动态的 是的 类型 布尔值 默认值 OFF
启用或禁用
InnoDB
锁定监视器。启用后,InnoDB
锁定监视器会在SHOW ENGINE INNODB STATUS
输出中打印有关锁定的附加信息,并在定期输出中打印到 MySQL 错误日志。InnoDB
锁定监视器的定期输出作为标准InnoDB
监视器输出的一部分打印。InnoDB
因此,必须为 Lock Monitor 启用标准MonitorInnoDB
以定期将数据打印到 MySQL 错误日志。有关详细信息,请参阅 第 14.18.2 节,“启用 InnoDB 监视器”。 -
命令行格式 --innodb-strict-mode[={OFF|ON}]
系统变量 innodb_strict_mode
范围 全局,会话 动态的 是的 类型 布尔值 默认值 ON
innodb_strict_mode
启用时, 在InnoDB
检查无效或不兼容的表选项时返回错误而不是警告。它检查 、
KEY_BLOCK_SIZE
、ROW_FORMAT
、DATA DIRECTORY
和TEMPORARY
选项TABLESPACE
是否相互兼容以及是否与其他设置兼容。innodb_strict_mode=ON
还可以在创建或更改表时启用行大小检查,以防止INSERT
或UPDATE
由于记录对于所选页面大小来说太大而失败。innodb_strict_mode
您可以在启动时在命令行上mysqld
或在 MySQL配置文件 中启用或禁用 。您还可以innodb_strict_mode
在运行时使用语句启用或禁用,其中is either or 。更改设置需要足够的权限来设置全局系统变量(请参阅 第 5.1.8.1 节,“系统变量权限”)并影响随后连接的所有客户端的操作。任何客户端都可以更改 的设置 ,并且该设置仅影响该客户端。SET [GLOBAL|SESSION] innodb_strict_mode=
mode
mode
ON
OFF
GLOBAL
SESSION
innodb_strict_mode
-
命令行格式 --innodb-support-xa[={OFF|ON}]
弃用 5.7.10 系统变量 innodb_support_xa
范围 全局,会话 动态的 是的 类型 布尔值 默认值 ON
在XA事务中 启用
InnoDB
对两阶段提交的支持,从而导致额外的磁盘刷新以进行事务准备。XA 机制在内部使用,对于任何打开二进制日志并接受来自多个线程的数据更改的服务器来说都是必不可少的。如果禁用 ,事务可以以不同于实时数据库提交它们的顺序写入二进制日志,当二进制日志在灾难恢复中或在副本上重播时,这会产生不同的数据。不要禁用innodb_support_xa
innodb_support_xa
在复制源服务器上,除非您有一个不寻常的设置,其中只有一个线程能够更改数据。innodb_support_xa
已弃用;希望在未来的 MySQL 版本中将其删除。InnoDB
从 MySQL 5.7.10 开始,始终启用 XA 事务中对两阶段提交的支持。innodb_support_xa
不再允许 禁用 ,因为它会使复制不安全并阻止与二进制日志组提交相关的性能提升。 -
命令行格式 --innodb-sync-array-size=#
系统变量 innodb_sync_array_size
范围 全球的 动态的 不 类型 整数 默认值 1
最小值 1
最大值 1024
定义互斥锁/锁等待数组的大小。增加该值会拆分用于协调线程的内部数据结构,以便在具有大量等待线程的工作负载中实现更高的并发性。此设置必须在 MySQL 实例启动时配置,之后无法更改。对于经常产生大量等待线程(通常大于 768)的工作负载,建议增加该值。
-
命令行格式 --innodb-sync-spin-loops=#
系统变量 innodb_sync_spin_loops
范围 全球的 动态的 是的 类型 整数 默认值 30
最小值 0
最大值 4294967295
InnoDB
线程挂起之前 等待释放互斥锁的次数 。 -
命令行格式 --innodb-sync-debug[={OFF|ON}]
系统变量 innodb_sync_debug
范围 全球的 动态的 不 类型 布尔值 默认值 OFF
InnoDB
为存储引擎 启用同步调试检查。此选项仅在使用 CMake选项编译调试支持时可用。WITH_DEBUG
以前,启用
InnoDB
同步调试检查需要使用CMake选项启用调试同步工具。引入此变量后,此要求在 MySQL 5.7 中被删除。ENABLE_DEBUG_SYNC
-
命令行格式 --innodb-table-locks[={OFF|ON}]
系统变量 innodb_table_locks
范围 全局,会话 动态的 是的 类型 布尔值 默认值 ON
如果
autocommit = 0
,InnoDB
荣誉LOCK TABLES
;LOCK TABLES ... WRITE
直到所有其他线程都释放了对表的所有锁后,MySQL 才会返回。的默认值为innodb_table_locks
1,这意味着如果 ,则LOCK TABLES
导致 InnoDB 在内部锁定表autocommit = 0
。innodb_table_locks = 0
对使用 显式锁定的表没有影响LOCK TABLES ... WRITE
。LOCK TABLES ... WRITE
它确实对通过隐式(例如,通过触发器)或通过锁定以供读取或写入的表有影响LOCK TABLES ... READ
。有关相关信息,请参阅 第 14.7 节,“InnoDB 锁定和事务模型”。
-
命令行格式 --innodb-temp-data-file-path=file_name
系统变量 innodb_temp_data_file_path
范围 全球的 动态的 不 类型 细绳 默认值 ibtmp1:12M:autoextend
InnoDB
定义临时表空间 数据文件 的相对路径、名称、大小和属性 。如果您没有为 指定值 ,则默认行为是创建一个在 MySQL 数据目录中innodb_temp_data_file_path
命名的单个自动扩展数据文件。ibtmp1
初始文件大小略大于 12MB。临时表空间数据文件规范的完整语法包括文件名、文件大小
autoextend
和max
属性:file_name:file_size[:autoextend[:max:max_file_size]]
临时表空间数据文件不能与另一个
InnoDB
数据文件同名。创建临时表空间数据文件的任何无能或错误都被视为致命的,并且服务器启动被拒绝。临时表空间有一个动态生成的空间 ID,它可以在每次服务器重新启动时更改。K
通过将,M
或 附加G
到大小值 来指定文件大小 KB、MB 或 GB (1024MB) 。文件大小的总和必须略大于 12MB。单个文件的大小限制由您的操作系统决定。在支持大文件的操作系统上,您可以将文件大小设置为大于 4GB。不支持将原始磁盘分区用于临时表空间数据文件。
和 属性只能用于设置中最后指定的数据
autoextend
文件 。例如:max
innodb_temp_data_file_path
[mysqld] innodb_temp_data_file_path=ibtmp1:50M;ibtmp2:12M:autoextend:max:500M
如果指定该
autoextend
选项,InnoDB
则在可用空间不足时扩展数据文件。autoextend
默认增量为 64MB 。要修改增量,请更改innodb_autoextend_increment
系统变量。临时表空间数据文件的完整目录路径是通过连接 和 定义的路径形成
innodb_data_home_dir
的innodb_temp_data_file_path
。临时表空间由所有非压缩
InnoDB
临时表共享。压缩的临时表驻留在临时文件目录中创建的 file-per-table 表空间文件中,临时文件目录由tmpdir
配置选项定义。InnoDB
在以只读模式 运行之前,设置innodb_temp_data_file_path
为数据目录之外的位置。该路径必须相对于数据目录。例如:--innodb-temp-data-file-path=../../../tmp/ibtmp1:12M:autoextend
有关活动
InnoDB
临时表的元数据位于INFORMATION_SCHEMA.INNODB_TEMP_TABLE_INFO
.有关相关信息,请参阅 第 14.6.3.5 节,“临时表空间”。
-
命令行格式 --innodb-thread-concurrency=#
系统变量 innodb_thread_concurrency
范围 全球的 动态的 是的 类型 整数 默认值 0
最小值 0
最大值 1000
定义内部允许的最大线程数
InnoDB
。值 0(默认值)被解释为无限并发(无限制)。该变量用于在高并发系统上进行性能调优。InnoDB
试图保持内部线程数InnoDB
小于或等于innodb_thread_concurrency
限制。一旦达到限制,额外的线程将被放入“先进先出” (FIFO) 队列中等待线程。等待锁的线程不计入并发执行线程数。正确的设置取决于工作负载和计算环境。如果您的 MySQL 实例与其他应用程序共享 CPU 资源,或者如果您的工作负载或并发用户数在增长,请考虑设置此变量。测试一系列值以确定提供最佳性能的设置。
innodb_thread_concurrency
是一个动态变量,它允许在实时测试系统上试验不同的设置。如果某个特定设置表现不佳,您可以快速设置innodb_thread_concurrency
回 0。使用以下准则来帮助查找和维护适当的设置:
如果工作负载的并发用户线程数一直很小并且不影响性能,则设置
innodb_thread_concurrency=0
(无限制)。如果您的工作负载一直很重或偶尔会出现峰值,请设置一个
innodb_thread_concurrency
值并对其进行调整,直到找到可提供最佳性能的线程数。例如,假设您的系统通常有 40 到 50 个用户,但这个数字会定期增加到 60、70 或更多。通过测试,你发现在80个并发用户的限制下,性能基本保持稳定。在这种情况下,设置innodb_thread_concurrency
为 80。如果您不想
InnoDB
为用户线程使用超过一定数量的虚拟 CPU(例如 20 个虚拟 CPU),请设置innodb_thread_concurrency
为该数量(或可能更低,具体取决于性能测试)。mysqld
如果您的目标是将 MySQL 与其他应用程序隔离开来,请考虑将进程专门绑定 到虚拟 CPU。但是请注意,如果mysqld
进程不是一直很忙,独占绑定可能会导致硬件使用不佳。在这种情况下,您可以将mysqld
进程绑定到虚拟 CPU,但允许其他应用程序使用部分或全部虚拟 CPU。笔记从操作系统的角度来看,使用资源管理解决方案来管理如何在应用程序之间共享 CPU 时间可能比绑定
mysqld
进程更可取。例如,您可以在其他关键进程未运行时将 90% 的虚拟 CPU 时间分配给给定应用程序,并在其他关键进程运行时将该值缩减为 40% 。在某些情况下,最佳
innodb_thread_concurrency
设置可能小于虚拟 CPU 的数量。innodb_thread_concurrency
由于对系统内部和资源的争用增加,太高 的 值可能会导致性能下降。定期监控和分析您的系统。工作负载、用户数量或计算环境的更改可能需要您调整
innodb_thread_concurrency
设置。
值为 0 将禁用输出 部分中 的
queries inside InnoDB
和queries in queue
计数器。ROW OPERATIONS
SHOW ENGINE INNODB STATUS
有关相关信息,请参阅 第 14.8.5 节,“为 InnoDB 配置线程并发”。
-
命令行格式 --innodb-thread-sleep-delay=#
系统变量 innodb_thread_sleep_delay
范围 全球的 动态的 是的 类型 整数 默认值 10000
最小值 0
最大值 1000000
单元 微秒 定义
InnoDB
线程在加入InnoDB
队列之前休眠的时间,以微秒为单位。默认值为 10000。值为 0 将禁用睡眠。您可以设置innodb_adaptive_max_sleep_delay
为允许的最高值innodb_thread_sleep_delay
,并根据当前线程调度活动InnoDB
自动向上或向下调整 。innodb_thread_sleep_delay
这种动态调整有助于线程调度机制在系统负载较轻或接近满负荷运行时平稳工作。有关详细信息,请参阅 第 14.8.5 节,“为 InnoDB 配置线程并发”。
-
命令行格式 --innodb-tmpdir=dir_name
介绍 5.7.11 系统变量 innodb_tmpdir
范围 全局,会话 动态的 是的 类型 目录名称 默认值 NULL
用于为
ALTER TABLE
重建表的联机操作期间创建的临时排序文件定义备用目录。重建表的联机
ALTER TABLE
操作还会 在与原始表相同的目录中创建一个中间表文件。该innodb_tmpdir
选项不适用于中间表文件。有效值是 MySQL 数据目录路径以外的任何目录路径。如果该值为 NULL(默认值),临时文件将创建 MySQL 临时目录(
$TMPDIR
在 Unix 上,在 Windows 上,或配置选项%TEMP%
指定的目录 )。--tmpdir
如果指定目录,则仅在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
在每台服务器上单独配置。有关详细信息,请参阅 第 14.13.3 节,“在线 DDL 空间要求”。有关在线
ALTER TABLE
操作的信息,请参阅 第 14.13 节,“InnoDB 和在线 DDL”。 innodb_trx_purge_view_update_only_debug
命令行格式 --innodb-trx-purge-view-update-only-debug[={OFF|ON}]
系统变量 innodb_trx_purge_view_update_only_debug
范围 全球的 动态的 是的 类型 布尔值 默认值 OFF
暂停清除标记为删除的记录,同时允许更新清除视图。此选项人为地创建了清除视图已更新但尚未执行清除的情况。此选项仅在使用 CMake选项编译调试支持时可用。
WITH_DEBUG
-
命令行格式 --innodb-trx-rseg-n-slots-debug=#
系统变量 innodb_trx_rseg_n_slots_debug
范围 全球的 动态的 是的 类型 整数 默认值 0
最小值 0
最大值 1024
设置一个调试标志,该标志限制 为为撤消日志段寻找空闲槽
TRX_RSEG_N_SLOTS
的函数的给定值 。trx_rsegf_undo_find_free
此选项仅在使用 CMake选项编译调试支持时可用。WITH_DEBUG
-
命令行格式 --innodb-undo-directory=dir_name
系统变量 innodb_undo_directory
范围 全球的 动态的 不 类型 目录名称 InnoDB
创建撤消表空间 的路径。通常用于将撤消日志放在不同的存储设备上。innodb_rollback_segments
与和 一起使用innodb_undo_tablespaces
。没有默认值(它是 NULL)。如果未指定路径,则在 MySQL 数据目录中创建撤消表空间,如
datadir
.有关详细信息,请参阅 第 14.6.3.4 节,“撤消表空间”。
-
命令行格式 --innodb-undo-log-truncate[={OFF|ON}]
系统变量 innodb_undo_log_truncate
范围 全球的 动态的 是的 类型 布尔值 默认值 OFF
启用后,超过定义的阈值的撤消表空间将
innodb_max_undo_log_size
被标记为截断。只能截断撤消表空间。不支持截断驻留在系统表空间中的撤消日志。要发生截断,必须至少有两个撤消表空间和两个配置为使用撤消表空间的启用重做的撤消日志。这意味着innodb_undo_tablespaces
必须设置为等于或大于 2 的值,并且innodb_rollback_segments
必须设置为等于或大于 35 的值。该
innodb_purge_rseg_truncate_frequency
变量可用于加快撤消表空间的截断。有关详细信息,请参阅 截断撤消表空间。
-
命令行格式 --innodb-undo-logs=#
弃用 5.7.19 系统变量 innodb_undo_logs
范围 全球的 动态的 是的 类型 整数 默认值 128
最小值 1
最大值 128
笔记innodb_undo_logs
已弃用;希望在未来的 MySQL 版本中将其删除。定义 所 使用的回滚段
InnoDB
数。该innodb_undo_logs
选项是 的别名innodb_rollback_segments
。有关详细信息,请参阅 的说明innodb_rollback_segments
。 -
命令行格式 --innodb-undo-tablespaces=#
弃用 5.7.21 系统变量 innodb_undo_tablespaces
范围 全球的 动态的 不 类型 整数 默认值 0
最小值 0
最大值 95
所使用的撤消表空间 数
InnoDB
。默认值为 0。笔记innodb_undo_tablespaces
已弃用;希望在未来的 MySQL 版本中将其删除。因为在长时间运行的事务中撤消日志会变得很大,所以在多个表空间中拥有撤消日志可以减少任何一个表空间的最大大小。撤消表空间文件在 定义的位置创建
innodb_undo_directory
,名称的形式为 ,其中 是表示空间 ID 的连续整数系列(包括前导零)。undo
N
N
撤消表空间文件的初始大小取决于该
innodb_page_size
值。对于默认的 16KBInnoDB
页面大小,初始撤消表空间文件大小为 10MiB。对于 4KB、8KB、32KB 和 64KB 页面大小,初始撤消表空间文件大小分别为 7MiB、8MiB、20MiB 和 40MiB。至少需要两个撤消表空间才能截断撤消日志。请参阅 截断撤消表空间。
重要的innodb_undo_tablespaces
只能在初始化 MySQL 实例之前配置,之后不能更改。如果未指定任何值,则使用默认设置 0 初始化实例。尝试使用InnoDB
比初始化 MySQL 实例时指定的数量更多的撤消表空间重新启动会导致启动失败,并显示InnoDB
未找到预期的错误撤消表空间的数量。128 个回滚段中的 32 个保留给临时表,如第 14.6.7 节“撤消日志”中所述。一个回滚段总是分配给系统表空间,这就留下 95 个回滚段可用于撤消表空间。这意味着
innodb_undo_tablespaces
最大限制是 95。有关详细信息,请参阅 第 14.6.3.4 节,“撤消表空间”。
-
命令行格式 --innodb-use-native-aio[={OFF|ON}]
系统变量 innodb_use_native_aio
范围 全球的 动态的 不 类型 布尔值 默认值 ON
指定是否使用 Linux 异步 I/O 子系统。此变量仅适用于 Linux 系统,并且在服务器运行时无法更改。通常情况下,您不需要配置此选项,因为它默认处于启用状态。
在 Windows 系统上具有的异步 I/O功能
InnoDB
在 Linux 系统上可用。(其他类 Unix 系统继续使用同步 I/O 调用。)此功能提高了严重 I/O 绑定系统的可扩展性,这些系统通常在SHOW ENGINE INNODB STATUS\G
输出中显示许多挂起的读/写。运行大量
InnoDB
I/O 线程,尤其是在同一台服务器上运行多个此类实例,可能会超出 Linux 系统的容量限制。在这种情况下,您可能会收到以下错误: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
文件系统和不支持 AIO on 的 Linux 内核的组合),此选项也可能在启动期间自动禁用tmpfs
。有关详细信息,请参阅 第 14.8.7 节,“在 Linux 上使用异步 I/O”。
InnoDB
版本号 。在 MySQL 5.7 中,InnoDB
不适用单独的版本编号,此值与version
服务器编号相同。-
命令行格式 --innodb-write-io-threads=#
系统变量 innodb_write_io_threads
范围 全球的 动态的 不 类型 整数 默认值 4
最小值 1
最大值 64
中写入操作的 I/O 线程数
InnoDB
。默认值为 4。读取线程对应的是innodb_read_io_threads
. 有关详细信息,请参阅 第 14.8.6 节,“配置后台 InnoDB I/O 线程的数量”。有关一般 I/O 调整建议,请参阅 第 8.5.8 节,“优化 InnoDB 磁盘 I/O”。笔记innodb_read_io_threads
在 Linux 系统上, 使用innodb_write_io_threads
、 和 Linux 设置的 默认设置运行多个 MySQL 服务器(通常超过 12 个)aio-max-nr
可能会超出系统限制。理想情况下,增加aio-max-nr
设置;作为解决方法,您可以减少一个或两个 MySQL 变量的设置。还要考虑 的值
sync_binlog
,它控制二进制日志到磁盘的同步。有关一般 I/O 调整建议,请参阅 第 8.5.8 节,“优化 InnoDB 磁盘 I/O”。