真或假的系统变量可以在服务器启动时通过命名来启用,或者通过使用
--skip-前缀来禁用。例如,要启用或禁用InnoDB自适应哈希索引,您可以 在命令行或 选项 文件中 使用--innodb-adaptive-hash-index或 。--skip-innodb-adaptive-hash-indexinnodb_adaptive_hash_indexskip_innodb_adaptive_hash_index可以在命令行或 选项文件 中指定采用数值的系统变量 。
--var_name=valuevar_name=value许多系统变量可以在运行时更改(请参阅 第 5.1.8.2 节,“动态系统变量”)。
有关变量作用域修饰符的信息,请参阅
GLOBAL语句 文档。SESSIONSET某些选项控制
InnoDB数据文件的位置和布局。 第 14.8.1 节,“InnoDB 启动配置”解释了如何使用这些选项。一些您最初可能不会使用的选项有助于
InnoDB根据机器容量和您的数据库 工作负载调整性能特征。有关指定选项和系统变量的更多信息,请参阅第 4.2.2 节,“指定程序选项”。
表 14.18 InnoDB 选项和变量引用
InnoDB 命令选项
-
命令行格式 --innodb[=value]弃用 是的 类型 枚举 默认值 ON有效值 OFFONFORCEInnoDB如果服务器编译时InnoDB支持,则 控制存储引擎的加载。此选项具有三态格式,可能的值为OFF、ON或FORCE。请参阅 第 5.5.1 节,“安装和卸载插件”。要禁用
InnoDB,请使用--innodb=OFF或--skip-innodb。在这种情况下,因为默认存储引擎是InnoDB,服务器不会启动,除非您还使用--default-storage-engine并将 默认值设置为永久和表--default-tmp-storage-engine的其他引擎 。TEMPORARYInnoDB不能再禁用存储引擎,并且 和--innodb=OFF选项--skip-innodb已弃用且无效。它们的使用会导致警告。您应该期望在未来的 MySQL 版本中删除这些选项。 -
命令行格式 --innodb-status-file[={OFF|ON}]类型 布尔值 默认值 OFF--innodb-status-file启动选项控制是否InnoDB创建一个 在数据目录中命名的文件,并大约每 15 秒向其中写入 一次输出。innodb_status.pidSHOW ENGINE INNODB STATUS默认情况下不创建 该 文件。要创建它, 请使用该 选项 启动mysqld 。服务器正常关闭时删除文件。如果发生异常关机,则可能必须手动删除状态文件。
innodb_status.pid--innodb-status-fileInnoDB该
--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在源服务器上启用此选项以将
InnoDBmemcached 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指定实现
InnoDBmemcached插件的共享库。有关详细信息,请参阅 第 14.21.3 节,“设置 InnoDB memcached 插件”。
daemon_memcached_engine_lib_path命令行格式 --daemon-memcached-engine-lib-path=dir_name系统变量 daemon_memcached_engine_lib_path范围 全球的 动态的 不 类型 目录名称 默认值 NULL包含实现
InnoDBmemcached插件的共享库的目录路径。默认值为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 )。的对口 。
getCOMMITdaemon_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和。的对口 。incrCOMMITdaemon_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范围 全球的 动态的 是的 类型 布尔值 默认值 ONInnoDB自适应哈希索引是启用还是禁用 。根据您的工作负载,可能需要动态启用或禁用 自适应哈希索引以提高查询性能。由于自适应哈希索引可能并非对所有工作负载都有用,因此在启用和禁用它的情况下使用实际工作负载进行基准测试。有关详细信息,请参阅 第 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单元 秒 以秒 为单位自动提交使用
InnoDBmemcached接口的空闲连接的频率。有关更多信息,请参阅 第 14.21.5.4 节,“控制 InnoDB memcached 插件的事务行为”。 -
命令行格式 --innodb-api-disable-rowlock[={OFF|ON}]系统变量 innodb_api_disable_rowlock范围 全球的 动态的 不 类型 布尔值 默认值 OFFInnoDB使用此选项可在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允许您将
InnoDBmemcached插件与 MySQL 二进制日志一起使用。有关更多信息,请参阅 启用 InnoDB memcached 二进制日志。 -
命令行格式 --innodb-api-enable-mdl[={OFF|ON}]系统变量 innodb_api_enable_mdl范围 全球的 动态的 不 类型 布尔值 默认值 OFFInnoDB锁定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有效值 012用于生成 自动增量 值 的锁定模式。允许的值为 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_shutdowninnodb_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最大值 64InnoDB缓冲池划分 的区域数。对于缓冲池在数 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_size128MB,每个块都有单独的内存分配请求。选择 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_startupinnodb_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_statusstatus 变量报告在线缓冲池大小调整操作的状态。 有关详细信息,请参阅 第 14.8.3.1 节,“配置 InnoDB 缓冲池大小”。 -
命令行格式 --innodb-change-buffer-max-size=#系统变量 innodb_change_buffer_max_size范围 全球的 动态的 是的 类型 整数 默认值 25最小值 0最大值 50InnoDB更改缓冲区 的最大大小,以缓冲池总大小的百分比表示 。对于具有大量插入、更新和删除活动的 MySQL 服务器,您可以增加此值,或者对于具有用于报告的不变数据的 MySQL 服务器,可以减少此值。有关详细信息,请参阅第 14.5.2 节,“更改缓冲区”。有关一般 I/O 调整建议,请参阅第 8.5.8 节,“优化 InnoDB 磁盘 I/O”。 -
命令行格式 --innodb-change-buffering=value系统变量 innodb_change_buffering范围 全球的 动态的 是的 类型 枚举 默认值 all有效值 noneinsertsdeleteschangespurgesall是否
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最大值 2InnoDB为更改缓冲 设置调试标志。值为 1 会强制对更改缓冲区进行所有更改。值为 2 会导致合并时意外退出。默认值 0 表示未设置更改缓冲调试标志。此选项仅在使用 CMake选项编译调试支持时可用。WITH_DEBUG -
命令行格式 --innodb-checksum-algorithm=value系统变量 innodb_checksum_algorithm范围 全球的 动态的 是的 类型 枚举 默认值 crc32有效值 crc32strict_crc32innodbstrict_innodbnonestrict_none指定如何生成和验证 存储在表空间的磁盘块中的校验和。 是 MySQL 5.7.7 的默认值。
InnoDBcrc32innodb_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 及更高版本中,仅打印一条错误消息,如果页面具有有效 的或 校验和,则该页面被接受为有效。InnoDBinnodbcrc32nonenone下表显示了、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范围 全球的 动态的 不 类型 布尔值 默认值 ONInnoDB可以对从磁盘读取的所有表空间页面使用 校验和验证,以确保对硬件故障或损坏的数据文件具有额外的容错能力。默认情况下启用此验证。在特殊情况下(例如运行基准测试时)可以使用禁用此安全功能--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有效值 nonezliblz4lz4hc使用指定的压缩算法压缩所有表,而不必
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有效值 REDUNDANTCOMPACTDYNAMIC该
innodb_default_row_format选项定义InnoDB表和用户创建的临时表的默认行格式。默认设置为DYNAMIC。其他允许的值是COMPACT和REDUNDANT。COMPRESSED不支持在 系统表空间中使用的 行格式不能定义为默认值。新创建的表使用由未明确指定选项或使用选项
innodb_default_row_format时 定义的行格式 。ROW_FORMATROW_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有效值 012InnoDB关机模式 。如果该值为 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有效值 AntelopeBarracuda为file-per-table 表空间 启用
InnoDB文件格式 。支持的文件格式是 和。 是原始 文件格式,支持 和 行格式。是较新的文件格式,它支持和 行格式。AntelopeBarracudaAntelopeInnoDBREDUNDANTCOMPACTBarracudaCOMPRESSEDDYNAMICCOMPRESSED和行格式为表DYNAMIC启用重要的存储功能 。InnoDB请参阅 第 14.11 节,“InnoDB 行格式”。更改
innodb_file_format设置不会影响现有InnoDB表空间文件的文件格式。该
innodb_file_format设置不适用于通用表空间,它支持所有行格式的表。请参阅 第 14.6.3.3 节,“通用表空间”。默认值在MySQL 5.7
innodb_file_format中更改为。Barracudainnodb_file_format创建使用DYNAMIC行格式的表时将忽略 该设置。无论 设置如何,使用行格式创建的表DYNAMIC始终使用 文件格式。要使用行格式, 必须设置为.Barracudainnodb_file_formatCOMPRESSEDinnodb_file_formatBarracuda该
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,则 报错 不启动。如果标签不高,则将 的值设置 为文件格式标签。AntelopeBarracudaInnoDBInnoDBInnoDBinnodb_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有效值 AntelopeBarracuda在服务器启动时,
InnoDB将此变量的值设置为系统表空间中的文件格式标记 (例如,或 )。如果服务器创建或打开一个具有“高级”文件格式的表,它会将 的值设置 为该格式。AntelopeBarracudainnodb_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最大值 100InnoDB在创建或重建索引时执行批量加载。这种创建索引的方法被称为“排序索引构建”。innodb_fill_factor定义在排序索引构建期间填充的每个 B 树页面上的空间百分比,剩余空间保留用于未来的索引增长。例如,设置innodb_fill_factor为 80 会在每个 B 树页面上保留 20% 的空间用于未来的索引增长。实际百分比可能会有所不同。该innodb_fill_factor设置被解释为提示而不是硬限制。设置为 100 时,聚集索引页中有
innodb_fill_factor1/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有效值 012控制提交操作的严格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) fsyncO_DSYNClittlesyncnosyncO_DIRECTO_DIRECT_NO_FSYNC有效值 (Windows) async_unbufferednormalunbuffered定义用于将 数据刷新到
InnoDB数据文件和日志文件的方法,这会影响 I/O 吞吐量。如果在类 Unix 系统上
innodb_flush_method设置为,则默认使用该选项。如果 在 Windows 上 设置为 ,则默认使用该选项。NULLfsyncinnodb_flush_methodNULLasync_unbufferedinnodb_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有效值 012指定从缓冲池中刷新页面是否也刷新相同 范围内的其他脏页。
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_capacityinnodb_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_recoveryinnodb_force_recoveryInnoDB这些限制可能会导致复制管理命令失败并出现错误,因为复制设置如
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_nameINFORMATION_SCHEMAINNODB_FT_INDEX_TABLEINNODB_FT_INDEX_CACHEINNODB_FT_CONFIGINNODB_FT_DELETEDINNODB_FT_BEING_DELETED有关更多信息,请参阅 第 14.16.4 节,“InnoDB INFORMATION_SCHEMA FULLTEXT 索引表”。
-
命令行格式 --innodb-ft-cache-size=#系统变量 innodb_ft_cache_size范围 全球的 动态的 不 类型 整数 默认值 8000000最小值 1600000最大值 80000000单元 字节 为搜索索引缓存分配的内存(以字节为单位)
InnoDBFULLTEXT,它在创建InnoDBFULLTEXT索引时将已解析的文档保存在内存中。索引插入和更新仅在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: 100FTS优化进度。例如:
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指定 在创建索引时将一组停用词与索引相关联。
InnoDBFULLTEXT如果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存储在
InnoDBFULLTEXT索引中的单词的最大字符长度。对该值设置限制可减少索引的大小,从而通过省略长关键字或不是真实单词且不太可能是搜索词的任意字母集合来加快查询速度。有关详细信息,请参阅 第 12.10.6 节,“微调 MySQL 全文搜索”。
-
命令行格式 --innodb-ft-min-token-size=#系统变量 innodb_ft_min_token_size范围 全球的 动态的 不 类型 整数 默认值 3最小值 0最大值 16存储在
InnoDBFULLTEXT索引中的单词的最小长度。增加这个值会减少索引的大小,从而通过省略在搜索上下文中不太可能重要的常用词(例如英语单词“ a ”和“ to ” )来加快查询速度。对于使用 CJK(中文、日语、韩语)字符集的内容,指定值 1。有关详细信息,请参阅 第 12.10.6 节,“微调 MySQL 全文搜索”。
-
命令行格式 --innodb-ft-num-word-optimize=#系统变量 innodb_ft_num_word_optimize范围 全球的 动态的 是的 类型 整数 默认值 2000最小值 1000最大值 10000在索引的每个
OPTIMIZE TABLE操作 期间要处理的单词数 。InnoDBFULLTEXT由于对包含全文搜索索引的表进行批量插入或更新操作可能需要大量索引维护以合并所有更改,因此您可能会执行一系列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此选项用于为所有表 指定您自己的
InnoDBFULLTEXT索引停用词列表。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最大值 32InnoDBFULLTEXT构建搜索索引时 并行使用的线程数,用于对索引中的文本进行索引和标记化。有关相关信息,请参阅 第 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此选项用于
InnoDBFULLTEXT在特定表上指定您自己的索引停用词列表。要为所有表配置您自己的停用词列表InnoDB,请使用innodb_ft_server_stopword_table.设置
innodb_ft_user_stopword_table为包含停用词列表的表的名称,格式为 .db_name/table_name停用词表必须在您配置之前存在
innodb_ft_user_stopword_table。innodb_ft_enable_stopword必须 在创建索引innodb_ft_user_stopword_table之前启用和配置 。FULLTEXT停用词表必须是一个
InnoDB表,包含一个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 限制”。DYNAMICCOMPRESSED对于使用
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_detectInnoDBinnodb_deadlock_detectInnoDBinnodb_lock_wait_timeoutinnodb_lock_wait_timeout可以在运行时使用SET GLOBALorSET 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_binlog0(禁用),这意味着间隙锁定已启用: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最大值 4294967295InnoDB用于写入磁盘上的日志文件 的缓冲区的大小(以字节为单位) 。随着 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_pageszlib默认情况下启用,以防止在恢复期间使用不同版本的压缩算法 时可能发生的损坏。如果您确定zlib版本不会更改,则可以禁用innodb_log_compressed_pages以减少修改压缩数据的工作负载的重做日志生成。要衡量启用或禁用的效果
innodb_log_compressed_pages,请比较相同工作负载下两种设置的重做日志生成。测量重做日志生成的选项包括观察输出部分中 的Log sequence number(LSN) ,或监视 写入重做日志文件的字节数的状态。LOGSHOW ENGINE INNODB STATUSInnodb_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_sizeinnodb_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。
InnoDBinnodb_log_group_home_dirinnodb_log_file_sizeinnodb_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)。指定最小值时不会发生预写。最大值等于该 值。如果您为其指定的值 大于该 值,则该 设置将被截断为该 值。InnoDBInnoDBinnodb_page_sizeinnodb_log_write_ahead_sizeinnodb_page_sizeinnodb_log_write_ahead_sizeinnodb_page_sizeinnodb_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.99InnoDB尝试 从缓冲池中刷新数据,以 使脏页的百分比不超过此值。默认值为 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有效值 countermodulepatternall此变量充当开关,将
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有效值 countermodulepatternall此变量充当开关,重置
InnoDB指标计数器的所有值(最小值、最大值等) 。可以使用该INFORMATION_SCHEMA.INNODB_METRICS表查询计数器数据。有关使用信息,请参阅 第 14.16.6 节,“InnoDB INFORMATION_SCHEMA 指标表”。 -
命令行格式 --innodb-numa-interleave[={OFF|ON}]系统变量 innodb_numa_interleave范围 全球的 动态的 不 类型 布尔值 默认值 OFFInnoDB为缓冲池 的分配启用 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的新增、删除和更新的令牌数据 。InnoDBFULLTEXT有关更多信息,请参阅优化 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.confmysql hard nice -20 mysql soft nice -20对于 systemd 管理的系统,同样可以通过
LimitNICE=-20在本地化的 systemd 配置文件中指定来实现。例如,创建一个名为override.confin 的文件/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有效值 40968192163843276865536指定表空间的页面大小 。可以字节或千字节为单位指定值。例如,16 KB 的页面大小值可以指定为 16384、16KB 或 16k。
InnoDBinnodb_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 页才能启动对后续盘区的异步读取。
InnoDBInnoDBinnodb_read_ahead_thresholdInnoDB了解通过预读机制读取了多少页,以及其中有多少页在未访问的情况下从缓冲池中逐出,在微调
innodb_read_ahead_threshold设置时非常有用。 输出显示来自和 全局状态变量SHOW ENGINE INNODB STATUS的计数器信息 ,它们分别报告预读请求 带入缓冲池的页数,以及从缓冲池中逐出而从未被访问的页数。状态变量报告自上次服务器重新启动以来的全局值。Innodb_buffer_pool_read_aheadInnodb_buffer_pool_read_ahead_evictedSHOW 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范围 全球的 动态的 不 类型 布尔值 默认值 OFFInnoDB以只读模式 启动。用于在只读介质上分发数据库应用程序或数据集。也可以用在数据仓库中,在多个实例之间共享同一个数据目录。有关更多信息,请参阅第 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范围 全球的 动态的 不 类型 布尔值 默认值 OFFInnoDB默认情况下只回滚事务超时的最后一条语句。如果--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 TABLEorALTER 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_equalnulls_unequalnulls_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 STATUSINFORMATION_SCHEMA.TABLESINFORMATION_SCHEMA.STATISTICSANALYZE TABLEInnoDBInnoDB要更改设置,请发出语句,其中是or (或 or )。更改设置需要足够的权限来设置全局系统变量(请参阅第 5.1.8.1 节,“系统变量权限”)并立即影响所有连接的操作。
SET GLOBAL innodb_stats_on_metadata=modemodeONOFF10 -
命令行格式 --innodb-stats-persistent[={OFF|ON}]系统变量 innodb_stats_persistent范围 全球的 动态的 是的 类型 布尔值 默认值 ON指定
InnoDB索引统计信息是否持久保存到磁盘。否则,可能会频繁地重新计算统计信息,从而导致 查询执行计划发生变化。创建表时,此设置与每个表一起存储。您可以innodb_stats_persistent在创建表之前在全局级别设置,或者使用 and 语句的STATS_PERSISTENT子句 覆盖系统范围的设置并为单个表配置持久统计信息。CREATE TABLEALTER 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 TABLEANALYZE TABLEInnoDB笔记为 设置高值
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 TABLEInnoDB笔记为 设置高值
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范围 全局,会话 动态的 是的 类型 布尔值 默认值 ONinnodb_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=modemodeONOFFGLOBALSESSIONinnodb_strict_mode -
命令行格式 --innodb-support-xa[={OFF|ON}]弃用 5.7.10 系统变量 innodb_support_xa范围 全局,会话 动态的 是的 类型 布尔值 默认值 ON在XA事务中 启用
InnoDB对两阶段提交的支持,从而导致额外的磁盘刷新以进行事务准备。XA 机制在内部使用,对于任何打开二进制日志并接受来自多个线程的数据更改的服务器来说都是必不可少的。如果禁用 ,事务可以以不同于实时数据库提交它们的顺序写入二进制日志,当二进制日志在灾难恢复中或在副本上重播时,这会产生不同的数据。不要禁用innodb_support_xainnodb_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最大值 4294967295InnoDB线程挂起之前 等待释放互斥锁的次数 。 -
命令行格式 --innodb-sync-debug[={OFF|ON}]系统变量 innodb_sync_debug范围 全球的 动态的 不 类型 布尔值 默认值 OFFInnoDB为存储引擎 启用同步调试检查。此选项仅在使用 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_locks1,这意味着如果 ,则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:autoextendInnoDB定义临时表空间 数据文件 的相对路径、名称、大小和属性 。如果您没有为 指定值 ,则默认行为是创建一个在 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文件 。例如:maxinnodb_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 OPERATIONSSHOW 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 的连续整数系列(包括前导零)。undoNN撤消表空间文件的初始大小取决于该
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输出中显示许多挂起的读/写。运行大量
InnoDBI/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”。