14.14 InnoDB 启动选项和系统变量

  • 可以在服务器启动时通过命名来启用 true 或 false 的系统变量,也可以使用--skip-前缀禁用它们。对于 example,要启用或禁用InnoDB自适应哈希索引,可以在命令 line 上使用--innodb-adaptive-hash-index或--skip-innodb-adaptive-hash-index,或在选项文件中使用innodb_adaptive_hash_index或skip_innodb_adaptive_hash_index

  • 采用数字 value 的系统变量可以在 line 命令中指定为--var_name=value,或者在 files 选项中指定为var_name=value

  • 许多系统变量可以在运行时更改(参见第 5.1.8.2 节,“动态系统变量”)。

  • 有关GLOBALSESSION变量范围修饰符的信息,请参阅组语句文档。

  • 某些选项控制InnoDB data files 的位置和布局。 Section 14.8.1,“InnoDB Startup Configuration”解释了如何使用这些选项。

  • 您最初可能不会使用的某些选项可帮助根据计算机容量和数据库工作量调整InnoDB performance 特性。

  • 有关指定选项和系统变量的更多信息,请参见第 4.2.2 节,“指定程序选项”。

表 14.19 InnoDB 选项和变量参考

名称Cmd-Line选项文件系统变量状态变量Var 范围动态
daemon_memcached_enable_binlog全球没有
daemon_memcached_engine_libname全球没有
daemon_memcached_engine_lib_path全球没有
daemon_memcached_option全球没有
daemon_memcached_r_batch_size全球没有
daemon_memcached_w_batch_size全球没有
foreignkey_checks
ignore_builtin_innodb全球没有
InnoDB
innodb_adaptive_flushing全球
innodb_adaptive_flushing_lwm全球
innodb_adaptive_hash_index全球
innodb_adaptive_hash_index_parts全球没有
innodb_adaptive_max_sleep_delay全球
innodb_additional_mem_pool_size全球没有
innodb_api_bk_commitinterval全球
innodb_api_disable_rowlock全球没有
innodb_api_enable_binlog全球没有
innodb_api_enable_mdl全球没有
innodb_api_trxlevel全球
innodb_autoextend_increment全球
innodb_autoinc_lock_mode全球没有
Innodb_available_undologs全球没有
innodb_background_drop_list_empty全球
Innodb_buffer_pool_bytes_data全球没有
Innodb_buffer_pool_bytes_dirty全球没有
innodb_buffer_pool_chunk_size全球没有
innodb_buffer_pool_dump_at_shutdown全球
innodb_buffer_pool_dump_now全球
innodb_buffer_pool_dump_pct全球
Innodb_buffer_pool_dump_status全球没有
innodb_buffer_pool_filename全球
innodb_buffer_pool_instances全球没有
innodb_buffer_pool_load_abort全球
innodb_buffer_pool_load_at_startup全球没有
innodb_buffer_pool_load_now全球
Innodb_buffer_pool_load_status全球没有
Innodb_buffer_pool_pages_data全球没有
Innodb_buffer_pool_pages_dirty全球没有
Innodb_buffer_pool_pages_flushed全球没有
Innodb_buffer_pool_pages_free全球没有
Innodb_buffer_pool_pages_latched全球没有
Innodb_buffer_pool_pages_misc全球没有
Innodb_buffer_pool_pages_total全球没有
Innodb_buffer_pool_read_ahead全球没有
Innodb_buffer_pool_read_ahead_evicted全球没有
Innodb_buffer_pool_read_ahead_rnd全球没有
Innodb_buffer_pool_read_requests全球没有
Innodb_buffer_pool_reads全球没有
Innodb_buffer_pool_resize_status全球没有
innodb_buffer_pool_size全球不定
Innodb_buffer_pool_wait_free全球没有
Innodb_buffer_pool_write_requests全球没有
innodb_change_buffer_max_size全球
innodb_change_buffering全球
innodb_change_buffering_debug全球
innodb_checksum_algorithm全球
innodb_checksums全球没有
innodb_cmp_per_index_enabled全球
innodb_commit_concurrency全球
innodb_compress_debug全球
innodb_compression_failure_threshold_pct全球
innodb_compressionlevel全球
innodb_compression_pad_pct_max全球
innodb_concurrency_tickets全球
innodb_data_file_path全球没有
Innodb_data_fsyncs全球没有
innodb_data_home_dir全球没有
Innodb_data_pending_fsyncs全球没有
Innodb_data_pending_reads全球没有
Innodb_data_pending_writes全球没有
Innodb_data_read全球没有
Innodb_data_reads全球没有
Innodb_data_writes全球没有
Innodb_data_written全球没有
Innodb_dblwr_pages_written全球没有
Innodb_dblwr_writes全球没有
innodb_deadlock_detect全球
innodb_default_row_format全球
innodb_disable_resize_buffer_pool_debug全球
innodb_disable_sort_file_cache全球
innodbdoublewrite全球没有
innodb_fast_shutdown全球
innodb_fil_make_page_dirty_debug全球
innodb_file_format全球
innodb_file_format_check全球没有
innodb_file_format_max全球
innodb_file_pertable全球
innodb_fill_factor全球
innodb_flushlog_attimeout全球
innodb_flushlog_at_trx_commit全球
innodb_flush_method全球没有
innodb_flush_neighbors全球
innodb_flush_sync全球
innodb_flushing_avg_loops全球
innodb_force_load_corrupted全球没有
innodb_force_recovery全球没有
innodb_ft_auxtable全球
innodb_ft_cache_size全球没有
innodb_ft_enable_diag_print全球
innodb_ft_enable_stopword
innodb_ft_max_token_size全球没有
innodb_ft_min_token_size全球没有
innodb_ft_num_word_optimize全球
innodb_ft_result_cache_limit全球
innodb_ft_server_stopwordtable全球
innodb_ft_sort_pll_degree全球没有
innodb_ft_total_cache_size全球没有
innodb_ft_user_stopwordtable
Innodb_have_atomic_builtins全球没有
innodb_io_capacity全球
innodb_io_capacity_max全球
innodb_large_prefix全球
innodb_limit_optimisticinsert_debug全球
innodb_lock_waittimeout
innodb_locks_unsafe_for_binlog全球没有
innodblog_buffer_size全球没有
innodblog_checkpoint_now全球
innodblog_checksum_algorithm全球
innodblog_checksums全球
innodblog_compressed_pages全球
innodblog_file_size全球没有
innodblogfiles_ingroup全球没有
innodbloggroup_home_dir全球没有
Innodblog_waits全球没有
innodblog_write_ahead_size全球
Innodblog_write_requests全球没有
Innodblog_writes全球没有
innodb_lru_scan_depth全球
innodb_max_dirty_pages_pct全球
innodb_max_dirty_pages_pct_lwm全球
innodb_max_purge_lag全球
innodb_max_purge_lag_delay全球
innodb_max_undolog_size全球
innodb_merge_threshold_set_all_debug全球
innodb_monitor_disable全球
innodb_monitor_enable全球
innodb_monitor_reset全球
innodb_monitor_reset_all全球
Innodb_num_openfiles全球没有
innodb_numainterleave全球没有
innodb_old_blocks_pct全球
innodb_old_blockstime全球
innodb_online_alterlog_max_size全球
innodb_openfiles全球没有
innodb_optimize_fulltext_only全球
innodb_optimize_point_storagesession
Innodboslog_fsyncs全球没有
Innodboslog_pending_fsyncs全球没有
Innodboslog_pending_writes全球没有
Innodboslog_written全球没有
innodb_page_cleaners全球没有
Innodb_page_size全球没有
innodb_page_size全球没有
Innodb_pages_created全球没有
Innodb_pages_read全球没有
Innodb_pages_written全球没有
innodb_print_all_deadlocks全球
innodb_purge_batch_size全球
innodb_purge_rseg_truncate_frequency全球
innodb_purge_threads全球没有
innodb_random_read_ahead全球
innodb_read_ahead_threshold全球
innodb_read_io_threads全球没有
innodb_read_only全球没有
innodb_replication_delay全球
innodb_rollback_ontimeout全球没有
innodb_rollback_segments全球
Innodb_row_lock_current_waits全球没有
Innodb_row_locktime全球没有
Innodb_row_locktime_avg全球没有
Innodb_row_locktime_max全球没有
Innodb_row_lock_waits全球没有
Innodb_rows_deleted全球没有
Innodb_rowsinserted全球没有
Innodb_rows_read全球没有
Innodb_rows_updated全球没有
innodb_saved_page_number_debug全球
innodb_sort_buffer_size全球没有
innodb_spin_wait_delay全球
innodb_stats_auto_recalc全球
innodb_stats_include_delete_marked全球
innodb_stats_method全球
innodb_stats_on_metadata全球
innodb_stats_persistent全球
innodb_stats_persistentsample_pages全球
innodb_statssample_pages全球
innodb_stats_transientsample_pages全球
innodb-status-file
innodb_status_output全球
innodb_status_output_locks全球
innodb_strict_mode
innodb_support_xa
innodb_syncarray_size全球没有
innodb_sync_debug全球没有
innodb_sync_spin_loops全球
innodbtable_locks
innodb_temp_data_file_path全球没有
innodb_thread_concurrency全球
innodb_thread_sleep_delay全球
innodb_tmpdir
Innodb_truncated_status_writes全球没有
innodb_trx_purge_view_update_only_debug全球
innodb_trx_rseg_n_slots_debug全球
innodb_undo_directory全球没有
innodb_undolog_truncate全球
innodb_undologs全球
innodb_undotablespaces全球没有
innodb_use_native_aio全球没有
innodb_use_sys_malloc全球没有
innodbversion全球没有
innodb_write_io_threads全球没有
timedmutexes全球
unique_checks

InnoDB 命令选项


--innodb[=value]

属性
Command-Line 格式--innodb[=value]
****已过时5.7.5
类型列举
默认值ON
有效值OFF
ON
FORCE

如果服务器是使用InnoDB支持编译的,则控制InnoDB存储引擎的加载。此选项具有三态格式,可能的值为OFFONFORCE。见第 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

属性
Command-Line 格式--innodb-status-file[={OFF\|ON}]
类型Boolean
默认值OFF

--innodb-status-file启动选项控制InnoDB是否在数据目录中创建名为innodb_status.pid的文件,并且每隔 15 秒左右写入显示发动机创新状态输出。

默认情况下不会创建innodb_status.pid文件。要创建它,请使用--innodb-status-file选项启动mysqld。 InnoDB在服务器正常关闭时删除文件。如果发生异常关闭,则可能必须手动删除状态文件。

--innodb-status-file选项用于临时使用,因为显示发动机创新状态输出生成可能会影响 performance,而innodb_status.pid文件可能会在 time 时变得非常大。

有关相关信息,请参阅第 14.17.2 节,“启用 InnoDB 监视器”。


--skip-innodb

禁用InnoDB存储引擎。请参阅--innodb的说明。

InnoDB 系统变量


daemon_memcached_enable_binlog

属性
Command-Line 格式--daemon-memcached-enable-binlog[={OFF\|ON}]
系统变量daemon_memcached_enable_binlog
范围全球
动态没有
类型Boolean
默认值OFF

在master 服务器上启用此选项以使用带有 MySQL 二进制 log的InnoDB memcached插件(daemon_memcached)。此选项只能在服务器启动时设置。您还必须使用--log-bin选项在 master 服务器上启用 MySQL 二进制 log。

有关更多信息,请参阅第 14.20.6 节,“InnoDB memcached 插件和复制”。


daemon_memcached_engine_lib_name

属性
Command-Line 格式--daemon-memcached-engine-lib-name=file_name
系统变量daemon_memcached_engine_lib_name
范围全球
动态没有
类型文件名
默认值innodb_engine.so

指定实现InnoDB memcached插件的共享 library。

有关更多信息,请参阅第 14.20.3 节,“设置 InnoDB memcached 插件”。


daemon_memcached_engine_lib_path

属性
Command-Line 格式--daemon-memcached-engine-lib-path=dir_name
系统变量daemon_memcached_engine_lib_path
范围全球
动态没有
类型目录 name
默认值NULL

包含实现InnoDB memcached插件的共享 library 的目录的路径。默认的 value 为 NULL,表示 MySQL 插件目录。除非为位于 MySQL 插件目录之外的其他存储引擎指定memcached插件,否则不需要修改此参数。

有关更多信息,请参阅第 14.20.3 节,“设置 InnoDB memcached 插件”。


daemon_memcached_option

属性
Command-Line 格式--daemon-memcached-option=options
系统变量daemon_memcached_option
范围全球
动态没有
类型
默认值``

用于在启动时将 space-separated memcached 选项传递给基础memcached memory object 缓存守护程序。对于 example,您可以更改memcached侦听的 port,减少最大并发连接数,更改 key-value 对的最大 memory 大小,或为 error log 启用调试消息。

有关使用详情,请参阅第 14.20.3 节,“设置 InnoDB memcached 插件”。有关memcached选项的信息,请参阅memcached手册页。


daemon_memcached_r_batch_size

属性
Command-Line 格式--daemon-memcached-r-batch-size=#
系统变量daemon_memcached_r_batch_size
范围全球
动态没有
类型整数
默认值1

指定在执行承诺以启动新 transaction 之前要执行的memcached读取操作(get操作)的数量。 daemon_memcached_w_batch_size的对应部分。

默认情况下,此 value 设置为 1,因此对memcached操作立即可以看到通过 SQL statements 对 table 所做的任何更改。您可以增加它以减少系统上频繁提交的开销,而只能通过memcached接口访问底层 table。如果将 value 设置得太大,则撤消或重做数据的数量可能会产生一些存储开销,就像任何 long-running transaction 一样。

有关更多信息,请参阅第 14.20.3 节,“设置 InnoDB memcached 插件”。


daemon_memcached_w_batch_size

属性
Command-Line 格式--daemon-memcached-w-batch-size=#
系统变量daemon_memcached_w_batch_size
范围全球
动态没有
类型整数
默认值1

指定在执行承诺以启动新 transaction 之前要执行的memcached写操作(例如addsetincr)的数量。 daemon_memcached_r_batch_size的对应部分。

默认情况下,此 value 设置为 1,前提是存储的数据在发生中断时很重要,应立即提交。存储 non-critical 数据时,可以增加此 value 以减少频繁提交的开销;但是如果发生崩溃,最后的N -1 未提交的写操作可能会丢失。

有关更多信息,请参阅第 14.20.3 节,“设置 InnoDB memcached 插件”。


ignore_builtin_innodb

属性
Command-Line 格式--ignore-builtin-innodb[={OFF\|ON}]
****已过时
系统变量ignore_builtin_innodb
范围全球
动态没有
类型Boolean

在早期版本的 MySQL 中,启用此变量会导致服务器的行为就像 built-in InnoDB不存在一样,这样就可以使用InnoDB Plugin。在 MySQL 5.7 中,InnoDB是默认存储引擎,并且未使用InnoDB Plugin,因此忽略此变量。


innodb_adaptive_flushing

属性
Command-Line 格式--innodb-adaptive-flushing[={OFF\|ON}]
系统变量innodb_adaptive_flushing
范围全球
动态
类型Boolean
默认值ON

指定是否根据工作负载动态调整InnoDB 缓冲池中的刷新率脏页面。动态调整刷新率旨在避免突发 I/O 活动。默认情况下启用此设置。有关更多信息,请参见第 14.8.3.5 节,“配置缓冲池刷新”。有关一般 I/O 调整建议,请参阅第 8.5.8 节,“优化 InnoDB 磁盘 I/O”。


innodb_adaptive_flushing_lwm

属性
Command-Line 格式--innodb-adaptive-flushing-lwm=#
系统变量innodb_adaptive_flushing_lwm
范围全球
动态
类型整数
默认值10
最低 Value0
最大 Value70

定义低水位标记,表示启用自适应冲洗的重做 log容量的百分比。有关更多信息,请参阅第 14.8.3.5 节,“配置缓冲池刷新”。


innodb_adaptive_hash_index

属性
Command-Line 格式--innodb-adaptive-hash-index[={OFF\|ON}]
系统变量innodb_adaptive_hash_index
范围全球
动态
类型Boolean
默认值ON

是否启用InnoDB 自适应哈希索引。根据您的工作负载,可能需要动态启用或禁用自适应哈希索引以改进查询性能。由于自适应哈希索引可能对所有工作负载都没有用,因此可以使用实际工作负载来启用和禁用基准测试。有关详细信息,请参阅第 14.5.3 节,“自适应哈希指数”。

默认情况下启用此变量。您可以使用SET GLOBAL语句修改此参数,而无需重新启动服务器。在运行时更改设置需要足以设置 global 系统变量的权限。见第 5.1.8.1 节,“系统变量权限”。您也可以在服务器启动时使用--skip-innodb-adaptive-hash-index来禁用它。

禁用自适应哈希索引会立即清空哈希 table。当 hashtable 被清空时,正常操作可以继续,并且执行使用 hash table 的查询直接访问索引 B-trees。当自适应散列索引是 re-enabled 时,在正常操作期间再次填充散列 table。


innodb_adaptive_hash_index_parts

属性
Command-Line 格式--innodb-adaptive-hash-index-parts=#
****介绍5.7.8
系统变量innodb_adaptive_hash_index_parts
范围全球
动态没有
类型数字
默认值8
最低 Value1
最大 Value512

分区自适应哈希索引搜索系统。每个索引都绑定到一个特定的分区,每个分区都由一个单独的锁存器保护。

在早期版本中,自适应哈希索引搜索系统受到单个锁存器(btr_search_latch)的保护,这可能成为争用的焦点。随着innodb_adaptive_hash_index_parts选项的引入,搜索系统默认分为 8 个部分。最大设置为 512。

有关相关信息,请参阅第 14.5.3 节,“自适应哈希指数”。


innodb_adaptive_max_sleep_delay

属性
Command-Line 格式--innodb-adaptive-max-sleep-delay=#
系统变量innodb_adaptive_max_sleep_delay
范围全球
动态
类型整数
默认值150000
最低 Value0
最大 Value1000000

允许InnoDB根据当前工作负载自动调整innodb_thread_sleep_delay的值上下。任何非零 value 都可以自动动态调整innodb_thread_sleep_delay value,直到innodb_adaptive_max_sleep_delay选项中指定的最大 value。 value 表示微秒数。此选项在繁忙的系统中非常有用,其中包含超过 16 个InnoDB个线程。 (在实践中,它对于具有数百或数千个同时 connections.)的 MySQL 系统最有价值。

有关更多信息,请参阅部分 14.8.5,“为 InnoDB 配置线程并发”。


innodb_additional_mem_pool_size

属性
Command-Line 格式--innodb-additional-mem-pool-size=#
****已过时是(在 5.7.4 中删除)
系统变量innodb_additional_mem_pool_size
范围全球
动态没有
类型整数
默认值8388608
最低 Value2097152
最大 Value4294967295

memory 池InnoDB的大小(以字节为单位)用于 store 数据字典信息和其他内部数据结构。您在 application 中拥有的表越多,您在此处分配的 memory 就越多。如果InnoDB在此池中用尽 memory,它将开始从操作系统分配 memory 并将警告消息写入 MySQL 错误 log。默认的 value 是 8MB。

此变量与InnoDB内部 memory 分配器有关,如果启用了innodb_use_sys_malloc,则该分配器未使用。有关更多信息,请参阅第 14.8.4 节,“为 InnoDB 配置 Memory 分配器”。


innodb_api_bk_commit_interval

属性
Command-Line 格式--innodb-api-bk-commit-interval=#
系统变量innodb_api_bk_commit_interval
范围全球
动态
类型整数
默认值5
最低 Value1
最大 Value1073741824

多久 auto-commit idle 使用InnoDB memcached接口的连接,以秒为单位。有关更多信息,请参阅Section 14.20.5.4,“控制 InnoDB memcached 插件的 Transactional 行为”。


innodb_api_disable_rowlock

属性
Command-Line 格式--innodb-api-disable-rowlock[={OFF\|ON}]
系统变量innodb_api_disable_rowlock
范围全球
动态没有
类型Boolean
默认值OFF

InnoDB memcached执行 DML 操作时,使用此选项禁用行锁。默认情况下,innodb_api_disable_rowlock被禁用,这意味着memcached请求getset操作的行锁。启用innodb_api_disable_rowlock时,memcached请求 table 锁而不是行锁。

innodb_api_disable_rowlock不是动态的。它必须在mysqld命令 line 上指定或在 MySQL configuration 文件中输入。 Configuration 在安装插件时生效,这在 MySQL 服务器启动时发生。

有关更多信息,请参阅Section 14.20.5.4,“控制 InnoDB memcached 插件的 Transactional 行为”。


innodb_api_enable_binlog

属性
Command-Line 格式--innodb-api-enable-binlog[={OFF\|ON}]
系统变量innodb_api_enable_binlog
范围全球
动态没有
类型Boolean
默认值OFF

允许您使用带有 MySQL 二进制 log的InnoDB memcached插件。有关更多信息,请参阅启用 InnoDB memcached 二进制 Log。


innodb_api_enable_mdl

属性
Command-Line 格式--innodb-api-enable-mdl[={OFF\|ON}]
系统变量innodb_api_enable_mdl
范围全球
动态没有
类型Boolean
默认值OFF

锁定InnoDB memcached插件使用的 table,以便DDL不能通过 SQL 接口删除或更改它。有关更多信息,请参阅Section 14.20.5.4,“控制 InnoDB memcached 插件的 Transactional 行为”。


innodb_api_trx_level

属性
Command-Line 格式--innodb-api-trx-level=#
系统变量innodb_api_trx_level
范围全球
动态
类型整数
默认值0

控制memcached接口处理的查询的 transaction 隔离 level。与熟悉的名称对应的常量是:

  • 0 = 阅读不满意

  • 1 = 阅读提交

  • 2 = 可重复阅读

  • 3 = SERIALIZABLE

有关更多信息,请参阅Section 14.20.5.4,“控制 InnoDB memcached 插件的 Transactional 行为”。


innodb_autoextend_increment

属性
Command-Line 格式--innodb-autoextend-increment=#
系统变量innodb_autoextend_increment
范围全球
动态
类型整数
默认值64
最低 Value1
最大 Value1000

用于在 auto-extending InnoDB 系统表空间文件变满时扩展其大小的增量大小(以兆字节为单位)。默认 value 为 64.有关相关信息,请参阅系统表空间数据文件 Configuration和调整系统表空间的大小。

innodb_autoextend_increment设置不会影响file-per-table tablespace files 或一般表空间 files。无论innodb_autoextend_increment设置如何,这些 files 都是 auto-extending。初始 extensions 是少量的,之后 extensions 以 4MB 的增量出现。


innodb_autoinc_lock_mode

属性
Command-Line 格式--innodb-autoinc-lock-mode=#
系统变量innodb_autoinc_lock_mode
范围全球
动态没有
类型整数
默认值1
有效值0
1
2

锁定模式用于生成auto-increment值。对于传统,连续或交错,允许值分别为 0,1 或 2。默认设置为 1(连续)。有关每种锁定模式的特性,请参阅InnoDB AUTO_INCREMENT 锁定模式。


innodb_background_drop_list_empty

属性
Command-Line 格式--innodb-background-drop-list-empty[={OFF\|ON}]
****介绍5.7.10
系统变量innodb_background_drop_list_empty
范围全球
动态
类型Boolean
默认值OFF

启用innodb_background_drop_list_empty调试选项有助于通过延迟 table 创建来避免测试用例失败,直到后台下拉列表为空。例如,如果测试用例 A 将 table t1放在后台下拉列表中,则测试用例 B 将等待,直到后台下拉列表为空__ating table t1


innodb_buffer_pool_chunk_size

属性
Command-Line 格式--innodb-buffer-pool-chunk-size=#
****介绍5.7.5
系统变量innodb_buffer_pool_chunk_size
范围全球
动态没有
类型整数
默认值134217728
最低 Value1048576
最大 Valueinnodb_buffer_pool_size / innodb_buffer_pool_instances

innodb_buffer_pool_chunk_size定义InnoDB缓冲池大小调整操作的块大小。 innodb_buffer_pool_size参数是动态的,它允许您在不重新启动服务器的情况下调整缓冲池的大小。

为避免在调整大小操作期间复制所有缓冲池页面,操作以“块”执行。默认情况下,innodb_buffer_pool_chunk_size是 128MB(134217728 字节)。块中包含的页数取决于innodb_page_size的 value。 innodb_buffer_pool_chunk_size可以以 1MB(1048576 字节)为单位增加或减少。

更改innodb_buffer_pool_chunk_size value 时,以下条件适用:

  • 如果初始化缓冲池时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将自动舍入为 value,该值等于innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances的倍数。初始化缓冲池时会进行调整。

重要
更改innodb_buffer_pool_chunk_size时应小心,因为更改此 value 会自动增加缓冲池的大小。在更改innodb_buffer_pool_chunk_size之前,计算它对innodb_buffer_pool_size的影响,以确保生成的缓冲池大小可以接受。
为避免潜在的 performance 问题,块数(innodb_buffer_pool_size/innodb_buffer_pool_chunk_size)不应超过 1000。

有关更多信息,请参见第 14.8.3.1 节,“配置 InnoDB 缓冲池大小”。


innodb_buffer_pool_dump_at_shutdown

属性
Command-Line 格式--innodb-buffer-pool-dump-at-shutdown[={OFF\|ON}]
系统变量innodb_buffer_pool_dump_at_shutdown
范围全球
动态
类型Boolean
默认 Value(> = 5.7.7)ON
默认 Value(<= 5.7.6)OFF

指定在 MySQL 服务器关闭时是否__ord InnoDB 缓冲池中缓存的页面,以在下次重新启动时缩短暖身 process。通常与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 节,“保存和恢复缓冲池 State”。


innodb_buffer_pool_dump_now

属性
Command-Line 格式--innodb-buffer-pool-dump-now[={OFF\|ON}]
系统变量innodb_buffer_pool_dump_now
范围全球
动态
类型Boolean
默认值OFF

立即记录InnoDB 缓冲池中缓存的页面。通常与innodb_buffer_pool_load_now结合使用。

有关更多信息,请参阅第 14.8.3.6 节,“保存和恢复缓冲池 State”。


innodb_buffer_pool_dump_pct

属性
Command-Line 格式--innodb-buffer-pool-dump-pct=#
****介绍5.7.2
系统变量innodb_buffer_pool_dump_pct
范围全球
动态
类型整数
默认 Value(> = 5.7.7)25
默认 Value(<= 5.7.6)100
最低 Value1
最大 Value100

指定每个缓冲池最近使用的页面读取和转储的百分比。范围是 1 到 100.默认的 value 是 25.对于 example,如果有 4 个缓冲池,每个缓冲池有 100 个页面,并且innodb_buffer_pool_dump_pct设置为 25,则会转储每个缓冲池中最近使用的 25 个页面。

对innodb_buffer_pool_dump_pct default value 的更改与innodb_buffer_pool_dump_at_shutdown和innodb_buffer_pool_load_at_startup的默认 value 更改一致,默认情况下在 MySQL 5.7 中都启用了。


innodb_buffer_pool_filename

属性
Command-Line 格式--innodb-buffer-pool-filename=file_name
系统变量innodb_buffer_pool_filename
范围全球
动态
类型文件名
默认值ib_buffer_pool

指定包含由innodb_buffer_pool_dump_at_shutdown或innodb_buffer_pool_dump_now生成的表空间 ID 和页面 ID 列表的文件的 name。表空间 ID 和页面 ID 以以下格式保存:space, page_id。默认情况下,该文件名为ib_buffer_pool,位于InnoDB数据目录中。必须相对于数据目录指定 non-default 位置。

可以使用组语句在运行时指定文件 name:

SET GLOBAL innodb_buffer_pool_filename='file_name';

您还可以在启动时在启动 string 或 MySQL configuration 文件中指定文件 name。在启动时指定文件 name 时,该文件必须存在,否则将_return 一个启动错误,指示没有此类文件或目录。

有关更多信息,请参阅第 14.8.3.6 节,“保存和恢复缓冲池 State”。


innodb_buffer_pool_instances

属性
Command-Line 格式--innodb-buffer-pool-instances=#
系统变量innodb_buffer_pool_instances
范围全球
动态没有
类型整数
默认 Value(其他)8 (or 1 if innodb_buffer_pool_size < 1GB
默认 Value(Windows,32-bit 平台)(autosized)
最低 Value1
最大 Value64

InnoDB 缓冲池分为的区域数。对于具有 multi-gigabyte 范围内的缓冲池的系统,将缓冲池划分为单独的实例可以通过减少不同线程读取和写入缓存页面时的争用来提高并发性。存储在缓冲池中或从缓冲池读取的每个页面都使用散列 function 随机分配给其中一个缓冲池实例。每个缓冲池管理自己的空闲 lists,flush lists,LRU以及连接到缓冲池的所有其他数据结构,并受其自己的缓冲池mutex保护。

此选项仅在将innodb_buffer_pool_size设置为 1GB 或更多时生效。总缓冲池大小在所有缓冲池之间划分。为了获得最佳效率,请指定innodb_buffer_pool_instances和innodb_buffer_pool_size的组合,以便每个缓冲池实例至少为 1GB。

32-bit Windows 系统上的默认 value 取决于innodb_buffer_pool_size的 value,如下所述:

  • 如果innodb_buffer_pool_size大于 1.3GB,则innodb_buffer_pool_instances的默认值为innodb_buffer_pool_size /128MB,每个块的单独 memory 分配请求。选择 1.3GB 作为边界,在该边界上 32-bit Windows 无法分配单个缓冲池所需的连续地址空间。

  • 否则,默认值为 1。

在所有其他平台上,当innodb_buffer_pool_size大于或等于 1GB 时,默认 value 为 8。否则,默认值为 1。

有关相关信息,请参阅第 14.8.3.1 节,“配置 InnoDB 缓冲池大小”。


innodb_buffer_pool_load_abort

属性
Command-Line 格式--innodb-buffer-pool-load-abort[={OFF\|ON}]
系统变量innodb_buffer_pool_load_abort
范围全球
动态
类型Boolean
默认值OFF

中断恢复由innodb_buffer_pool_load_at_startup或innodb_buffer_pool_load_now触发的InnoDB 缓冲池内容的 process。

有关更多信息,请参阅第 14.8.3.6 节,“保存和恢复缓冲池 State”。


innodb_buffer_pool_load_at_startup

属性
Command-Line 格式--innodb-buffer-pool-load-at-startup[={OFF\|ON}]
系统变量innodb_buffer_pool_load_at_startup
范围全球
动态没有
类型Boolean
默认 Value(> = 5.7.7)ON
默认 Value(<= 5.7.6)OFF

指定在 MySQL 服务器启动时,InnoDB 缓冲池自动热身通过_加载它在较早 time 时保存的相同页面。通常与innodb_buffer_pool_dump_at_shutdown结合使用。

innodb_buffer_pool_dump_at_shutdown和innodb_buffer_pool_load_at_startup都默认启用。

有关更多信息,请参阅第 14.8.3.6 节,“保存和恢复缓冲池 State”。


innodb_buffer_pool_load_now

属性
Command-Line 格式--innodb-buffer-pool-load-now[={OFF\|ON}]
系统变量innodb_buffer_pool_load_now
范围全球
动态
类型Boolean
默认值OFF

通过_加载一组数据页,无需等待服务器重启。在基准测试期间将 cache memory 带回已知的 state,或者在 running 查询报告或维护之后让 MySQL 服务器恢复正常工作负载会很有用。

有关更多信息,请参阅第 14.8.3.6 节,“保存和恢复缓冲池 State”。


innodb_buffer_pool_size

属性
Command-Line 格式--innodb-buffer-pool-size=#
系统变量innodb_buffer_pool_size
范围全球
动态(> = 5.7.5)
动态(<= 5.7.4)没有
类型整数
默认值134217728
最低 Value5242880
最大 Value(64-bit 平台)2**64-1
最大 Value(32-bit 平台)2**32-1

缓冲池的字节大小,memory 区域InnoDB缓存 table 和索引数据。默认 value 是 134217728 字节(128MB)。最大 value 取决于 CPU architecture; 32-bit 系统上的最大值为 4294967295(232-1),64-bit 系统上的最大值为 18446744073709551615(264-1)。在 32-bit 系统上,CPU architecture 和操作系统可能会施加比实际最大值更小的实际最大值。当缓冲池的大小大于 1GB 时,将innodb_buffer_pool_instances设置为大于 1 的 value 可以提高繁忙服务器的可伸缩性。

较大的缓冲池需要较少的磁盘 I/O 来多次访问相同的 table 数据。在专用数据库服务器上,您可以将缓冲池大小设置为计算机物理 memory 大小的 80%。配置缓冲池大小时,请注意以下潜在问题,并准备在必要时缩小缓冲池的大小。

  • 物理 memory 的竞争可能导致操作系统中的分页。

  • InnoDB为缓冲区和控制结构保留额外的 memory,以便总分配空间比指定的缓冲池大小大约 10%。

  • 缓冲池的地址空间必须是连续的,这可能是带有在特定地址加载的 DLL 的 Windows 系统上的问题。

  • 初始化缓冲池的 time 大致与其大小成比例。在具有大缓冲池的实例上,初始化 time 可能很重要。要减少初始化时间,可以在服务器关闭时保存缓冲池 state,并在服务器启动时将其还原。见第 14.8.3.6 节,“保存和恢复缓冲池 State”。

增大或减小缓冲池大小时,操作将以块的形式执行。块大小由innodb_buffer_pool_chunk_size变量定义,其默认值为 128 MB。

缓冲池大小必须始终等于innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances的倍数或倍数。如果将缓冲池大小更改为 value 不等于innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances的倍数,则缓冲池大小将自动调整为 value,该值等于innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances的倍数。

innodb_buffer_pool_size可以动态设置,允许您在不重新启动服务器的情况下调整缓冲池的大小。 Innodb_buffer_pool_resize_status状态变量报告联机缓冲池大小调整操作的状态。有关更多信息,请参见第 14.8.3.1 节,“配置 InnoDB 缓冲池大小”。


innodb_change_buffer_max_size

属性
Command-Line 格式--innodb-change-buffer-max-size=#
系统变量innodb_change_buffer_max_size
范围全球
动态
类型整数
默认值25
最低 Value0
最大 Value50

InnoDB 改变缓冲区的最大大小,占缓冲池总大小的百分比。您可以为具有大量插入,更新和删除活动的 MySQL 服务器增加此 value,或者为具有用于报告的不变数据的 MySQL 服务器减少该值。有关更多信息,请参阅第 14.5.2 节,“更改缓冲区”。有关一般的 I/O 调整建议,请参阅第 8.5.8 节,“优化 InnoDB 磁盘 I/O”。


innodb_change_buffering

属性
Command-Line 格式--innodb-change-buffering=value
系统变量innodb_change_buffering
范围全球
动态
类型列举
默认值all
有效值none
inserts
deletes
changes
purges
all

InnoDB是否执行改变缓冲,这是一种优化,可将写入操作延迟到二级索引,以便可以按顺序执行 I/O 操作。允许的值在以下 table 中描述。

表 14.20 innodb_change_buffering 允许的值

描述
none不要缓冲任何操作。
inserts缓冲插入操作。
deletes缓冲删除标记操作;严格地说,标记索引的写入记录以便在清除操作期间稍后删除。
changes缓冲区插入和 delete-marking 操作。
purges缓冲后台发生的物理删除操作。
all默认。缓冲区插入,delete-marking 操作和清除。

有关更多信息,请参阅第 14.5.2 节,“更改缓冲区”。有关一般的 I/O 调整建议,请参阅第 8.5.8 节,“优化 InnoDB 磁盘 I/O”。


innodb_change_buffering_debug

属性
Command-Line 格式--innodb-change-buffering-debug=#
系统变量innodb_change_buffering_debug
范围全球
动态
类型整数
默认值0
最大 Value2

InnoDB更改缓冲设置调试 flag。 value 为 1 会强制更改缓冲区的所有更改。 value 为 2 会导致合并时崩溃。默认值 value 为 0 表示未设置更改缓冲调试 flag。只有在使用WITH_DEBUG CMake选项编译调试支持时,此选项才可用。


innodb_checksum_algorithm

属性
Command-Line 格式--innodb-checksum-algorithm=value
系统变量innodb_checksum_algorithm
范围全球
动态
类型列举
默认 Value(> = 5.7.7)crc32
默认 Value(<= 5.7.6)innodb
有效值innodb
crc32
none
strict_innodb
strict_crc32
strict_none

指定如何生成和验证存储在InnoDB 表空间的磁盘块中的校验。 crc32是 MySQL 5.7.7 的默认 value。

innodb_checksum_algorithm替换了innodb_checksums选项。为兼容性提供了以下值,包括 MySQL 5.7.6:

  • innodb_checksums=ONinnodb_checksum_algorithm=innodb相同。

  • innodb_checksums=OFFinnodb_checksum_algorithm=none相同。

从 MySQL 5.7.7 开始,默认innodb_checksum_algorithm value 为 crc32,innodb_checksums=ON现在与innodb_checksum_algorithm=crc32相同。 innodb_checksums=OFF仍然与innodb_checksum_algorithm=none相同。

为避免冲突,请从 MySQL configuration files 和启动脚本中删除_re的 reference。

value innodb与早期版本的 MySQL 一样 backward-compatible。 value crc32使用一种算法,该算法可以更快地计算每个已修改块的校验和,并检查每个磁盘读取的校验和。它在 time 扫描块 32 位,这比innodb校验和算法快,后者在 time 扫描块 8 位。 value none在校验和字段中写入常量 value,而不是根据块数据计算 value。表空间中的块可以使用旧的,新的和没有校验和值的混合,随着数据的修改逐渐更新;一旦表空间中的块被修改为使用crc32算法,早期版本的 MySQL 就无法读取关联的表。

校验和算法的严格形式如果在表空间中遇到有效但 non-matching 校验和 value 则报告错误。建议您仅在新实例中使用严格设置,以便为第一个 time 设置表空间。严格的设置有点快,因为它们不需要在磁盘读取期间计算所有校验和值。

注意
在 MySQL 5.7.8 之前,innodb_checksum_algorithm的严格模式设置导致InnoDB在遇到有效但 non-matching 校验和时停止。在 MySQL 5.7.8 及更高版本中,只打印一条错误消息,如果页面具有有效的innodbcrc32none校验和,则该页面被视为有效。
以下 table 显示noneinnodbcrc32选项值及其严格对应值之间的差异。 noneinnodbcrc32将指定类型的校验和 value 写入每个数据块,但为了兼容性,在读取操作期间验证块时接受其他校验和值。严格设置也接受有效的校验和值,但在遇到有效的 non-matching checksum value 时打印错误消息。如果实例中的所有InnoDB data files 都是在相同的innodb_checksum_algorithm value 下创建的,则使用 strict 表单可以加快验证速度。

表 14.21 允许 innodb_checksum_algorithm 值

生成的校验和(写入时)允许的校验和(阅读时)
没有一个常数。noneinnodbcrc32生成的任何校验和。
InnoDB使用InnoDB中的原始算法在软件中计算校验和。noneinnodbcrc32生成的任何校验和。
CRC32校验和使用crc32算法计算,可能使用硬件辅助完成。noneinnodbcrc32生成的任何校验和。
strictnone一个常数noneinnodbcrc32生成的任何校验和。如果遇到有效但 non-matching 校验和,InnoDB将显示错误消息。
strict_innodb使用InnoDB中的原始算法在软件中计算校验和。noneinnodbcrc32生成的任何校验和。如果遇到有效但 non-matching 校验和,InnoDB将显示错误消息。
strict_crc32校验和使用crc32算法计算,可能使用硬件辅助完成。noneinnodbcrc32生成的任何校验和。如果遇到有效但 non-matching 校验和,InnoDB将显示错误消息。

MySQL 企业备份到 3.8.0 的版本不支持备份使用 CRC32 校验和的表空间。 MySQL 企业备份在 3.8.1 中添加了 CRC32 校验和支持,但有一些限制。有关更多信息,请参阅MySQL 企业备份 3.8.1 更改历史记录。


innodb_checksums

属性
Command-Line 格式--innodb-checksums[={OFF\|ON}]
****已过时
系统变量innodb_checksums
范围全球
动态没有
类型Boolean
默认值ON

InnoDB可以在从磁盘读取的所有表空间页面上使用校验验证,以确保针对硬件故障或损坏的数据 files 的额外容错。默认情况下启用此验证。在特殊情况下(例如_运行基准测试时),可以使用--skip-innodb-checksums禁用此安全 feature。您可以使用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默认 value 为crc32innodb_checksums=ON与innodb_checksum_algorithm=crc32相同。 innodb_checksums=OFF与innodb_checksum_algorithm=none相同。

从 configuration files 和启动脚本中删除任何innodb_checksums选项以避免与innodb_checksum_algorithm冲突。 innodb_checksums=OFF自动 sets innodb_checksum_algorithm=noneinnodb_checksums=ON被忽略并被innodb_checksum_algorithm的任何其他设置覆盖。


innodb_cmp_per_index_enabled

属性
Command-Line 格式--innodb-cmp-per-index-enabled[={OFF\|ON}]
系统变量innodb_cmp_per_index_enabled
范围全球
动态
类型Boolean
默认值OFF

在INFORMATIONSCHEMA.INNODB_CMP_PER_INDEX table 中启用 per-index compression-related 统计信息。由于这些统计信息的收集成本很高,因此只能在与InnoDB 压缩表相关的 performance 调整期间在开发,测试或从属实例上启用此选项。

有关更多信息,请参阅第 24.32.6 节,“INFORMATIONSCHEMA INNODB_CMP_PER_INDEX 和 INNODB_CMP_PER_INDEX_RESET 表”和第 14.9.1.4 节,“运行时监控 InnoDB Table 压缩”。


innodb_commit_concurrency

属性
Command-Line 格式--innodb-commit-concurrency=#
系统变量innodb_commit_concurrency
范围全球
动态
类型整数
默认值0
最低 Value0
最大 Value1000

的数量可以在 time同时承诺。 value 为 0(默认值)允许任意数量的transactions同时提交。

innodb_commit_concurrency的 value 在运行时不能从零更改为非零,反之亦然。 value 可以从一个非零值更改为另一个非零值。


innodb_compress_debug

属性
Command-Line 格式--innodb-compress-debug=value
****介绍5.7.8
系统变量innodb_compress_debug
范围全球
动态
类型列举
默认值none
有效值none
zlib
lz4
lz4hc

使用指定的压缩算法压缩所有表,而不必为每个 table 定义COMPRESSION属性。只有在使用WITH_DEBUG CMake选项编译调试支持时,此选项才可用。

有关相关信息,请参阅第 14.9.2 节,“InnoDB 页面压缩”。


innodb_compression_failure_threshold_pct

属性
Command-Line 格式--innodb-compression-failure-threshold-pct=#
系统变量innodb_compression_failure_threshold_pct
范围全球
动态
类型整数
默认值5
最低 Value0
最大 Value100

定义 table 的压缩失败率阈值,以百分比表示,此时 MySQL 开始在压缩页面内添加填充以避免昂贵的压缩失败。当此阈值通过时,MySQL 开始在每个新压缩页面中留出额外的可用空间,动态调整可用空间量,直至innodb_compression_pad_pct_max指定的页面大小百分比。 value 为零会禁用监视压缩效率并动态调整填充量的机制。

有关更多信息,请参阅部分 14.9.1.6,“压缩 OLTP 工作负载”。


innodb_compression_level

属性
Command-Line 格式--innodb-compression-level=#
系统变量innodb_compression_level
范围全球
动态
类型整数
默认值6
最低 Value0
最大 Value9

指定用于InnoDB 压缩表和索引的 zlib 压缩的 level。较高的 value 允许您将更多数据放入存储设备,但代价是压缩期间会产生更多的 CPU 开销。较低的 value 可以在存储空间不重要时降低 CPU 开销,或者您希望数据不是特别可压缩的。

有关更多信息,请参阅部分 14.9.1.6,“压缩 OLTP 工作负载”。


innodb_compression_pad_pct_max

属性
Command-Line 格式--innodb-compression-pad-pct-max=#
系统变量innodb_compression_pad_pct_max
范围全球
动态
类型整数
默认值50
最低 Value0
最大 Value75

指定在每个压缩的页中可以保留为可用空间的最大百分比,允许在更新压缩 table 或索引并且可以重新压缩数据时重新组织数据并修改页面内的 log。仅当innodb_compression_failure_threshold_pct设置为非零 value 且压缩失败的速率超过截止点时才适用。

有关更多信息,请参阅部分 14.9.1.6,“压缩 OLTP 工作负载”。


innodb_concurrency_tickets

属性
Command-Line 格式--innodb-concurrency-tickets=#
系统变量innodb_concurrency_tickets
范围全球
动态
类型整数
默认值5000
最低 Value1
最大 Value4294967295

确定可以同时输入InnoDB的线程的数量。如果线程数已达到并发限制,则当线程尝试输入InnoDB时,该线程将被置于队列中。当一个线程被允许输入InnoDB时,会给它一些等于innodb_concurrency_tickets的 value 的“票据”,并且该线程可以自由地进入和离开InnoDB,直到它用完它的票据。在那之后,线程再次受到并发检查(并且可能排队)的下一个 time 尝试输入InnoDB。默认的 value 是 5000。

使用一个小innodb_concurrency_tickets value,只需要处理几行的小 transactions 与处理多行的较大 transactions 相当竞争。小innodb_concurrency_tickets value 的缺点是大 transactions 必须在它们完成之前多次遍历队列,这延长了完成任务所需的 time 的数量。

对于大的innodb_concurrency_tickets value,大 transactions 花费较少 time 等待队列末尾的位置(由innodb_thread_concurrency控制)和更多 time 检索行。大型 transactions 还需要更少的队列行程才能完成任务。一个大的innodb_concurrency_tickets value 的缺点是,在同一个 time 上运行太多的大 transactions 会使较小的 transactions 挨饿,因为它们会在执行前等待更长的 time。

使用非零innodb_thread_concurrency value,您可能需要向上或向下调整innodb_concurrency_tickets value 以找到较大和较小 transactions 之间的最佳平衡。 SHOW ENGINE INNODB STATUS报告显示在当前传递队列中执行 transaction 的剩余票数。此数据也可以从INFORMATIONSCHEMA.INNODB_TRX table 的TRX_CONCURRENCY_TICKETS列获得。

有关更多信息,请参阅部分 14.8.5,“为 InnoDB 配置线程并发”。


innodb_data_file_path

属性
Command-Line 格式--innodb-data-file-path=file_name
系统变量innodb_data_file_path
范围全球
动态没有
类型
默认值ibdata1:12M:autoextend

定义InnoDB系统表空间数据 files 的 name,大小和属性。如果没有为innodb_data_file_path指定 value,则默认行为是创建一个稍大于 12MB 的 auto-extending 数据文件,名为ibdata1

数据文件规范的完整语法包括文件 name,文件大小,autoextend属性和max属性:

file_name:file_size[:autoextend[:max:max_file_size]]

通过将KMG附加到 value 大小,可以以千字节,兆字节或千兆字节为单位指定文件大小。如果以千字节为单位指定数据文件大小,请以 1024 的倍数执行此操作。否则,KB 值将四舍五入为最接近的兆字节(MB)边界。文件大小的总和必须至少略大于 12MB。

有关其他配置信息,请参阅系统表空间数据文件 Configuration。有关调整指令的大小,请参阅调整系统表空间的大小。


innodb_data_home_dir

属性
Command-Line 格式--innodb-data-home-dir=dir_name
系统变量innodb_data_home_dir
范围全球
动态没有
类型目录 name

InnoDB 系统表空间 data files 的目录路径的 common 部分。启用innodb_file_pertable时,此设置不会影响file-per-table表空间的位置。默认的 value 是 MySQL data目录。如果将 value 指定为空 string,则可以为innodb_data_file_path指定绝对文件 paths。

为innodb_data_home_dir指定 value 时需要使用尾部斜杠。例如:

[mysqld]
innodb_data_home_dir = /path/to/myibdata/

有关相关信息,请参阅Section 14.8.1,“InnoDB Startup Configuration”。


innodb_deadlock_detect

属性
Command-Line 格式--innodb-deadlock-detect[={OFF\|ON}]
****介绍5.7.15
系统变量innodb_deadlock_detect
范围全球
动态
类型Boolean
默认值ON

此选项用于禁用死锁检测。在高并发系统上,当许多线程等待同一个锁时,死锁检测会导致速度减慢。有时,在发生死锁时,禁用死锁检测并依赖设置进行 transaction 回滚可能更有效。

有关相关信息,请参阅第 14.7.5.2 节,“死锁检测和回滚”。


innodb_default_row_format

属性
Command-Line 格式--innodb-default-row-format=value
****介绍5.7.9
系统变量innodb_default_row_format
范围全球
动态
类型列举
默认值DYNAMIC
有效值DYNAMIC
COMPACT
REDUNDANT

innodb_default_row_format选项定义InnoDB表和 user-created 临时表的默认行格式。默认设置为DYNAMIC。其他允许的值是COMPACTREDUNDANT。不支持在系统表空间中使用的COMPRESSED行格式不能定义为默认格式。

当未明确指定ROW_FORMAT选项或使用ROW_FORMAT=DEFAULT时,新创建的表使用innodb_default_row_format定义的行格式。

如果未明确指定ROW_FORMAT选项或使用ROW_FORMAT=DEFAULT时,任何重建 table 的操作也会以静默方式将 table 的行格式更改为innodb_default_row_format定义的格式。有关更多信息,请参阅定义 Table 的行格式。

无论innodb_default_row_format设置如何,服务器为 process 查询创建的内部InnoDB临时表都使用DYNAMIC行格式。


innodb_disable_sort_file_cache

属性
Command-Line 格式--innodb-disable-sort-file-cache[={OFF\|ON}]
系统变量innodb_disable_sort_file_cache
范围全球
动态
类型Boolean
默认值OFF

禁用 merge-sort temporary files 的操作系统文件系统缓存。效果是打开这样的 files,相当于O_DIRECT


innodb_disable_resize_buffer_pool_debug

属性
Command-Line 格式--innodb-disable-resize-buffer-pool-debug[={OFF\|ON}]
****介绍5.7.6
系统变量innodb_disable_resize_buffer_pool_debug
范围全球
动态
类型Boolean
默认值ON

禁用InnoDB缓冲池的大小调整。只有在使用WITH_DEBUG CMake选项编译调试支持时,此选项才可用。


innodb_doublewrite

属性
Command-Line 格式--innodb-doublewrite[={OFF\|ON}]
系统变量innodb_doublewrite
范围全球
动态没有
类型Boolean
默认值ON

启用时(默认值),InnoDB 将所有数据存储两次,首先是双写缓冲区,然后是实际的data files。对于基准测试或需要 top performance 而不是关注数据完整性或可能的故障的情况,可以使用--skip-innodb-doublewrite关闭此变量。

如果系统表空间数据 files(ibdata* files)位于支持原子写入的 Fusion-io 设备上,则会自动禁用双写缓冲,并且 Fusion-io 原子写入将用于所有数据 files。由于 doublewrite 缓冲区设置为 global,因此对于驻留在 non-Fusion-io 硬件上的数据 files 也会禁用双写缓冲。此 feature 仅在 Fusion-io 硬件上受支持,仅在 Linux 上为 Fusion-io NVMFS 启用。要充分利用此 feature,建议使用innodb_flush_method设置O_DIRECT

有关相关信息,请参阅第 14.6.5 节,“Doublewrite Buffer”。


innodb_fast_shutdown

属性
Command-Line 格式--innodb-fast-shutdown=#
系统变量innodb_fast_shutdown
范围全球
动态
类型整数
默认值1
有效值0
1
2

InnoDB 关掉模式。如果 value 为 0,则InnoDB执行慢关机,完整清除和更改缓冲区合并,然后关闭。如果 value 为 1(默认值),InnoDB会在关闭时跳过这些操作,process 称为快速关机。如果 value 为 2,则InnoDB刷新其日志并关闭冷,就好像 MySQL 崩溃一样;没有提交 transactions 丢失,但崩溃恢复操作使下一次启动需要更长时间。

在仍然缓冲大量数据的极端情况下,缓慢关闭可能需要几分钟甚至几小时。在升级或降级 MySQL 主要版本之前使用慢速关闭技术,以便在 upgrade process 更新文件格式时完全准备好所有数据 files。

在紧急情况或故障排除情况下使用innodb_fast_shutdown=2,以便在数据存在损坏风险时获得绝对最快的关机。


innodb_fil_make_page_dirty_debug

属性
Command-Line 格式--innodb-fil-make-page-dirty-debug=#
系统变量innodb_fil_make_page_dirty_debug
范围全球
动态
类型整数
默认值0
最大 Value2**32-1

默认情况下,将innodb_fil_make_page_dirty_debug设置为表空间的 ID 会立即弄脏表空间的第一页。如果innodb_saved_page_number_debug设置为 non-default value,则设置innodb_fil_make_page_dirty_debug会污染指定的页面。只有在使用WITH_DEBUG CMake选项编译调试支持时,innodb_fil_make_page_dirty_debug选项才可用。


innodb_file_format

属性
Command-Line 格式--innodb-file-format=value
****已过时5.7.7
系统变量innodb_file_format
范围全球
动态
类型
默认 Value(> = 5.7.7)Barracuda
默认 Value(<= 5.7.6)Antelope
有效值Antelope
Barracuda

为file-per-table表空间启用InnoDB文件格式。支持的文件格式为AntelopeBarracudaAntelope是原始InnoDB文件格式,支持REDUNDANTCOMPACT行格式。 Barracuda是较新的文件格式,支持COMPRESSEDDYNAMIC行格式。

COMPRESSEDDYNAMIC行格式为InnoDB表启用重要的存储 features。见第 14.11 节,“InnoDB 行格式”。

更改innodb_file_format设置不会影响现有InnoDB表空间 files 的文件格式。

innodb_file_format设置不适用于支持所有行格式的表的常规表空间。见第 14.6.3.3 节,“通用表空间”。

MySQL 5.7 中的innodb_file_format默认 value 已更改为Barracuda

创建使用DYNAMIC行格式的表时,将忽略innodb_file_format设置。无论innodb_file_format设置如何,使用DYNAMIC行格式创建的 table 始终使用Barracuda文件格式。要使用COMPRESSED行格式,必须将innodb_file_format设置为Barracuda

不推荐使用innodb_file_format选项,将来的版本中将删除该选项。 innodb_file_format选项的目的是允许用户在早期版本的 MySQL 中降级到InnoDB的 built-in version。现在这些 MySQL 版本已经到了产品生命周期的末尾,不再需要通过此选项提供的降级支持。

有关更多信息,请参阅第 14.10 节,“InnoDB File-Format Management”。


innodb_file_format_check

属性
Command-Line 格式--innodb-file-format-check[={OFF\|ON}]
****已过时5.7.7
系统变量innodb_file_format_check
范围全球
动态没有
类型Boolean
默认值ON

在服务器启动时,此变量可以设置为 1 或 0,以启用或禁用InnoDB是否检查系统表空间中的文件格式标记(对于 example,AntelopeBarracuda)。如果检查标记并且该标记高于InnoDB的当前 version 支持的标记,则会发生错误并且InnoDB不会启动。如果标记不高,InnoDB _将innodb_file_format_max的 value 设置为文件格式标记。

注意
尽管默认 value 有时显示为ONOFF,但始终使用数值 1 或 0 在 configuration 文件或命令 line string 中打开或关闭此选项。
有关更多信息,请参阅第 14.10.2.1 节,“启动 InnoDB 时的兼容性检查”。

innodb_file_format_check选项与innodb_file_format选项一起弃用。这两个选项将在以后的版本中删除。


innodb_file_format_max

属性
Command-Line 格式--innodb-file-format-max=value
****已过时5.7.7
系统变量innodb_file_format_max
范围全球
动态
类型
默认 Value(> = 5.7.9)Barracuda
默认 Value(<= 5.7.8)Antelope
有效值Antelope
Barracuda

在服务器启动时,InnoDB 将此变量的 value 设置为系统表空间中的文件格式标记(对于 example,AntelopeBarracuda)。如果服务器创建或打开具有“更高”文件格式的 table,则将innodb_file_format_max的 value 设置为该格式。

有关相关信息,请参阅第 14.10 节,“InnoDB File-Format Management”。

innodb_file_format_max选项与innodb_file_format选项一起弃用。这两个选项将在以后的版本中删除。


innodb_file_per_table

属性
Command-Line 格式--innodb-file-per-table[={OFF\|ON}]
系统变量innodb_file_per_table
范围全球
动态
类型Boolean
默认值ON

启用innodb_file_pertable时,默认情况下会在 file-per-table 表空间中创建表。禁用时,默认情况下会在系统表空间中创建表。有关 file-per-table 表空间的信息,请参阅第 14.6.3.2 节,“File-Per-Table 表空间”。有关InnoDB系统表空间的信息,请参阅第 14.6.3.1 节,“系统表空间”。

可以使用语句在运行时配置innodb_file_pertable变量,该语句在启动时在命令 line 上指定,或在选项文件中指定。 运行时配置需要足以设置 global 系统变量的权限(请参阅第 5.1.8.1 节,“系统变量权限”)并立即影响所有连接的操作。

当截断或删除驻留在 file-per-table 表空间中的 table 时,释放的空间将返回到操作系统。截断或删除驻留在系统表空间中的 table 只释放系统表空间中的空间。系统表空间中的释放空间可以再次用于InnoDB数据,但不会返回到操作系统,因为系统表空间数据 files 永远不会缩小。

启用innodb_file_pertable时,table 上的 table-copying ALTER TABLE操作驻留在系统表空间中表空间中的 table。要防止这种情况发生,请在驻留在系统表空间中的表上执行 table-copying ALTER TABLE操作之前禁用innodb_file_pertable。

innodb_file_per-table设置不会影响临时表的创建。临时表在临时表空间中创建。见第 14.6.3.5 节,“临时表空间”。


innodb_fill_factor

属性
Command-Line 格式--innodb-fill-factor=#
****介绍5.7.5
系统变量innodb_fill_factor
范围全球
动态
类型整数
默认值100
最低 Value10
最大 Value100

在创建或重建索引时执行批量加载。这种索引创建方法称为“排序索引 build”。

innodb_fill_factor定义在排序索引 build 期间填充的每个 B-tree 页面上的空间百分比,其余空间保留用于将来的索引增长。例如,将innodb_fill_factor设置为 80 会保留每个 B-tree 页面 20%的空间,以便将来进行索引增长。实际百分比可能会有所不同innodb_fill_factor设置被解释为提示而不是硬限制。

innodb_fill_factor设置为 100 会使聚簇索引页面中的空间 1/16 可用于将来的索引增长。

innodb_fill_factor适用于 B-tree leaf 和 non-leaf 页面。它不适用于用于文本或BLOB条目的外部页面。

有关更多信息,请参阅第 14.6.2.3 节,“排序索引构建”。


innodb_flush_log_at_timeout

属性
Command-Line 格式--innodb-flush-log-at-timeout=#
系统变量innodb_flush_log_at_timeout
范围全球
动态
类型整数
默认值1
最低 Value1
最大 Value2700

每隔_3 秒写入并刷新日志。 innodb_flushlog_attimeout允许在 order 中增加刷新之间的超时时间以减少刷新并避免影响二进制 log group commit 的 performance。 innodb_flushlog_attimeout的默认设置是每秒一次。


innodb_flush_log_at_trx_commit

属性
Command-Line 格式--innodb-flush-log-at-trx-commit=#
系统变量innodb_flush_log_at_trx_commit
范围全球
动态
类型列举
默认值1
有效值0
1
2

控制承诺操作的严格酸合规性和更高_性能之间的平衡,当 commit-related I/O 操作重新排列并批量完成时,可以实现更高的 performance。您可以通过更改默认 value 来获得更好的 performance,但是在崩溃中您可能会丢失 transactions。

  • 完全符合 ACID 要求默认设置为 1。在每次 transaction 提交时,日志都会写入并刷新到磁盘。

  • 如果设置为 0,则每秒写入日志并将其刷新到磁盘一次。没有刷新日志的 Transactions 可能会在崩溃中丢失。

  • 如果设置为 2,则在每次 transaction 提交后写入日志,并每秒刷新一次磁盘。没有刷新日志的 Transactions 可能会在崩溃中丢失。

  • 对于设置 0 和 2,once-per-second 刷新不是 100%保证。由于 DDL 更改以及导致日志独立于innodb_flushlog_at_trx_commit设置而刷新的其他内部InnoDB活动,可能会更频繁地发生刷新,有时由于计划问题而不常频繁。如果每秒刷新一次日志,则崩溃中最多可能会丢失一秒的 transactions。如果日志的刷新频率高于或低于每秒一次,则可能丢失的 transactions 数量会相应变化。

  • Log 刷新频率由innodb_flushlog_attimeout控制,允许您将 log 刷新频率设置为N秒(其中N1 ... 2700,默认值为 1)。但是,任何mysqld process 崩溃都可以消除_tra_actions 的N秒。

  • DDL 更改和其他内部InnoDB活动会独立于innodb_flush_log_at_trx_commit设置刷新 log。

  • 无论innodb_flush_log_at_trx_commit设置如何,InnoDB 崩溃恢复都能正常工作。 Transactions 要么完全应用,要么完全删除。

对于使用InnoDB和 transactions 的复制设置的持久性和一致性:

  • 如果启用了 binary logging,请设置sync_binlog=1

  • 始终设置innodb_flush_log_at_trx_commit=1

警告

许多操作系统和一些磁盘硬件欺骗了 flush-to-disk 操作。他们可能会告诉mysqld已经发生了冲洗,即使它没有。在这种情况下,即使使用推荐的设置也无法保证 transactions 的持久性,在最坏的情况下,停电可能会破坏InnoDB数据。在 SCSI 磁盘控制器或磁盘本身中使用 battery-backed 磁盘缓存可加快文件刷新速度,并使操作更安全。您还可以尝试禁用硬件缓存中的磁盘写入缓存。


innodb_flush_method

属性
Command-Line 格式--innodb-flush-method=value
系统变量innodb_flush_method
范围全球
动态没有
类型
默认值NULL
有效值(Windows)async_unbuffered
normal
unbuffered
有效值(Unix)fsync
O_DSYNC
littlesync
nosync
O_DIRECT
O_DIRECT_NO_FSYNC

将用于红晕数据的方法定义为InnoDB data files和日志文件,这会影响 I/O 吞吐量。

如果在 Unix-like 系统上将innodb_flush_method设置为NULL,则默认使用fsync选项。如果在 Windows 上将innodb_flush_method设置为NULL,则默认使用async_unbuffered选项。

Unix-like 系统的innodb_flush_method选项包括:

  • fsyncInnoDB使用fsync()系统调用来刷新数据和 log files。 fsync是默认设置。

  • O_DSYNCInnoDB使用O_SYNC打开并刷新 log files,使用fsync()刷新数据 files。 InnoDB不直接使用O_DSYNC,因为在很多种 Unix 上都存在问题。

  • littlesync:此选项用于内部 performance 测试,目前不受支持。使用风险由您自己承担。

  • nosync:此选项用于内部 performance 测试,目前不受支持。使用风险由您自己承担。

  • O_DIRECTInnoDB使用O_DIRECT(或 Solaris 上的directio())打开数据 files,并使用fsync()来刷新数据和 log files。某些 GNU/Linux 版本,FreeBSD 和 Solaris 上提供了此选项。

  • O_DIRECT_NO_FSYNCInnoDB在刷新 I/O 期间使用O_DIRECT,但在每次写入操作后跳过fsync()系统调用。

在 MySQL 5.7.25 之前,此设置不适用于 XFS 和 EXT4 等文件系统,这些文件系统需要fsync()系统调用来同步文件系统元数据更改。如果您不确定文件系统是否需要fsync()系统调用来同步文件系统元数据更改,请改用O_DIRECT

从 MySQL 5.7.25 开始,在增加文件大小后,在创建新文件之后,在关闭文件之后调用fsync(),以确保文件系统元数据更改是同步的。每次写入操作后仍会跳过fsync()系统调用。

在具有高速缓存的存储设备上,如果 data files 和 redo log files 驻留在不同的存储设备上,则可能会丢失数据,并且在从设备高速缓存刷新数据文件写入之前发生崩溃。如果您使用或打算为重做日志和数据 files 使用不同的存储设备,请改用O_DIRECT

Windows 系统的innodb_flush_method选项包括:

  • async_unbufferedInnoDB使用 Windows 异步 I/O 和 non-buffered I/O。 async_unbuffered是 Windows 系统的默认设置。

不支持 Windows 上 4K 扇区硬盘驱动器上的运行 MySQL 服务器。解决方法是使用innodb_flush_method=normal。

  • normalInnoDB使用模拟异步 I/O 和缓冲 I/O。

  • unbufferedInnoDB使用模拟异步 I/O 和 non-buffered I/O。

每个设置如何影响 performance 取决于硬件配置和工作负载。对特定的 configuration 进行基准测试以确定要使用的设置,或者是否保留默认设置。检查Innodb_data_fsyncs状态变量以查看每个设置的fsync() calls 的总数。工作负载中的读写操作混合可能会影响设置的执行方式。例如,在具有硬件 RAID 控制器和 battery-backed 写入缓存的系统上,O_DIRECT可以帮助避免InnoDB缓冲池和操作系统文件系统缓存之间的 double 缓冲。在InnoDB data 和 log files 位于 SAN 上的某些系统上,对于 read-heavy 工作负载,默认 value 或O_DSYNC可能更快,主要是SELECT statements。始终使用反映您的 production 环境的硬件和工作负载测试此参数。有关一般的 I/O 调整建议,请参阅第 8.5.8 节,“优化 InnoDB 磁盘 I/O”。


innodb_flush_neighbors

属性
Command-Line 格式--innodb-flush-neighbors=#
系统变量innodb_flush_neighbors
范围全球
动态
类型列举
默认值1
有效值0
1
2

指定冲洗 缓冲池中的页面是否也刷新同一程度中的其他脏页面。

  • 默认值 value 为 1 会刷新缓冲池中相同范围内的连续脏页。

  • 设置为 0 会关闭innodb_flush_neighbors,并且不会从缓冲池中刷新其他脏页。

  • 设置为 2 会从缓冲池中刷新相同范围内的脏页。

当 table 数据存储在传统的硬盘存储设备上时,与在不同时间刷新单个页面相比,在一次操作中刷新此类邻居页面会减少 I/O 开销(主要用于磁盘搜索操作)。对于存储在SSD上的 table 数据,seek time 不是一个重要因素,您可以关闭此设置以分散写入操作。有关相关信息,请参阅第 14.8.3.5 节,“配置缓冲池刷新”。


innodb_flush_sync

属性
Command-Line 格式--innodb-flush-sync[={OFF\|ON}]
****介绍5.7.8
系统变量innodb_flush_sync
范围全球
动态
类型Boolean
默认值ON

innodb_flush_sync参数(默认情况下启用)会导致innodb_io_capacity设置在检查站发生的 I/O 活动突发时被忽略。要遵守innodb_io_capacity设置定义的InnoDB background I/O 活动的限制,请禁用innodb_flush_sync

有关相关信息,请参阅第 14.8.8 节,“配置 InnoDB I/O 容量”。


innodb_flushing_avg_loops

属性
Command-Line 格式--innodb-flushing-avg-loops=#
系统变量innodb_flushing_avg_loops
范围全球
动态
类型整数
默认值30
最低 Value1
最大 Value1000

InnoDB保持先前计算的刷新 state 快照的迭代次数,控制自适应冲洗响应更改工作负载的速度。增加 value 会使红晕操作的速率随着工作负载的变化而平稳地逐渐变化。减小 value 会使自适应刷新快速调整到工作负载变化,如果工作负载突然增加和减少,这可能会导致刷新活动出现峰值。

有关相关信息,请参阅第 14.8.3.5 节,“配置缓冲池刷新”。


innodb_force_load_corrupted

属性
Command-Line 格式--innodb-force-load-corrupted[={OFF\|ON}]
系统变量innodb_force_load_corrupted
范围全球
动态没有
类型Boolean
默认值OFF

允许InnoDB在启动时加载被标记为已损坏的表。仅在故障排除期间使用,以恢复无法访问的数据。排除故障后,请禁用此设置并重新启动服务器。


innodb_force_recovery

属性
Command-Line 格式--innodb-force-recovery=#
系统变量innodb_force_recovery
范围全球
动态没有
类型整数
默认值0
最低 Value0
最大 Value6

崩溃恢复模式通常仅在严重故障排除情况下更改。可能的值为 0 到 6.有关这些值的含义以及有关innodb_force_recovery的重要信息,请参阅第 14.21.2 节,“强制 InnoDB 恢复”。

警告
仅在紧急情况下将此变量设置为大于 0 的 value,以便您可以启动InnoDB并转储表。作为安全措施,当innodb_force_recovery大于 0 时,InnoDB会阻止插入,UPDATE或删除操作.innodb_force_recovery设置为 4 或更大将InnoDB置于 read-only 模式。

这些限制可能导致复制管理命令失败并出现错误,因为InnoDBInnoDB表中的--relay-log-info-repository=TABLE和--master-info-repository=TABLE store 等复制选项。


innodb_ft_auxtable

属性
系统变量innodb_ft_aux_table
范围全球
动态
类型

指定包含FULLTEXT索引的InnoDB table 的限定 name。此变量用于诊断目的,只能在运行时设置。例如:

SET GLOBAL innodb_ft_aux_table = 'test/t1';

将此变量设置为db_name/table_name格式的 name 后,INFORMATION_SCHEMA tables INNODB_FT_INDEXTABLE,INNODB_FT_INDEX_CACHE,INNODB_FT_CONFIG,INNODB_FT_DELETED和INNODB_FT_BEING_DELETED显示有关指定 table 的搜索索引的信息。

有关更多信息,请参阅第 14.15.4 节,“InnoDB INFORMATIONSCHEMA FULLTEXT 索引表”。


innodb_ft_cache_size

属性
Command-Line 格式--innodb-ft-cache-size=#
系统变量innodb_ft_cache_size
范围全球
动态没有
类型整数
默认值8000000
最低 Value1600000
最大 Value80000000

memory 以字节为单位分配InnoDB FULLTEXT搜索索引缓存,它在 memory 中保存已解析的文档,同时_创建InnoDB FULLTEXT索引。只有达到innodb_ft_cache_size大小限制时,索引插入和更新才会提交到磁盘。 innodb_ft_cache_size基于每个 table 定义高速缓存大小。要为所有表设置 global 限制,请参阅innodb_ft_total_cache_size。

有关更多信息,请参阅InnoDB Full-Text 索引缓存。


innodb_ft_enable_diag_print

属性
Command-Line 格式--innodb-ft-enable-diag-print[={OFF\|ON}]
系统变量innodb_ft_enable_diag_print
范围全球
动态
类型Boolean
默认值OFF

是否启用其他 full-text 搜索(FTS)诊断输出。此选项主要用于高级 FTS 调试,大多数用户不会感兴趣。输出打印到错误 log,包括以下信息:

  • 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 索引 build 进度。例如:
Number of doc processed: 1000
  • 对于 FTS 查询,将打印查询解析树,单词权重,查询处理 time 和 memory 用法。例如:
FTS Search Processing time: 1 secs: 100 millisec: row(s) 10000
Full Search Memory: 245666 (bytes),  Row: 10000


innodb_ft_enable_stopword

属性
Command-Line 格式--innodb-ft-enable-stopword[={OFF\|ON}]
系统变量innodb_ft_enable_stopword
范围Global,Session
动态
类型Boolean
默认值ON

指定在创建索引的 time 处将一组停用词与InnoDB FULLTEXT索引相关联。如果设置了innodb_ft_user_stopwordtable选项,则从该 table 中获取停用词。否则,如果设置了innodb_ft_server_stopwordtable选项,则从该 table 中获取停用词。否则,使用 built-in 组默认停用词。

有关更多信息,请参阅第 12.9.4 节,“Full-Text 停用词”。


innodb_ft_max_token_size

属性
Command-Line 格式--innodb-ft-max-token-size=#
系统变量innodb_ft_max_token_size
范围全球
动态没有
类型整数
默认值84
最低 Value10
最大 Value(> = 5.7.3)84
最大 Value(<= 5.7.2)252
最大 Value84

存储在InnoDB FULLTEXT索引中的单词的最大字符长度。设置此 value 的限制会减少索引的大小,从而通过省略 long 关键字或不是真实单词且不太可能是搜索术语的任意字母集合来加快查询速度。

有关更多信息,请参阅第 12.9.6 节,“Fine-Tuning MySQL Full-Text 搜索”。


innodb_ft_min_token_size

属性
Command-Line 格式--innodb-ft-min-token-size=#
系统变量innodb_ft_min_token_size
范围全球
动态没有
类型整数
默认值3
最低 Value0
最大 Value16

存储在InnoDB FULLTEXT索引中的单词的最小长度。增加此 value 会减少索引的大小,从而加快查询速度,省略在搜索 context 中不太可能重要的 common 单词,例如英语单词“a”和“to”。对于使用 CJK(中文,日文,韩文)字符集的内容,请指定 value 为 1。

有关更多信息,请参阅第 12.9.6 节,“Fine-Tuning MySQL Full-Text 搜索”。


innodb_ft_num_word_optimize

属性
Command-Line 格式--innodb-ft-num-word-optimize=#
系统变量innodb_ft_num_word_optimize
范围全球
动态
类型整数
默认值2000

InnoDB FULLTEXT索引上的每个OPTIMIZE TABLE操作期间 process 的单词数。由于对包含 full-text 搜索索引的 table 进行批量插入或更新操作可能需要大量索引维护才能合并所有更改,因此您可能会执行一系列OPTIMIZE TABLE statements,每个都会在最后一个停止的位置进行拾取。

有关更多信息,请参阅第 12.9.6 节,“Fine-Tuning MySQL Full-Text 搜索”。


innodb_ft_result_cache_limit

属性
Command-Line 格式--innodb-ft-result-cache-limit=#
****介绍5.7.2
系统变量innodb_ft_result_cache_limit
范围全球
动态
类型整数
默认值2000000000
最低 Value1000000
最大 Value(Windows,> = 5.7.2,<= 5.7.3)2**32-1
最大 Value(Unix,64-bit 平台,> = 5.7.2,<= 5.7.3)2**64-1
最大 Value(Unix,32-bit 平台,> = 5.7.2,<= 5.7.3)2**32-1
最大 Value(> = 5.7.4)2**32-1

每个 full-text 搜索查询或每个线程的InnoDB full-text 搜索查询结果缓存限制(以字节为单位)。中间和最终的InnoDB full-text 搜索查询结果在 memory 中处理。使用innodb_ft_result_cache_limit在 full-text 搜索查询结果缓存上放置大小限制,以避免在InnoDB full-text 搜索查询结果非常大的情况下消耗过多的 memory(对于 example,数百万或数亿行)。处理 full-text 搜索查询时,根据需要分配 Memory。如果达到结果缓存大小限制,则返回错误,指示查询超出了允许的最大 memory。

所有平台类型和位大小的innodb_ft_result_cache_limit的最大 value 为 2 ** 32-1。


innodb_ft_server_stopwordtable

属性
Command-Line 格式--innodb-ft-server-stopword-table=db_name/table_name
系统变量innodb_ft_server_stopword_table
范围全球
动态
类型
默认值NULL

此选项用于为所有InnoDB表指定您自己的InnoDB FULLTEXT索引停用词列表。要为特定的InnoDB table 配置自己的停用词列表,请使用innodb_ft_user_stopwordtable。

innodb_ft_server_stopword_table设置为包含停用词列表的 table 的 name,格式为db_name/table_name

在配置innodb_ft_server_stopword_table之前,必须存在禁用词 table。必须启用innodb_ft_enable_stopword,并且必须在创建FULLTEXT索引之前配置innodb_ft_server_stopword_table选项。

禁用词 table 必须是InnoDB table,包含一个名为valueVARCHAR列。

有关更多信息,请参阅第 12.9.4 节,“Full-Text 停用词”。


innodb_ft_sort_pll_degree

属性
Command-Line 格式--innodb-ft-sort-pll-degree=#
系统变量innodb_ft_sort_pll_degree
范围全球
动态没有
类型整数
默认值2
最低 Value1
最大 Value32

当 building a 搜索索引时,InnoDB FULLTEXT索引中 parallel 与 index 和 tokenize 文本中使用的线程数。

有关相关信息,请参阅第 14.6.2.4 节,“InnoDB FULLTEXT 索引”和innodb_sort_buffer_size。


innodb_ft_total_cache_size

属性
Command-Line 格式--innodb-ft-total-cache-size=#
****介绍5.7.2
系统变量innodb_ft_total_cache_size
范围全球
动态没有
类型整数
默认值640000000
最低 Value32000000
最大 Value1600000000

为所有表的InnoDB full-text 搜索索引缓存分配的总 memory(以字节为单位)。 创建多个表,每个表都有FULLTEXT搜索索引,可能占用可用 memory 的很大一部分。 innodb_ft_total_cache_size为所有 full-text 搜索索引定义 global memory 限制,以帮助避免过多的 memory 消耗。如果索引操作达到 global 限制,则会触发强制同步。

有关更多信息,请参阅InnoDB Full-Text 索引缓存。


innodb_ft_user_stopwordtable

属性
Command-Line 格式--innodb-ft-user-stopword-table=db_name/table_name
系统变量innodb_ft_user_stopword_table
范围Global,Session
动态
类型
默认值NULL

此选项用于在特定 table 上指定您自己的InnoDB FULLTEXT索引停用词列表。要为所有InnoDB表配置自己的停用词列表,请使用innodb_ft_server_stopwordtable。

innodb_ft_user_stopword_table设置为包含停用词列表的 table 的 name,格式为db_name/table_name

在配置innodb_ft_user_stopword_table之前,必须存在禁用词 table。必须启用innodb_ft_enable_stopword,并且必须在创建FULLTEXT索引之前配置innodb_ft_user_stopword_table

禁用词 table 必须是InnoDB table,包含一个名为valueVARCHAR列。

有关更多信息,请参阅第 12.9.4 节,“Full-Text 停用词”。


innodb_io_capacity

属性
Command-Line 格式--innodb-io-capacity=#
系统变量innodb_io_capacity
范围全球
动态
类型整数
默认值200
最低 Value100
最大 Value(64-bit 平台)2**64-1
最大 Value(32-bit 平台)2**32-1

innodb_io_capacity参数设置InnoDB后台任务每秒执行 I/O 次操作次数的上限,例如来自缓冲池的冲洗页和来自改变缓冲区的合并数据。

innodb_io_capacity limit 是所有缓冲池实例的总限制。刷新脏页时,限制在缓冲池实例之间平均分配。

innodb_io_capacity应设置为大约系统每秒可执行的 I/O 次操作的数量。理想情况下,保持设置尽可能低,但不要低到背景活动落后。如果 value 太高,则会从缓冲池和 insert 缓冲区中删除数据太快以进行缓存以提供显着的好处。

默认 value 为 200.对于具有更高 I/O 速率的繁忙系统,您可以设置更高的 value 以帮助服务器处理与高速行更改相关联的后台维护工作。

通常,您可以将 value 增加为InnoDB I/O 所用驱动器数量的函数。例如,您可以在使用多个磁盘或 solid-state 磁盘(SSD)的系统上增加 value。

对于 lower-end SSD,默认设置 200 通常就足够了。对于 higher-end,bus-attached SSD,请考虑更高的设置,例如 1000,用于 example。对于具有单独 5400 RPM 或 7200 RPM 驱动器的系统,您可以将 value 降低到100,这表示可以执行大约 100 IOPS 的 older-generation 磁盘驱动器可用的每秒 I/O 操作数(IOPS)的估计比例。

虽然你可以指定一个非常高的 value,例如一百万,但实际上这样的大值几乎没有任何好处。通常,建议不要使用 20000 或更高的值,除非您已经证明较低的值不足以满足您的工作负载。

在调整innodb_io_capacity时考虑写入工作负载。具有大写入工作负载的系统可能会受益于更高的设置。对于具有小写入工作负载的系统,较低的设置可能就足够了。

您可以将innodb_io_capacity设置为任何数字 100 或更大,最大值由innodb_io_capacity_max定义。 innodb_io_capacity可以在 MySQL 选项文件(my.cnfmy.ini)中设置,也可以使用SET GLOBAL语句动态更改,这需要足以设置 global 系统变量的权限。见第 5.1.8.1 节,“系统变量权限”。

innodb_flush_sync变量导致在检查点发生的 I/O 活动突发期间忽略innodb_io_capacity设置。 innodb_flush_sync默认启用。

有关更多信息,请参见第 14.8.8 节,“配置 InnoDB I/O 容量”。有关InnoDB I/O performance 的一般信息,请参阅第 8.5.8 节,“优化 InnoDB 磁盘 I/O”。


innodb_io_capacity_max

属性
Command-Line 格式--innodb-io-capacity-max=#
系统变量innodb_io_capacity_max
范围全球
动态
类型整数
默认值see description
最低 Value100
最大 Value(Windows,64-bit 平台)2**32-1
最大 Value(Unix,64-bit 平台)2**64-1
最大 Value(32-bit 平台)2**32-1

如果冲洗活动落后,InnoDB可以比innodb_io_capacity施加的限制更积极地冲洗。 innodb_io_capacity_max定义了在这种情况下InnoDB后台任务每秒执行 I/O 次操作的数量的上限。

innodb_io_capacity_max设置是所有缓冲池实例的总限制。

如果在启动时指定innodb_io_capacity设置但未为innodb_io_capacity_max指定 value,则innodb_io_capacity_max默认为innodb_io_capacity的 value 的两倍,最小 value 为 2000。

配置innodb_io_capacity_max时,innodb_io_capacity的两倍通常是一个很好的起点。默认的 value 2000 适用于使用 solid-state 磁盘(SSD)或多个常规磁盘驱动器的工作负载。对于不使用 SSD 或多个磁盘驱动器的工作负载,2000 的设置可能太高,并且可能允许过多的刷新。对于单个常规磁盘驱动器,建议设置介于 200 和 400 之间。对于 high-end,bus-attached SSD,请考虑更高的设置,例如 2500.与innodb_io_capacity设置一样,保持设置尽可能低,但不要太低以至于InnoDB无法在必要时充分延伸到innodb_io_capacity限制以外。

在调整innodb_io_capacity_max时考虑写入工作负载。具有大写入工作负载的系统可能受益于更高的设置。对于具有小写入工作负载的系统,较低的设置可能就足够了。

innodb_io_capacity_max不能设置为低于innodb_io_capacity value 的 value。

使用组语句将innodb_io_capacity_max设置为DEFAULT(SET GLOBAL innodb_io_capacity_max=DEFAULT)sets innodb_io_capacity_max为最大 value。

有关相关信息,请参阅第 14.8.3.5 节,“配置缓冲池刷新”。


innodb_large_prefix

属性
Command-Line 格式--innodb-large-prefix[={OFF\|ON}]
****已过时5.7.7
系统变量innodb_large_prefix
范围全球
动态
类型Boolean
默认 Value(> = 5.7.7)ON
默认 Value(<= 5.7.6)OFF

启用此选项时,对于使用DYNAMICCOMPRESSED行格式的InnoDB表,允许使用长度超过 767 字节(最多 3072 字节)的索引 key 前缀。有关在各种设置下与索引 key 前缀关联的最大值,请参阅第 14.6.1.6 节,“InnoDB 表的限制”。

对于使用REDUNDANTCOMPACT行格式的表,此选项不会影响允许的索引 key 前缀长度。

MySQL 5.7 默认启用innodb_large_prefix。此更改与innodb_file_format的默认 value 更改一致,默认情况下在 MySQL 5.7 中设置为Barracuda。同时,这些默认的 value 更改允许在使用DYNAMICCOMPRESSED行格式时创建更大的索引 key 前缀。如果任一选项设置为 non-default value,则会以静默方式截断大于 767 字节的索引 key 前缀。

innodb_large_prefix已弃用,将在以后的版本中删除。引入了innodb_large_prefix来禁用大型索引 key 前缀,以便与不支持大索引 key 前缀的早期版本的InnoDB兼容。


innodb_limit_optimistic_insert_debug

属性
Command-Line 格式--innodb-limit-optimistic-insert-debug=#
系统变量innodb_limit_optimistic_insert_debug
范围全球
动态
类型整数
默认值0
最低 Value0
最大 Value2**32-1

限制每B-tree页的记录数。默认值 value 为 0 表示不施加限制。只有在使用WITH_DEBUG CMake选项编译调试支持时,此选项才可用。


innodb_lock_wait_timeout

属性
Command-Line 格式--innodb-lock-wait-timeout=#
系统变量innodb_lock_wait_timeout
范围Global,Session
动态
类型整数
默认值50
最低 Value1
最大 Value1073741824

time_ 交易在放弃之前等待行锁的 time 的长度(以秒为单位)。默认的 value 是 50 秒。尝试访问由另一个InnoDB transaction 锁定的行的 transaction 在发出以下错误之前最多等待这一行多次写入访问行:

ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction

发生锁定等待超时时,当前语句为回滚(而不是整个 transaction)。要让整个 transaction 回滚,请使用--innodb-rollback-on-timeout选项启动服务器。另见第 14.21.4 节,“InnoDB 错误处理”。

您可以为高度交互的 applications 或OLTP系统减少此 value,以快速显示用户反馈或将更新放入队列以便稍后处理。您可以为 long-running back-end 操作增加此 value,例如等待其他大型插入或更新操作完成的数据仓库中的 transform step。

innodb_lock_wait_timeout仅适用于InnoDB行锁。 MySQL table 锁不会发生在InnoDB内,并且此超时不适用于等待 table 锁。

当启用innodb_deadlock_detect(默认值)时,锁定等待超时 value 不适用于死锁,因为InnoDB会立即检测到死锁并回滚其中一个死锁的 transactions。当innodb_deadlock_detect被禁用时,在发生死锁时依赖innodb_lock_waittimeout进行 transaction 回滚。见第 14.7.5.2 节,“死锁检测和回滚”。

innodb_lock_waittimeout可以在运行时使用SET GLOBALSET SESSION语句设置。更改GLOBAL设置需要足以设置 global 系统变量的权限(请参阅第 5.1.8.1 节,“系统变量权限”),并影响随后连接的所有客户端的操作。任何 client 都可以更改innodb_lock_waittimeout的SESSION设置,这只会影响 client。


innodb_locks_unsafe_for_binlog

属性
Command-Line 格式--innodb-locks-unsafe-for-binlog[={OFF\|ON}]
****已过时
系统变量innodb_locks_unsafe_for_binlog
范围全球
动态没有
类型Boolean
默认值OFF

此变量会影响InnoDB如何使用间隙锁定进行搜索和索引扫描。 innodb_locks_unsafe_for_binlog已弃用,将在未来的 MySQL 版本中删除。

通常,InnoDB使用一种名为 next-key 锁定的算法,它将 index-row 锁定与间隙锁定结合起来。 InnoDB以这样一种方式执行 row-level 锁定:当它搜索或扫描 table 索引时,它会在它遇到的索引记录上设置共享锁或独占锁。因此,row-level 锁实际上是 index-record 锁。另外,索引 record 上的 next-key 锁也会影响索引 record 之前的间隙。也就是说,next-key 锁是一个 index-record 锁加上在 index record 之前的间隙上的间隙锁。如果一个 session 在索引中的 record R上有共享锁或独占锁,则另一个 session 不能在 index order 中R之前的空位中插入新索引 record。见第 14.7.1 节,“InnoDB 锁定”。

默认情况下,innodb_locks_unsafe_for_binlog的 value 为 0(禁用),这意味着启用了间隙锁定:InnoDB使用 next-key 锁进行搜索和索引扫描。要启用该变量,请将其设置为 1.这会导致禁用间隙锁定:InnoDB仅使用 index-record 锁进行搜索和索引扫描。

启用innodb_locks_unsafe_for_binlog不会禁用间隙锁定以进行 foreign-key 约束检查或 duplicate-key 检查。

启用innodb_locks_unsafe_for_binlog的效果与将 transaction 隔离 level 设置为阅读提交相同,使用这些 exceptions:

  • 启用innodb_locks_unsafe_for_binlog是 global 设置并影响所有会话,而隔离 level 可以为所有会话全局设置,或者每个 session 单独设置。

  • innodb_locks_unsafe_for_binlog只能在服务器启动时设置,而隔离 level 可以在启动时设置或在运行时更改。

因此阅读提交提供比innodb_locks_unsafe_for_binlog更精细和更灵活的控制。有关隔离 level 对间隙锁定的影响的更多信息,请参阅第 14.7.2.1 节,“事件隔离级别”。

启用innodb_locks_unsafe_for_binlog可能会导致幻像问题,因为其他会话可以在禁用间隙锁定时将新行插入间隙。假设child table 的id列上有一个索引,并且您要读取并锁定 table 中具有大于 100 的标识符 value 的所有行,以便稍后更新所选行中的某些列:

SELECT * FROM child WHERE id > 100 FOR UPDATE;

查询从id大于 100 的第一个 record 开始扫描索引。如果在该范围内的索引记录上设置的锁不会锁定在间隙中进行的插入,则另一个 session 可以_插入新行到 table。因此,如果要在同一 transaction 中再次执行相同的选择,您将在查询返回的结果集中看到一个新行。这也意味着如果将新项添加到数据库,InnoDB不保证可序列化。因此,如果启用innodb_locks_unsafe_for_binlog,则InnoDB最多保证阅读提交的隔离 level。 (冲突序列化仍然是 guaranteed.)有关幻像的更多信息,请参阅第 14.7.4 节,“幽灵行”。

启用innodb_locks_unsafe_for_binlog会产生其他影响:

  • 对于UPDATE或删除 statements,InnoDB仅对其更新或删除的行保留锁定。在 MySQL 评估WHERE条件后,将释放非匹配行的 Record 锁。这大大降低了死锁的可能性,但它们仍然可以发生。

  • 对于UPDATE statements,如果一行已被锁定,InnoDB执行“semi-consistent”读取,将最新提交的 version 返回给 MySQL,以便 MySQL 可以确定该行是否与UPDATE的WHERE条件匹配。如果行匹配(必须更新),MySQL 再次读取该行,并且 time InnoDB要么锁定它,要么等待锁定它。

考虑以下 example,从此 table 开始:

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;

在这种情况下,table 没有索引,因此搜索和索引扫描使用隐藏的聚簇索引进行 record 锁定(请参阅第 14.6.2.1 节,“聚集和二级索引”)。

假设一个 client 使用这些 statements 执行UPDATE:

SET autocommit = 0;
UPDATE t SET b = 5 WHERE b = 3;

假设第二个 client 通过执行第一个 client 之后的 statements 来执行UPDATE:

SET autocommit = 0;
UPDATE t SET b = 4 WHERE b = 2;

InnoDB执行每个UPDATE时,它首先获取每行的独占锁,然后确定是否修改它。如果InnoDB未修改该行并且启用了innodb_locks_unsafe_for_binlog,则会释放锁定。否则,InnoDB保留锁直到 transaction 结束。这会影响 transaction 处理,如下所示。

如果禁用innodb_locks_unsafe_for_binlog,则第一个UPDATE获取 x-locks 并且不释放它们中的任何一个:

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-locks 并释放那些不修改的行:

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)

对于第二个UPDATEInnoDB执行“semi-consistent”读取,将每行的最新提交 version 返回给 MySQL,以便 MySQL 可以确定该行是否与UPDATE的WHERE条件匹配:

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

属性
Command-Line 格式--innodb-log-buffer-size=#
系统变量innodb_log_buffer_size
范围全球
动态没有
类型整数
默认 Value(> = 5.7.6)16777216
默认 Value(<= 5.7.5)8388608
最小 Value(> = 5.7.6)1048576
最小 Value(<= 5.7.5)262144
最大 Value4294967295

InnoDB用于写入磁盘上日志文件的缓冲区的大小(以字节为单位)。通过引入 32KB 和 64KB innodb_page_size值,默认 value 从 8MB 变为 16MB。一个大log 缓冲区启用大transactions到 run 而不需要在 transactions 承诺之前将 log 写入磁盘。因此,如果您有 transactions 更新,insert 或删除许多行,使 log 缓冲区更大可以保存磁盘 I/O。有关相关信息,请参阅Memory Configuration和第 8.5.4 节,“优化 InnoDB Redo Logging”。有关一般的 I/O 调整建议,请参阅第 8.5.8 节,“优化 InnoDB 磁盘 I/O”。


innodb_log_checkpoint_now

属性
Command-Line 格式--innodb-log-checkpoint-now[={OFF\|ON}]
****介绍5.7.2
系统变量innodb_log_checkpoint_now
范围全球
动态
类型Boolean
默认值OFF

启用此调试选项以强制InnoDB写入检查点。只有在使用WITH_DEBUG CMake选项编译调试支持时,此选项才可用。


innodblog_checksum_algorithm

属性
Command-Line 格式--innodb-log-checksum-algorithm=algorithm_name
****介绍5.7.8
****删除5.7.9
系统变量innodb_log_checksum_algorithm
范围全球
动态
类型列举
默认值innodb
有效值innodb
crc32
none
strict_innodb
strict_crc32
strict_none

此变量已删除并替换为innodb_log_checksums

指定如何生成和验证存储在每个重做 log 磁盘块中的校验。 innodb_log_checksum_algorithm支持与innodb_checksum_algorithm相同的算法。以前,redo log 磁盘块仅支持innodb算法。 innodb_log_checksum_algorithm=innodb是默认设置。

strict 表单与innodbcrc32none的作用相同,只是如果InnoDB在同一个 redo log 中遇到混合的校验和值,则会停止。您只能在全新实例中使用严格设置。严格的设置有点快,因为它们不需要计算新的和旧的校验和值以在磁盘读取期间接受这两个值。

以下 table 显示noneinnodbcrc32选项值及其严格对应值之间的差异。 noneinnodbcrc32将指定类型的校验和 value 写入每个数据块,但为了兼容性,在读取操作期间验证块时接受任何其他校验和值。每个选项的严格形式仅识别一种校验和,这使得验证更快,但要求实例中的所有InnoDB重做日志都在相同的innodb_log_checksum_algorithmvalue 下创建。

表 14.22 innodblog_checksum_algorithm 设置

生成的校验和(写入时)允许的校验和(阅读时)
没有一个常数。noneinnodbcrc32生成的任何校验和。
InnoDB使用InnoDB中的原始算法在软件中计算校验和。noneinnodbcrc32生成的任何校验和。
CRC32校验和使用crc32算法计算,可能使用硬件辅助完成。noneinnodbcrc32生成的任何校验和。
strictnone一个常数只有none生成的校验和。
strict_innodb使用InnoDB中的原始算法在软件中计算校验和。只有innodb生成的校验和。
strict_crc32校验和使用crc32算法计算,可能使用硬件辅助完成。只有crc32生成的校验和。


innodb_log_checksums

属性
Command-Line 格式--innodb-log-checksums[={OFF\|ON}]
****介绍5.7.9
系统变量innodb_log_checksums
范围全球
动态
类型Boolean
默认值ON

启用或禁用重做 log 页面的校验和。 innodb_log_checksums替换innodblog_checksum_algorithm。

innodb_log_checksums=ON为重做 log 页面启用CRC-32C校验和算法。禁用innodb_log_checksums时,将忽略重做 log 页校验和字段的内容。

永远不会禁用 redo log 标题页和 redo log 检查点页面上的校验和。


innodb_log_compressed_pages

属性
Command-Line 格式--innodb-log-compressed-pages[={OFF\|ON}]
系统变量innodb_log_compressed_pages
范围全球
动态
类型Boolean
默认值ON

指定是否将re-compressed 网页的图像写入重做 log。当对压缩数据进行更改时,可能会发生 Re-compression。

默认情况下启用innodb_log_compressed_pages以防止在恢复期间使用zlib压缩算法的不同 version 时可能发生的损坏。如果您确定zlib version 不会更改,则可以禁用innodb_log_compressed_pages以减少修改压缩数据的工作负载的重做 log 生成。

要衡量启用或禁用innodb_log_compressed_pages的效果,请在同一工作负载下比较两个设置的重做 log 生成。测量重做 log 生成的选项包括观察显示发动机创新状态输出的LOG部分中的Log sequence number(LSN),或监视写入重做 log files 的字节数的Innodboslog_written状态。

有关相关信息,请参阅部分 14.9.1.6,“压缩 OLTP 工作负载”。


innodb_log_file_size

属性
Command-Line 格式--innodb-log-file-size=#
系统变量innodb_log_file_size
范围全球
动态没有
类型整数
默认值50331648
最小 Value(> = 5.7.11)4194304
最小 Value(<= 5.7.10)1048576
最大 Value512GB / innodb_log_files_in_group

log group中每个log 文件的大小(以字节为单位)。 log files(innodb_log_file_size * innodblogfiles_ingroup)的组合大小不能超过略小于 512GB 的最大 value。对于 example,一对 255 GB log files 接近限制但不超过限制。默认的 value 是 48MB。

通常,log files 的组合大小应该足够大,以至于服务器可以平滑工作负载活动中的高峰和低谷,这通常意味着有足够的重做 log 空间来处理超过一小时的写入活动。 value 越大,缓冲池中需要的检查点刷新活动就越少,从而节省了磁盘 I/O。较大的 log files 也会使崩溃恢复变慢,尽管恢复 performance 的改进使得 log 文件大小比早期版本的 MySQL 更少考虑。

在 MySQL 5.7.11 中,最小innodb_log_file_size value 从 1MB 增加到 4MB。

有关相关信息,请参阅重做日志文件 Configuration。有关一般的 I/O 调整建议,请参阅第 8.5.8 节,“优化 InnoDB 磁盘 I/O”。


innodb_log_files_in_group

属性
Command-Line 格式--innodb-log-files-in-group=#
系统变量innodb_log_files_in_group
范围全球
动态没有
类型整数
默认值2
最低 Value2
最大 Value100

log group中日志文件的数量。 InnoDB以循环方式写入 files。默认(和推荐)value 是 2. files 的位置由innodbloggroup_home_dir指定。 log files(innodblog_file_size * innodb_log_files_in_group)的组合大小最大可达 512GB。

有关相关信息,请参阅重做日志文件 Configuration。


innodb_log_group_home_dir

属性
Command-Line 格式--innodb-log-group-home-dir=dir_name
系统变量innodb_log_group_home_dir
范围全球
动态没有
类型目录 name

InnoDB 重做 log files 的目录路径,其编号由innodblogfiles_ingroup指定。如果未指定任何InnoDB log 变量,则默认情况下在 MySQL 数据目录中创建两个名为ib_logfile0ib_logfile1的 files。 Log 文件大小由innodblog_file_size系统变量给出。

有关相关信息,请参阅重做日志文件 Configuration。


innodb_log_write_ahead_size

属性
Command-Line 格式--innodb-log-write-ahead-size=#
****介绍5.7.4
系统变量innodb_log_write_ahead_size
范围全球
动态
类型整数
默认值8192
最低 Value512 (log file block size)
最大 ValueEqual to innodb_page_size

为 redo log 定义 write-ahead 块大小,以字节为单位。要避免“read-on-write”,请将innodblog_write_ahead_size设置为匹配操作系统或文件系统缓存块大小。默认设置为 8192 字节。当 redo log 块未完全缓存到操作系统或文件系统时,由于 redo log 与操作系统或文件系统缓存块大小的 write-ahead 块大小不匹配,会发生 Read-on-write。

innodblog_write_ahead_size的有效值是InnoDB log 文件块大小(2n)的倍数。最小 value 是InnoDB log 文件块大小(512)。指定最小 value 时不会发生 Write-ahead。最大 value 等于innodb_page_size value。如果为innodblog_write_ahead_size指定的 value 大于innodb_page_size value,则innodb_log_write_ahead_size设置将截断为innodb_page_size value。

将innodblog_write_ahead_size value 设置为与操作系统或文件系统缓存块大小相比太低会导致“read-on-write”。由于一次写入多个块,因此将 value 设置得太高可能会对 log 文件写入的fsync performance 产生轻微影响。

有关相关信息,请参阅第 8.5.4 节,“优化 InnoDB Redo Logging”。


innodb_lru_scan_depth

属性
Command-Line 格式--innodb-lru-scan-depth=#
系统变量innodb_lru_scan_depth
范围全球
动态
类型整数
默认值1024
最低 Value100
最大 Value(64-bit 平台)2**64-1
最大 Value(32-bit 平台)2**32-1

影响InnoDB 缓冲池的红晕操作的算法和启发式的参数。主要是_性能专家调整 I/O-intensive 工作负载。它为每个缓冲池实例指定页面清理器线程扫描的缓冲池 LRU 页面列表向下寻找脏页面以进行刷新的距离。这是每秒执行一次的后台操作。

小于默认值的设置通常适用于大多数工作负载。高于必要值的值可能会影响 performance。如果在典型工作负载下具有备用 I/O 容量,则仅考虑增加 value。相反,如果 write-intensive 工作负载使 I/O 容量饱和,则减小 value,尤其是在大缓冲池的情况下。

调整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

属性
Command-Line 格式--innodb-max-dirty-pages-pct=#
系统变量innodb_max_dirty_pages_pct
范围全球
动态
类型数字
默认值75
最低 Value0
最大 Value(> = 5.7.5)99.99
最大 Value(<= 5.7.4)99

InnoDB尝试缓冲池中的红晕数据,以便脏页面的百分比不超过此 value。默认的 value 是 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

属性
Command-Line 格式--innodb-max-dirty-pages-pct-lwm=#
系统变量innodb_max_dirty_pages_pct_lwm
范围全球
动态
类型数字
默认值0
最低 Value0
最大 Value(> = 5.7.5)99.99
最大 Value(<= 5.7.4)99

定义一个低水位标记,表示启用预冲洗以控制脏页面比率的脏页面百分比。默认值 0 完全禁用 pre-flushing 行为。有关更多信息,请参阅第 14.8.3.5 节,“配置缓冲池刷新”。


innodb_max_purge_lag

属性
Command-Line 格式--innodb-max-purge-lag=#
系统变量innodb_max_purge_lag
范围全球
动态
类型整数
默认值0
最低 Value0
最大 Value4294967295

定义清除队列的最大长度。默认值 value 为 0 表示没有限制(没有延迟)。

当清除操作滞后时,使用此选项对插入,UPDATE和删除操作施加延迟(请参阅第 14.3 节,“InnoDB Multi-Versioning”)。

InnoDB transaction 系统维护 transactions 列表,其 delete-marked 或删除操作具有索引记录 delete-marked。列表的长度表示purge_lag value。当purge_lag超过innodb_max_purge_lag时,插入,UPDATE和删除操作延迟至少 5000 微秒。延迟计算是(purge_lag/innodb_max_purge_lag - 0.5) * 10000

为了防止purge_lag变大的极端情况下的过度延迟,您可以通过设置innodb_max_purge_lag_delay来限制延迟。延迟是在清除批次开始时计算的。

有问题的工作负载的典型设置可能是 100 万,假设 transactions 很小,只有 100 字节大小,并且允许有 100MB 未刷新的InnoDBtable 行。

滞后值显示为InnoDB Monitor 输出的TRANSACTIONS部分中的历史列表长度。此 example 输出中的 lag value 为 20:

------------
TRANSACTIONS
------------
Trx id counter 0 290328385
Purge done for trx's n:o < 0 290315608 undo n:o < 0 17
History list length 20

有关一般的 I/O 调整建议,请参阅第 8.5.8 节,“优化 InnoDB 磁盘 I/O”。


innodb_max_purge_lag_delay

属性
Command-Line 格式--innodb-max-purge-lag-delay=#
系统变量innodb_max_purge_lag_delay
范围全球
动态
类型整数
默认值0
最低 Value0

指定innodb_max_purge_lag变量施加的延迟的最大延迟(以微秒为单位)。指定的 value 是根据innodb_max_purge_lag的 value 从公式计算的延迟时间的上限。

有关一般的 I/O 调整建议,请参阅第 8.5.8 节,“优化 InnoDB 磁盘 I/O”。


innodb_max_undo_log_size

属性
Command-Line 格式--innodb-max-undo-log-size=#
****介绍5.7.5
系统变量innodb_max_undo_log_size
范围全球
动态
类型整数
默认值1073741824
最低 Value10485760
最大 Value2**64-1

定义撤消表空间的阈值大小。如果撤消表空间超过阈值,则可以在启用innodb_undolog_truncate时将其标记为截断。默认 value 是 1073741824 字节(1024 MiB)。

有关更多信息,请参阅截断撤消表空间。


innodb_merge_threshold_set_all_debug

属性
Command-Line 格式--innodb-merge-threshold-set-all-debug=#
****介绍5.7.6
系统变量innodb_merge_threshold_set_all_debug
范围全球
动态
类型整数
默认值50
最低 Value1
最大 Value50

为索引页定义 page-full percentage value,它将覆盖当前在字典高速缓存中的所有索引的当前MERGE_THRESHOLD设置。只有在使用WITH_DEBUG CMake选项编译调试支持时,此选项才可用。有关相关信息,请参阅部分 14.8.12,“配置索引页面的合并阈值”。


innodb_monitor_disable

属性
Command-Line 格式--innodb-monitor-disable={counter\|module\|pattern\|all}
系统变量innodb_monitor_disable
范围全球
动态
类型

禁用InnoDB metrics 计数器。可以使用INFORMATIONSCHEMA.INNODBMETRICS table 查询计数器数据。有关使用信息,请参阅第 14.15.6 节,“InnoDB INFORMATIONSCHEMA Metrics Table”。

innodb_monitor_disable='latch'禁用SHOW ENGINE INNODB MUTEX的统计信息收集。有关更多信息,请参阅第 13.7.5.15 节,“SHOW ENGINE 语法”。


innodb_monitor_enable

属性
Command-Line 格式--innodb-monitor-enable={counter\|module\|pattern\|all}
系统变量innodb_monitor_enable
范围全球
动态
类型

启用InnoDB metrics 计数器。可以使用INFORMATIONSCHEMA.INNODBMETRICS table 查询计数器数据。有关使用信息,请参阅第 14.15.6 节,“InnoDB INFORMATIONSCHEMA Metrics Table”。

innodb_monitor_enable='latch'启用SHOW ENGINE INNODB MUTEX的统计信息收集。有关更多信息,请参阅第 13.7.5.15 节,“SHOW ENGINE 语法”。


innodb_monitor_reset

属性
Command-Line 格式--innodb-monitor-reset={counter\|module\|pattern\|all}
系统变量innodb_monitor_reset
范围全球
动态
类型列举
默认值empty string
有效值counter
module
pattern
all

InnoDB metrics 计数器的 count value 重置为零。可以使用INFORMATIONSCHEMA.INNODBMETRICS table 查询计数器数据。有关使用信息,请参阅第 14.15.6 节,“InnoDB INFORMATIONSCHEMA Metrics Table”。

innodb_monitor_reset='latch'重置SHOW ENGINE INNODB MUTEX报告的统计数据。有关更多信息,请参阅第 13.7.5.15 节,“SHOW ENGINE 语法”。


innodb_monitor_reset_all

属性
Command-Line 格式--innodb-monitor-reset-all={counter\|module\|pattern\|all}
系统变量innodb_monitor_reset_all
范围全球
动态
类型列举
默认值empty string
有效值counter
module
pattern
all

重置InnoDB metrics 计数器的所有值(最小值,最大值等)。可以使用INFORMATIONSCHEMA.INNODBMETRICS table 查询计数器数据。有关使用信息,请参阅第 14.15.6 节,“InnoDB INFORMATIONSCHEMA Metrics Table”。


innodb_numa_interleave

属性
Command-Line 格式--innodb-numa-interleave[={OFF\|ON}]
****介绍5.7.9
系统变量innodb_numa_interleave
范围全球
动态没有
类型Boolean
默认值OFF

启用 NUMA interleave memory policy 以分配InnoDB缓冲池。启用innodb_numa_interleave时,mysqld process 将 NUMA memory policy 设置为MPOL_INTERLEAVE。分配InnoDB缓冲池后,NUMA memory policy 将重新设置为MPOL_DEFAULT。要使innodb_numa_interleave选项可用,必须在 NUMA-enabled Linux 系统上编译 MySQL。

从 MySQL 5.7.17 开始,CMake根据当前平台是否具有NUMA支持来设置默认的WITH_NUMA value。有关更多信息,请参阅第 2.9.7 节,“MySQL Source-Configuration 选项”。


innodb_old_blocks_pct

属性
Command-Line 格式--innodb-old-blocks-pct=#
系统变量innodb_old_blocks_pct
范围全球
动态
类型整数
默认值37
最低 Value5
最大 Value95

指定用于旧块子表的InnoDB 缓冲池的近似百分比。值的范围是 5 到 95.默认的 value 是 37(即池的 3/8)。经常与innodb_old_blockstime结合使用。

有关更多信息,请参阅第 14.8.3.3 节,“使缓冲池扫描抗性”。有关缓冲池管理,LRU算法和赶出 policies 的信息,请参阅第 14.5.1 节,“缓冲池”。


innodb_old_blocks_time

属性
Command-Line 格式--innodb-old-blocks-time=#
系统变量innodb_old_blocks_time
范围全球
动态
类型整数
默认值1000
最低 Value0
最大 Value2**32-1

Non-zero 值可防止缓冲池被仅在短时间内引用的数据填充,例如在完整 table 扫描期间。增加此 value 可提供更多保护,防止完全 table 扫描干扰缓冲池中缓存的数据。

指定插入旧子表的块在第一次访问后必须保留的长度以毫秒为单位,然后才能将其移动到新的子列表中。如果 value 为 0,则无论插入访问多久后,插入到旧子列表中的块都会立即移动到访问它的第一个 time 的新子列表。如果 value 大于 0,则块保留在旧子列表中,直到在第一次访问后至少那么多毫秒发生访问。对于 example,value 为 1000 会导致块在第一次访问后保留在旧子列表中 1 秒钟,然后才有资格移动到新子列表。

默认 value 为 1000。

此变量通常与innodb_old_blocks_pct结合使用。有关更多信息,请参阅第 14.8.3.3 节,“使缓冲池扫描抗性”。有关缓冲池管理,LRU算法和赶出 policies 的信息,请参阅第 14.5.1 节,“缓冲池”。


innodb_online_alter_log_max_size

属性
Command-Line 格式--innodb-online-alter-log-max-size=#
系统变量innodb_online_alter_log_max_size
范围全球
动态
类型整数
默认值134217728
最低 Value65536
最大 Value2**64-1

指定InnoDB表的在线 DDL操作期间使用的临时 log files 大小的上限(以字节为单位)。每个创建的索引或更改的 table 都有一个这样的 log 文件。此 log 文件存储在 DDL 操作期间在 table 中插入,更新或删除的数据。临时 log 文件在innodb_sort_buffer_size的 value 需要时被扩展,直到innodb_online_alter_log_max_size指定的最大值。如果临时 log 文件超过大小上限,则ALTER TABLE操作将失败,并且将回滚所有未提交的并发 DML 操作。因此,此选项的大 value 允许在联机 DDL 操作期间发生更多 DML,但在 table 被锁定以应用 log 中的数据时,还会在 DDL 操作结束时延长 time 的时间段。


innodb_open_files

属性
Command-Line 格式--innodb-open-files=#
系统变量innodb_open_files
范围全球
动态没有
类型整数
默认值-1(表示自动调整大小;不指定此文字 value)
最低 Value10
最大 Value4294967295

仅当您使用多个InnoDB 表空间时,此变量才有意义。它指定 MySQL 可以在一个 time 保持打开的最大数量.ibd files。最小 value 为 10.如果未启用innodb_file_pertable,则默认 value 为 300,否则为 300 和table_open_cache的较高值。

用于.ibd files 的文件描述符仅适用于InnoDB表。它们独立于openfiles_limit系统变量指定的那些,并且不影响 table 缓存的操作。有关一般的 I/O 调整建议,请参阅第 8.5.8 节,“优化 InnoDB 磁盘 I/O”。


innodb_optimize_fulltext_only

属性
Command-Line 格式--innodb-optimize-fulltext-only[={OFF\|ON}]
系统变量innodb_optimize_fulltext_only
范围全球
动态
类型Boolean
默认值OFF

改变OPTIMIZE TABLE对InnoDB表的操作方式。在具有FULLTEXT索引的InnoDB表的维护操作期间,临时启用。

默认情况下,OPTIMIZE TABLE重新组织 table 的聚集索引中的数据。启用此选项后,OPTIMIZE TABLE将跳过 table 数据的重组,而是处理InnoDB FULLTEXT索引的新添加,删除和更新的令牌数据。有关更多信息,请参阅优化 InnoDB Full-Text 索引。


innodb_optimize_point_storage

属性
Command-Line 格式--innodb-optimize-point-storage[={OFF\|ON}]
****介绍5.7.5
****删除5.7.6
系统变量innodb_optimize_point_storage
范围session
动态
类型Boolean
默认值OFF

在_创建POINT类型的列之前启用此变量,以在 variable-length BLOB数据内部存储POINT数据类型。


innodb_page_cleaners

属性
Command-Line 格式--innodb-page-cleaners=#
****介绍5.7.4
系统变量innodb_page_cleaners
范围全球
动态没有
类型整数
默认 Value(> = 5.7.8)4
默认 Value(<= 5.7.7)1
最低 Value1
最大 Value64

从缓冲池实例中清除脏页的页清理程序线程数。页面清除程序线程执行刷新列表和 LRU 刷新。 MySQL 5.6 中引入了单页清理程序线程,用于从InnoDB master 线程卸载缓冲池刷新工作。在 MySQL 5.7 中,InnoDB提供对多个页面清理程序线程的支持。 value 为 1 维护 pre-MySQL 5.7 configuration,其中有一个页面清理线程。当有多个页面清理程序线程时,每个缓冲池实例的缓冲池刷新任务将被分派到 idle 页面清理程序线程。 MySQL 5.7 中innodb_page_cleaners默认 value 从 1 更改为 4。如果页面清除程序线程数超过缓冲池实例数,innodb_page_cleaners将自动设置为与innodb_buffer_pool_instances相同的 value。

如果在将脏页面从缓冲池实例刷新到数据 files 时,您的工作负载是 write-IO 绑定的,并且如果您的系统硬件具有可用容量,则增加页面清除程序线程的数量可能有助于提高 write-IO 吞吐量。

多线程页面清理支持扩展到 MySQL 5.7 中的关闭和恢复阶段。

setpriority()系统调用用于支持它的 Linux 平台上,并且mysqld执行用户被授权给予page_cleaner线程优先于其他 MySQL 和InnoDB线程以帮助页面刷新与当前工作负载保持同步。 支持由此InnoDB启动消息指示:

[Note] InnoDB: If the mysqld execution user is authorized, page cleaner
thread priority can be changed. See the man page of setpriority().

对于不由 systemd 管理服务器启动和关闭的系统,可以在/etc/security/limits.conf中配置mysqld执行用户授权。例如,如果mysqlmysql用户下是 run,则可以通过将这些 lines 添加到/etc/security/limits.conf来授权mysql用户:

mysql              hard    nice       -20
mysql              soft    nice       -20

对于 systemd 受管系统,可以通过在本地化 systemd configuration 文件中指定LimitNICE=-20来实现相同的功能。对于 example,在/etc/systemd/system/mysqld.service.d/override.conf中创建名为override.conf的文件并添加以下条目:

[Service]
LimitNICE=-20

在 creating 或更改override.conf之后,重新加载 systemd configuration,然后告诉 systemd 重启 MySQL 服务:

systemctl daemon-reload
systemctl restart mysqld  # RPM platforms
systemctl restart mysql   # Debian platforms

有关使用本地化 systemd configuration 文件的更多信息,请参阅为 MySQL 配置 systemd。

授权mysqld执行用户后,使用cat命令验证mysqld process 的已配置Nice限制:

shell> cat /proc/mysqld_pid/limits | grep nice
Max nice priority         18446744073709551596 18446744073709551596


innodb_page_size

属性
Command-Line 格式--innodb-page-size=#
系统变量innodb_page_size
范围全球
动态没有
类型列举
默认值16384
有效值(> = 5.7.6)4096
8192
16384
32768
65536
有效值(<= 5.7.5)4096
8192
16384

InnoDB 表空间指定页面大小。值可以以字节或千字节为单位指定。例如,一个 16 千字节的页面大小 value 可以指定为 16384,16KB 或 16k。

innodb_page_size只能在初始化 MySQL 实例之前配置,之后不能更改。如果未指定 value,则使用默认页面大小初始化实例。见Section 14.8.1,“InnoDB Startup Configuration”。

MySQL 5.7 中添加了对 32KB 和 64KB 页面大小的支持。对于 32KB 和 64KB 页面大小,最大行长度约为 16000 字节。 innodb_page_size设置为 32KB 或 64KB 时,不支持ROW_FORMAT=COMPRESSED。对于innodb_page_size=32k,范围大小为 2MB。对于innodb_page_size=64KB,范围大小为 4MB。使用 32KB 或 64KB 页面大小时,innodblog_buffer_size应设置为至少 16M(默认值)。

默认的 16KB 页面大小或更大适用于大范围的工作负载,特别是涉及 table 扫描和涉及批量更新的 DML 操作的查询。较小的页面大小对于涉及许多小写入的OLTP工作负载可能更有效,其中当单个页面包含许多行时争用可能是一个问题。较小的页面也可能对SSD存储设备有效,后者通常使用较小的块大小。保持InnoDB页面大小接近存储设备块大小可以最大限度地减少重写到磁盘的未更改数据量。

第一个系统表空间数据文件(ibdata1)的最小文件大小因innodb_page_size value 而异。有关详细信息,请参阅innodb_data_file_path选项说明。

有关一般的 I/O 调整建议,请参阅第 8.5.8 节,“优化 InnoDB 磁盘 I/O”。


innodb_print_all_deadlocks

属性
Command-Line 格式--innodb-print-all-deadlocks[={OFF\|ON}]
系统变量innodb_print_all_deadlocks
范围全球
动态
类型Boolean
默认值OFF

启用此选项后,InnoDB 错误 log中将记录有关InnoDB用户 transactions 中所有死锁的信息。否则,您将使用SHOW ENGINE INNODB STATUS命令查看有关上次死锁的信息。偶尔的InnoDB死锁不一定是个问题,因为InnoDB会立即检测到这种情况并自动回滚其中一个 transactions。如果 application 没有适当的 error-handling 逻辑来检测回滚并重试其操作,则可以使用此选项来解决发生死锁的原因。大量死锁可能表明需要重新构造为多个表发出DML或SELECT ... FOR UPDATE statements 的 transactions,以便每个 transaction 访问同一 order 中的表,从而避免死锁条件。

有关相关信息,请参阅第 14.7.5 节,“InnoDB 中的死锁”。


innodb_purge_batch_size

属性
Command-Line 格式--innodb-purge-batch-size=#
系统变量innodb_purge_batch_size
范围全球
动态
类型整数
默认值300
最低 Value1
最大 Value5000

定义从历史清单中清除一批中的解析和进程的撤消 log 页数。在多线程清除 configuration 中,协调器清除线程将innodb_purge_batch_size除以innodb_purge_threads,并将该页数分配给每个清除线程。 innodb_purge_batch_size选项还定义了通过撤消日志每 128 次迭代后清除释放的撤消 log 页面的数量。

innodb_purge_batch_size选项用于结合innodb_purge_threads设置进行高级 performance 调整。大多数 MySQL 用户不需要从默认的 value 中更改innodb_purge_batch_size

有关相关信息,请参阅第 14.8.10 节,“配置 InnoDB 清除调度”。


innodb_purge_threads

属性
Command-Line 格式--innodb-purge-threads=#
系统变量innodb_purge_threads
范围全球
动态没有
类型整数
默认 Value(> = 5.7.8)4
默认 Value(<= 5.7.7)1
最低 Value1
最大 Value32

专用于InnoDB 清除操作的后台线程数。最小 value 为 1 表示清除操作始终由后台线程执行,而不是作为master 线程的一部分。 在一个或多个后台线程中运行清除操作有助于减少InnoDB内的内部争用,从而提高可伸缩性。将 value 增加到大于 1 会创建许多单独的清除线程,这可以提高在多个表上执行DML操作的系统的效率。最大值为 32。

有关相关信息,请参阅第 14.8.10 节,“配置 InnoDB 清除调度”。


innodb_purge_rseg_truncate_frequency

属性
Command-Line 格式--innodb-purge-rseg-truncate-frequency=#
****介绍5.7.5
系统变量innodb_purge_rseg_truncate_frequency
范围全球
动态
类型整数
默认值128
最低 Value1
最大 Value128

定义清除系统根据调用清除次数释放回滚段的频率。在释放其回滚段之前,不能截断撤消表空间。通常,清除系统每调用一次清除 128 次就会释放回滚段。默认值 value 为 128.减小此 value 会增加清除线程释放回滚段的频率。

innodb_purge_rseg_truncate_frequency适用于innodb_undolog_truncate。有关更多信息,请参阅截断撤消表空间。


innodb_random_read_ahead

属性
Command-Line 格式--innodb-random-read-ahead[={OFF\|ON}]
系统变量innodb_random_read_ahead
范围全球
动态
类型Boolean
默认值OFF

启用随机read-ahead技术以优化InnoDB I/O。

有关不同类型的 read-ahead 请求的 performance 考虑事项的详细信息,请参阅第 14.8.3.4 节,“配置 InnoDB 缓冲池预取(Read-Ahead)”。有关一般的 I/O 调整建议,请参阅第 8.5.8 节,“优化 InnoDB 磁盘 I/O”。


innodb_read_ahead_threshold

属性
Command-Line 格式--innodb-read-ahead-threshold=#
系统变量innodb_read_ahead_threshold
范围全球
动态
类型整数
默认值56
最低 Value0
最大 Value64

控制InnoDB用于将页面预取到缓冲池的线性read-ahead的灵敏度。如果InnoDB从程度(64 页)顺序读取至少innodb_read_ahead_threshold页,则会启动整个后续范围的异步读取。允许的值范围是 0 到 64. value 为 0 将禁用 read-ahead。对于默认值 56,InnoDB必须从某个范围顺序读取至少 56 页,以启动以下范围的异步读取。

知道通过 read-ahead 机制读取了多少页面,以及在没有被访问的情况下从缓冲池中逐出多少这些页面,在 fine-tuning innodb_read_ahead_threshold设置时非常有用。 显示发动机创新状态输出显示来自Innodb_buffer_pool_read_ahead和Innodb_buffer_pool_read_ahead_evictedglobal 状态变量的计数器信息,这些变量分别报告 read-ahead read-ahead 个请求带来的页数,以及缓冲池中没有被访问过的页数被驱逐。状态变量报告自上次服务器重新启动以来的 global 值。

显示发动机创新状态还显示 read-ahead 页面的读取速率以及未被访问时这些页面被逐出的速率。 per-second 平均值基于自上次调用SHOW ENGINE INNODB STATUS以来收集的统计信息,并显示在显示发动机创新状态输出的BUFFER POOL AND MEMORY部分中。

有关更多信息,请参阅第 14.8.3.4 节,“配置 InnoDB 缓冲池预取(Read-Ahead)”。有关一般的 I/O 调整建议,请参阅第 8.5.8 节,“优化 InnoDB 磁盘 I/O”。


innodb_read_io_threads

属性
Command-Line 格式--innodb-read-io-threads=#
系统变量innodb_read_io_threads
范围全球
动态没有
类型整数
默认值4
最低 Value1
最大 Value64

InnoDB中读操作的 I/O 个线程数。它的写线程对应是innodb_write_io_threads。有关更多信息,请参阅第 14.8.6 节,“配置背景 InnoDB 的数量 I/O 线程”。有关一般 I/O 调整建议,请参阅第 8.5.8 节,“优化 InnoDB 磁盘 I/O”。

注意
在 Linux 系统上,使用innodb_read_io_threads,innodb_write_io_threads和 Linux aio-max-nr设置的默认设置运行多个 MySQL 服务器(通常超过 12 个)可能会超出系统限制。理想情况下,增加aio-max-nr设置;作为解决方法,您可以减少一个或两个 MySQL 变量的设置。


innodb_read_only

属性
Command-Line 格式--innodb-read-only[={OFF\|ON}]
系统变量innodb_read_only
范围全球
动态没有
类型Boolean
默认值OFF

在 read-only 模式下启动InnoDB。用于在 read-only 媒体上分发数据库应用程序或数据_set。也可以在数据仓库中用于在多个实例之间共享相同的数据目录。有关更多信息,请参阅第 14.8.2 节,“为 Read-Only 操作配置 InnoDB”。


innodb_replication_delay

属性
Command-Line 格式--innodb-replication-delay=#
系统变量innodb_replication_delay
范围全球
动态
类型整数
默认值0
最低 Value0
最大 Value4294967295

如果达到innodb_thread_concurrency,则从属服务器上的复制线程延迟(以毫秒为单位)。


innodb_rollback_on_timeout

属性
Command-Line 格式--innodb-rollback-on-timeout[={OFF\|ON}]
系统变量innodb_rollback_on_timeout
范围全球
动态没有
类型Boolean
默认值OFF

InnoDB 回滚默认情况下只有 transaction 超时的最后一个语句。如果指定了--innodb-rollback-on-timeout,则 transaction 超时会导致InnoDB中止并回滚整个 transaction。

注意
如果 start-transaction 语句是START TRANSACTION或开始语句,则回滚不会取消该语句。在发生承诺,ROLLBACK或某些导致隐式提交的 SQL 语句之前,进一步的 SQL statements 将成为 transaction 的一部分。
有关更多信息,请参阅第 14.21.4 节,“InnoDB 错误处理”。


innodb_rollback_segments

属性
Command-Line 格式--innodb-rollback-segments=#
系统变量innodb_rollback_segments
范围全球
动态
类型整数
默认值128
最低 Value1
最大 Value128

定义InnoDB用于生成撤消记录的 transactions 的回滚段数。每个回滚段支持的 transactions 数取决于InnoDB页大小和分配给每个 transaction 的撤消日志数。有关更多信息,请参阅第 14.6.7 节,“撤消日志”。

一个回滚段始终分配给系统表空间,并且保留 32 个回滚段供临时表使用并驻留在临时表空间(ibtmp1)中。要分配其他回滚段,必须将innodb_rollback_segments设置为大于 33 的 value。如果配置单独的撤消表空间,则系统表空间中的回滚段将变为非活动状态。

当innodb_rollback_segments设置为 32 或更小时,InnoDB将一个回滚段分配给系统表空间,将 32 分配给临时表空间。

当innodb_rollback_segments设置为大于 32 的 value 时,InnoDB将一个回滚段分配给系统表空间,将 32 分配给临时表空间,并将其他回滚段分配给撤消表空间(如果存在)。如果不存在撤消表空间,则会为系统表空间分配其他回滚段。

虽然可以增加或减少InnoDB使用的回滚段数,但系统中实际存在的回滚段数不会减少。因此,您可以从低值开始并逐渐增加它以避免分配不需要的回滚段。 innodb_rollback_segments默认值和最大值 value 为 128。

有关相关信息,请参阅第 14.3 节,“InnoDB Multi-Versioning”。有关配置单独的撤消表空间的信息,请参阅第 14.6.3.4 节,“撤消表空间”。


innodb_saved_page_number_debug

属性
Command-Line 格式--innodb-saved-page-number-debug=#
系统变量innodb_saved_page_number_debug
范围全球
动态
类型整数
默认值0
最大 Value2**23-1

保存页码。设置innodb_fil_make_page_dirty_debug选项会污染innodb_saved_page_number_debug定义的页面。只有在使用WITH_DEBUG CMake选项编译调试支持时,innodb_saved_page_number_debug选项才可用。


innodb_sort_buffer_size

属性
Command-Line 格式--innodb-sort-buffer-size=#
系统变量innodb_sort_buffer_size
范围全球
动态没有
类型整数
默认值1048576
最低 Value65536
最大 Value67108864

指定在创建InnoDB索引期间用于对数据进行排序的排序缓冲区的大小。指定的大小定义读入 memory 以进行内部排序然后写入磁盘的数据量。这个 process 被称为“run”。在合并阶段,读取并合并指定大小的缓冲区对。设置越大,运行和合并越少。

此排序区域仅用于索引创建期间的合并排序,而不是在以后的索引维护操作期间。索引创建完成后,将释放缓冲区。

此选项的 value 还控制在在线 DDL操作期间临时 log 文件扩展为 record 并发 DML 的数量。

在此设置可配置之前,大小被硬编码为 1048576 字节(1MB),这仍然是默认值。

在创建索引的ALTER TABLE或创建 TABLE语句期间,将分配 3 个缓冲区,每个缓冲区都具有此选项定义的大小。此外,辅助指针被分配给排序缓冲区中的行,以便排序可以在指针上运行(而不是在排序操作期间移动行)。

对于典型的排序操作,可以使用诸如此类的公式来估计 memory 消耗:

(6 /*FTS_NUM_AUX_INDEX*/ * (3*@@GLOBAL.innodb_sort_buffer_size)
+ 2 * number_of_partitions * number_of_secondary_indexes_created
* (@@GLOBAL.innodb_sort_buffer_size/dict_index_get_min_size(index)*/)
* 8 /*64-bit sizeof *buf->tuples*/")

@@GLOBAL.innodb_sort_buffer_size/dict_index_get_min_size(index)表示持有的最大 tuples。 2 * (@@GLOBAL.innodb_sort_buffer_size/*dict_index_get_min_size(index)*/) * 8 /*64-bit size of *buf->tuples*/表示分配的辅助指针。

注意
对于 32-bit,乘以 4 而不是 8。
对于 full-text 索引上的 parallel 排序,乘以innodb_ft_sort_pll_degree设置:

(6 /*FTS_NUM_AUX_INDEX*/ * @@GLOBAL.innodb_ft_sort_pll_degree)


innodb_spin_wait_delay

属性
Command-Line 格式--innodb-spin-wait-delay=#
系统变量innodb_spin_wait_delay
范围全球
动态
类型整数
默认值6
最低 Value0
最大 Value(64-bit 平台)2**64-1
最大 Value(32-bit 平台)2**32-1

纺锁定的轮询之间的最大延迟。此机制的 low-level 实现取决于硬件和操作系统的组合,因此延迟不对应于固定的 time 间隔。有关更多信息,请参阅第 14.8.9 节,“配置旋转锁定轮询”。


innodb_stats_auto_recalc

属性
Command-Line 格式--innodb-stats-auto-recalc[={OFF\|ON}]
系统变量innodb_stats_auto_recalc
范围全球
动态
类型Boolean
默认值ON

导致InnoDB在 table 中的数据发生实质性更改后自动重新计算持久统计。阈值 value 是 table 中行的 10%。此设置适用于启用innodb_stats_persistent选项时创建的表。也可以通过在创建 TABLE或ALTER TABLE语句中指定STATS_PERSISTENT=1来配置自动统计重新计算。采样以生成统计数据的数据量由innodb_stats_persistentsample_pages变量控制。

有关更多信息,请参阅部分 14.8.11.1,“配置持久优化器统计信息参数”。


innodb_stats_include_delete_marked

属性
Command-Line 格式--innodb-stats-include-delete-marked[={OFF\|ON}]
****介绍5.7.17
系统变量innodb_stats_include_delete_marked
范围全球
动态
类型Boolean
默认值OFF

默认情况下,InnoDB在计算统计信息时读取未提交的数据。对于从 table 中删除行的未提交 transaction,InnoDB在计算行估计和索引统计信息时排除 delete-marked 的记录,这可能导致执行计划用于使用 transaction 隔离 level 同时在 table 上运行的其他 transactions 除了阅读不满意。为了避免这种情况,可以启用innodb_stats_include_delete_marked以确保在计算持久优化器统计信息时InnoDB包含 delete-marked 记录。

启用innodb_stats_include_delete_marked时,分析 TABLE在重新计算统计信息时会考虑 delete-marked 记录。

innodb_stats_include_delete_marked是影响所有InnoDB表的 global 设置。它仅适用于持久优化程序统计信息。

有关相关信息,请参阅部分 14.8.11.1,“配置持久优化器统计信息参数”。


innodb_stats_method

属性
Command-Line 格式--innodb-stats-method=value
系统变量innodb_stats_method
范围全球
动态
类型列举
默认值nulls_equal
有效值nulls_equal
nulls_unequal
nulls_ignored

当收集统计关于InnoDB表的索引值分布时,服务器如何处理NULL值。允许的值为nulls_equalnulls_unequalnulls_ignored。对于nulls_equal,所有NULL索引值都被视为相等,并形成一个 value group,其大小等于NULL值的数量。对于nulls_unequalNULL值被认为是不相等的,并且每个NULL形成一个大小为 1 的不同 value group。对于nulls_ignored,忽略NULL值。

用于生成 table 统计信息的方法会影响优化程序如何选择索引以执行查询,如第 8.3.7 节,“InnoDB 和 MyISAM 索引统计集”中所述。


innodb_stats_on_metadata

属性
Command-Line 格式--innodb-stats-on-metadata[={OFF\|ON}]
系统变量innodb_stats_on_metadata
范围全球
动态
类型Boolean
默认值OFF

此选项仅在优化程序统计配置为 non-persistent 时适用。禁用innodb_stats_persistent或使用STATS_PERSISTENT=0创建或更改单个表时,优化程序统计信息不会保留到磁盘。有关更多信息,请参阅第 14.8.11.2 节,“配置 Non-Persistent 优化程序统计参数”。

启用innodb_stats_on_metadata时,InnoDB会在显示 TABLE 状态等元数据 statements 或访问INFORMATIONSCHEMA.TABLES或INFORMATIONSCHEMA.STATISTICS表时更新 non-persistent 统计。 (这些更新类似于分析 TABLE .)所发生的情况。禁用时,InnoDB不会在这些操作期间更新统计信息。禁用设置可以提高具有大量表或索引的模式的访问速度。它还可以提高稳定性执行计划用于涉及InnoDB表的查询。

要更改设置,请发出语句SET GLOBAL innodb_stats_on_metadata=mode,其中modeONOFF(或10)。更改设置需要足以设置 global 系统变量的权限(请参阅第 5.1.8.1 节,“系统变量权限”),并立即影响所有连接的操作。


innodb_stats_persistent

属性
Command-Line 格式--innodb-stats-persistent[={OFF\|ON}]
系统变量innodb_stats_persistent
范围全球
动态
类型Boolean
默认值ON

指定InnoDB索引统计信息是否持久保存到磁盘。否则,可能会经常重新计算统计数据,这可能会导致查询执行计划的变化。创建 table 时,此设置与每个 table 一起存储。您可以在创建 table 之前在 global level 设置innodb_stats_persistent,或使用创建 TABLE和ALTER TABLE statements 的STATS_PERSISTENT子句覆盖 system-wide 设置并为各个表配置持久统计信息。

有关更多信息,请参阅部分 14.8.11.1,“配置持久优化器统计信息参数”。


innodb_stats_persistent_sample_pages

属性
Command-Line 格式--innodb-stats-persistent-sample-pages=#
系统变量innodb_stats_persistent_sample_pages
范围全球
动态
类型整数
默认值20

为索引列估计基数和其他统计时的索引网页到 sample 的数量,例如分析 TABLE计算的那些。增加 value 可以提高索引统计信息的准确性,这可以改善查询执行计划,但是在执行分析 TABLE期间增加了 I/O InnoDB table。有关更多信息,请参阅部分 14.8.11.1,“配置持久优化器统计信息参数”。

注意
innodb_stats_persistent_sample_pages设置高值可能会导致分析 TABLE执行 time 很长。要估计分析 TABLE访问的数据库页数,请参阅第 14.8.11.3 节,“估算 InnoDB 表的 ANALYZE TABLE 复杂性”。
innodb_stats_persistent_sample_pages仅在为 table 启用innodb_stats_persistent时适用;禁用innodb_stats_persistent时,将应用innodb_stats_transientsample_pages。


innodb_stats_sample_pages

属性
Command-Line 格式--innodb-stats-sample-pages=#
****已过时
系统变量innodb_stats_sample_pages
范围全球
动态
类型整数
默认值8
最低 Value1
最大 Value2**64-1

已过时。请改用innodb_stats_transientsample_pages。


innodb_stats_transient_sample_pages

属性
Command-Line 格式--innodb-stats-transient-sample-pages=#
系统变量innodb_stats_transient_sample_pages
范围全球
动态
类型整数
默认值8

为索引列估计基数和其他统计时的索引网页到 sample 的数量,例如分析 TABLE计算的那些。默认 value 为 8.增加 value 可提高索引统计信息的准确性,这可以改善查询执行计划,但会在打开InnoDB table 或重新计算统计信息时增加 I/O。有关更多信息,请参阅第 14.8.11.2 节,“配置 Non-Persistent 优化程序统计参数”。

注意
innodb_stats_transient_sample_pages设置高值可能会导致分析 TABLE执行 time 很长。要估计分析 TABLE访问的数据库页数,请参阅第 14.8.11.3 节,“估算 InnoDB 表的 ANALYZE TABLE 复杂性”。
innodb_stats_transient_sample_pages仅在 table 禁用innodb_stats_persistent时适用;启用innodb_stats_persistent时,将应用innodb_stats_persistentsample_pages。取代innodb_stats_sample_pages。有关更多信息,请参阅第 14.8.11.2 节,“配置 Non-Persistent 优化程序统计参数”。


innodb_status_output

属性
Command-Line 格式--innodb-status-output[={OFF\|ON}]
****介绍5.7.4
系统变量innodb_status_output
范围全球
动态
类型Boolean
默认值OFF

启用或禁用标准InnoDB Monitor 的定期输出。还与innodb_status_output_locks结合使用以启用或禁用InnoDB锁定监视器的周期性输出。有关更多信息,请参阅第 14.17.2 节,“启用 InnoDB 监视器”。


innodb_status_output_locks

属性
Command-Line 格式--innodb-status-output-locks[={OFF\|ON}]
****介绍5.7.4
系统变量innodb_status_output_locks
范围全球
动态
类型Boolean
默认值OFF

启用或禁用InnoDB锁定监视器。启用后,InnoDB锁定监视器会在SHOW ENGINE INNODB STATUS输出中打印有关锁定的其他信息,并在周期性输出中打印到 MySQL 错误 log。 InnoDB锁定监视器的定期输出作为标准InnoDB监视器输出的一部分打印。因此,必须为InnoDB Lock Monitor 启用标准InnoDB Monitor,以便定期将数据打印到 MySQL error log。有关更多信息,请参阅第 14.17.2 节,“启用 InnoDB 监视器”。


innodb_strict_mode

属性
Command-Line 格式--innodb-strict-mode[={OFF\|ON}]
系统变量innodb_strict_mode
范围Global,Session
动态
类型Boolean
默认 Value(> = 5.7.7)ON
默认 Value(<= 5.7.6)OFF

启用innodb_strict_mode时,InnoDB返回错误而不是某些条件的警告。

严格的模式有助于防止 SQL 中忽略的拼写错误和语法错误,或者操作模式和 SQL 语句的各种组合的其他意外后果。启用innodb_strict_mode时,InnoDB在某些情况下会引发错误条件,而不是发出警告并处理指定的语句(可能具有意外行为)。这类似于 MySQL 中的sql_mode,它控制 MySQL 接受的 SQL 语法,并确定它是否默默地忽略错误,或验证输入语法和数据值。

innodb_strict_mode设置会影响创建 TABLE,ALTER TABLE,创建指数和OPTIMIZE TABLE statements 的语法错误处理。 innodb_strict_mode还启用 record 大小检查,以便或UPDATE永不失败,因为 record 对于所选页面大小而言太大。

Oracle 建议在创建 TABLE,ALTER TABLE和创建指数 statements 中使用ROW_FORMATKEY_BLOCK_SIZE子句时启用innodb_strict_mode。禁用innodb_strict_mode时,InnoDB忽略冲突的子句,并在消息 log 中仅显示警告的 table 或索引。生成的 table 可能具有与预期不同的特性,例如在尝试创建压缩的 table 时缺少压缩支持。启用innodb_strict_mode时,此类问题会立即生成错误,并且不会创建 table 或索引。

您可以在启动mysqld时在命令 line 上启用或禁用innodb_strict_mode,或者在 MySQL configuration 文件中启用或禁用innodb_strict_mode。您还可以在运行时使用语句SET [GLOBAL|SESSION] innodb_strict_mode=mode启用或禁用innodb_strict_mode,其中modeONOFF。更改GLOBAL设置需要足以设置 global 系统变量的权限(请参阅第 5.1.8.1 节,“系统变量权限”)并影响随后连接的所有客户端的操作。任何 client 都可以更改innodb_strict_modeSESSION设置,该设置仅影响 client。

innodb_strict_mode不适用于一般表空间。一般表空间的表空间管理规则严格强制执行,与innodb_strict_mode无关。有关更多信息,请参阅第 13.1.19 节,“CREATE TABLESPACE 语法”。


innodb_support_xa

属性
Command-Line 格式--innodb-support-xa[={OFF\|ON}]
****已过时5.7.10
系统变量innodb_support_xa
范围Global,Session
动态
类型Boolean
默认值ON

在XA transactions 中为 two-phase commit 启用InnoDB支持,为 transaction 准备导致额外的磁盘刷新。 XA 机制在内部使用,对于任何打开了二进制 log 并且接受来自多个线程的数据更改的服务器都是必不可少的。如果禁用innodb_support_xa,transactions 可以在与实时数据库提交不同的 order 中写入二进制 log,这可以在灾难恢复或复制从属设备上重播二进制 log 时生成不同的数据。不要在复制 master 服务器上禁用innodb_support_xa,除非您有一个不寻常的设置,其中只有一个线程能够更改数据。

innodb_support_xa已弃用,将在未来的 MySQL 版本中删除。 InnoDB在 XA transactions 中对 two-phase commit 的支持始终从 MySQL 5.7.10 开始启用。不再允许禁用innodb_support_xa,因为它会使复制不安全并阻止与二进制 log group commit 相关的 performance 增益。


innodb_sync_array_size

属性
Command-Line 格式--innodb-sync-array-size=#
系统变量innodb_sync_array_size
范围全球
动态没有
类型整数
默认值1
最低 Value1
最大 Value1024

定义 mutex/lock wait array 的大小。增加 value 会分割用于协调线程的内部数据结构,以便在具有大等待线程数的工作负载中实现更高的并发性。必须在 MySQL 实例启动时配置此设置,之后无法更改。对于经常产生大量等待线程(通常大于 768)的工作负载,建议增加 value。


innodb_sync_spin_loops

属性
Command-Line 格式--innodb-sync-spin-loops=#
系统变量innodb_sync_spin_loops
范围全球
动态
类型整数
默认值30
最低 Value0
最大 Value4294967295

线程在挂起之前等待释放InnoDB mutex 的次数。


innodb_sync_debug

属性
Command-Line 格式--innodb-sync-debug[={OFF\|ON}]
****介绍5.7.8
系统变量innodb_sync_debug
范围全球
动态没有
类型Boolean
默认值OFF

启用InnoDB存储引擎的同步调试检查。只有在使用WITH_DEBUG CMake选项编译调试支持时,此选项才可用。

以前,启用InnoDB sync 调试检查需要使用ENABLE_DEBUG_SYNC CMake选项启用 Debug Sync 工具。通过引入此变量,MySQL 5.7 中删除了此要求。


innodb_table_locks

属性
Command-Line 格式--innodb-table-locks[={OFF\|ON}]
系统变量innodb_table_locks
范围Global,Session
动态
类型Boolean
默认值ON

如果autocommit = 0,InnoDB荣誉锁表;在_所有其他线程都已将所有锁定释放到 table 之前,MySQL 不会从_返回__。 innodbtable_locks的默认 value 为 1,这意味着锁表会导致 InnoDB 在内部锁定 table。

在 MySQL 5.7 中,innodbtable_locks = 0对于使用LOCK TABLES ...写显式锁定的表没有影响。对于由LOCK TABLES ...写隐式(对于 example,通过触发器)或LOCK TABLES ...阅读进行读取或写入锁定的表,它确实有效。

有关相关信息,请参阅第 14.7 节,“InnoDB 锁定和 Transaction Model”。


innodb_temp_data_file_path

属性
Command-Line 格式--innodb-temp-data-file-path=file_name
****介绍5.7.1
系统变量innodb_temp_data_file_path
范围全球
动态没有
类型
默认值ibtmp1:12M:autoextend

定义InnoDB 临时表空间 data files的相对路径,name,大小和属性。如果没有为innodb_temp_data_file_path指定 value,则默认行为是在 MySQL 数据目录中创建名为ibtmp1的单个 auto-extending 数据文件。初始文件大小略大于 12MB。

临时表空间数据文件规范的完整语法包括文件 name,文件大小以及autoextendmax属性:

file_name:file_size[:autoextend[:max:max_file_size]]

临时表空间数据文件不能与另一个InnoDB数据文件具有相同的 name。任何无法或错误创建临时表空间数据文件被视为致命,服务器启动被拒绝。临时表空间具有动态生成的空间 ID,可以在每次重新启动服务器时更改。

通过将KMG附加到 value 大小,可以指定文件大小 KB,MB 或 GB(1024MB)。 files 的大小总和必须略大于 12MB。

各个 files 的大小限制由您的操作系统决定。您可以在支持大 files 的操作系统上将文件大小设置为大于 4GB。不支持将原始磁盘分区用于临时表空间数据 files。

autoextendmax属性只能用于innodb_temp_data_file_path设置中最后指定的数据文件。例如:

[mysqld]
innodb_temp_data_file_path=ibtmp1:50M;ibtmp2:12M:autoextend:max:500MB

如果指定autoextend选项,InnoDB会扩展数据文件(如果数据文件的可用空间不足)。默认情况下autoextend增量为 64MB。要修改增量,请更改innodb_autoextend_increment系统变量。

临时表空间数据 files 的完整目录路径是通过连接innodb_data_home_dir和innodb_temp_data_file_path定义的 paths 形成的。

临时表空间由所有 non-compressed InnoDB临时表共享。压缩临时表驻留在临时文件目录中创建的 file-per-table tablespace files 中,该目录由TMPDIR configuration 选项定义。

在 read-only 模式下 running InnoDB之前,将innodb_temp_data_file_path设置为数据目录之外的位置。路径必须相对于数据目录。例如:

--innodb-temp-data-file-path=../../../tmp/ibtmp1:12M:autoextend

有关 active InnoDB临时表的元数据位于INFORMATIONSCHEMA.INNODB_TEMPTABLE_INFO中。

有关相关信息,请参阅第 14.6.3.5 节,“临时表空间”。


innodb_thread_concurrency

属性
Command-Line 格式--innodb-thread-concurrency=#
系统变量innodb_thread_concurrency
范围全球
动态
类型整数
默认值0
最低 Value0
最大 Value1000

InnoDB尝试在InnoDB内同时保持操作系统线程数小于或等于此变量给出的限制(InnoDB使用操作系统线程来处理用户 transactions)。一旦线程数达到此限制,就会在“先进先出”(FIFO)队列中将其他线程放入 wait state 中以供执行。等待锁的线程不计入并发执行线程的数量。

此变量的范围是 0 到 1000.value 为 0(缺省值)被解释为无限并发(无并发检查)。禁用线程并发检查使InnoDB能够根据需要创建尽可能多的线程。 value 为 0 也会禁用SHOW ENGINE INNODB STATUS输出的ROW OPERATIONS部分中的queries inside InnoDBqueries in queue counters

如果您的 MySQL 实例与其他 applications 共享 CPU 资源,或者您的工作负载或并发用户数正在增长,请考虑设置此变量。正确的设置取决于工作负载,计算环境以及您正在运行的 MySQL 的 version。您需要测试一系列值以确定提供最佳性能的设置。 innodb_thread_concurrency是一个动态变量,它允许您在实时测试系统上试验不同的设置。如果特定设置表现不佳,您可以快速将innodb_thread_concurrency设置为 0。

使用以下准则来帮助查找和维护适当的设置:

  • 如果工作负载的并发用户线程数小于 64,请设置innodb_thread_concurrency=0

  • 如果您的工作负载一直很大或偶尔会出现峰值,请先设置innodb_thread_concurrency=128,然后将 value 降低到 96,80,64 等,直到找到提供最佳性能的线程数。假设您的系统通常有 40 到 50 个用户,但是这个数字会定期增加到 60,70 甚至 200.您会发现 performance 在 80 个并发用户中是稳定的,但开始显示高于此数字的回归。在这种情况下,您可以设置innodb_thread_concurrency=80以避免影响 performance。

  • 如果您不希望InnoDB为用户线程使用超过一定数量的虚拟 CPU(对于 example,则为 20 个虚拟 CPU),请将innodb_thread_concurrency设置为此数字(或者可能更低,具体取决于 performance 结果)。如果你的目标是将 MySQL 与其他应用程序隔离开来,你可以考虑将mysqld process 专门绑定到虚拟 CPU。但请注意,如果mysqld process 不是一直很忙,则独占 binding 可能会导致 non-optimal 硬件使用。在这种情况下,您可以将mysqld process 绑定到虚拟 CPU,但也允许其他 applications 使用部分或全部虚拟 CPU。

注意
从操作系统的角度来看,使用资源管理解决方案来管理 applications 之间共享 CPU time 的方式可能比_bin _ _process 更可取。例如,您可以将 90%的虚拟 CPU time 分配给给定的 application 而其他关键进程不是 running,并在其他关键进程运行时将 value 扩展回 40%。

  • 由于对系统内部和资源的争用增加,innodb_thread_concurrency值太高会导致性能回归。

  • 在某些情况下,最佳innodb_thread_concurrency设置可能小于虚拟 CPU 的数量。

  • 定期监控和分析您的系统。对工作负载,用户数或计算环境的更改可能需要您调整innodb_thread_concurrency设置。

有关相关信息,请参阅部分 14.8.5,“为 InnoDB 配置线程并发”。


innodb_thread_sleep_delay

属性
Command-Line 格式--innodb-thread-sleep-delay=#
系统变量innodb_thread_sleep_delay
范围全球
动态
类型整数
默认值10000
最低 Value0
最大 Value(64-bit 平台,<= 5.7.3)18446744073709551615
最大 Value(32-bit 平台,<= 5.7.3)4294967295
最大 Value(> = 5.7.4)1000000

定义 long InnoDB threads 在加入InnoDB队列之前如何休眠,以微秒为单位。默认的 value 是 10000.value 为 0 会禁用 sleep。您可以将innodb_adaptive_max_sleep_delay设置为允许innodb_thread_sleep_delay的最高值,InnoDB会根据当前的 thread-scheduling 活动自动调整innodb_thread_sleep_delay。这种动态调整有助于线程调度机制在系统轻载或满负荷运行时平稳运行。

有关更多信息,请参阅部分 14.8.5,“为 InnoDB 配置线程并发”。


innodb_tmpdir

属性
Command-Line 格式--innodb-tmpdir=dir_name
****介绍5.7.11
系统变量innodb_tmpdir
范围Global,Session
动态
类型目录 name
默认值NULL

用于为重建 table 的联机ALTER TABLE操作期间创建的临时排序 files 定义备用目录。

重建 table 的联机ALTER TABLE操作还会在与原始 table 相同的目录中创建中间 table 文件。 innodb_tmpdir选项不适用于中间 table files。

有效的 value 是 MySQL 数据目录路径以外的任何目录路径。如果 value 为 NULL(默认值),则临时 files 创建 MySQL 临时目录(Unix 上$TMPDIR,Windows 上%TEMP%或--tmpdir configuration 选项指定的目录)。如果指定了目录,则只有在使用组语句配置innodb_tmpdir时才会检查是否存在目录和权限。如果在目录 string 中提供了符号链接,则会解析符号链接并将其存储为绝对路径。路径不应超过 512 个字节。如果将innodb_tmpdir设置为无效目录,则联机ALTER TABLE操作会报告错误。 innodb_tmpdir会覆盖 MySQL TMPDIR设置,但仅适用于在线ALTER TABLE操作。

配置innodb_tmpdir需要FILE权限。

引入了innodb_tmpdir选项以帮助避免溢出位于tmpfs文件系统上的临时文件目录。由于在重建 table 的联机ALTER TABLE操作期间创建的大型临时排序 files,可能会发生此类溢出。

在复制环境中,如果所有服务器具有相同的操作系统环境,则仅考虑复制innodb_tmpdir设置。否则,复制innodb_tmpdir设置可能会导致 running 重建 table 的在线ALTER TABLE操作时出现复制失败。如果服务器操作环境不同,建议您分别在每台服务器上配置innodb_tmpdir

有关更多信息,请参阅第 14.13.3 节,“在线 DDL 空间要求”。有关在线ALTER TABLE操作的信息,请参阅第 14.13 节,“InnoDB 和在线 DDL”。


innodb_trx_purge_view_update_only_debug

属性
Command-Line 格式--innodb-trx-purge-view-update-only-debug[={OFF\|ON}]
系统变量innodb_trx_purge_view_update_only_debug
范围全球
动态
类型Boolean
默认值OFF

暂停清除 delete-marked 记录,同时允许更新清除视图。此选项人为地创建了一种情况,其中清除视图已更新但尚未执行清除。只有在使用WITH_DEBUG CMake选项编译调试支持时,此选项才可用。


innodb_trx_rseg_n_slots_debug

属性
Command-Line 格式--innodb-trx-rseg-n-slots-debug=#
系统变量innodb_trx_rseg_n_slots_debug
范围全球
动态
类型整数
默认值0
最大 Value1024

设置一个调试 flag,将TRX_RSEG_N_SLOTS限制为trx_rsegf_undo_find_free 函数的给定值,该函数查找撤消 log 段的空闲插槽。只有在使用WITH_DEBUG CMake选项编译调试支持时,此选项才可用。


innodb_undo_directory

属性
Command-Line 格式--innodb-undo-directory=dir_name
系统变量innodb_undo_directory
范围全球
动态没有
类型目录 name
默认值.

InnoDB创建撤消表空间的路径。通常用于将撤消日志放在不同的存储设备上。与innodb_rollback_segments和innodb_undotablespaces一起使用。

没有默认的 value(它是 NULL)。如果未指定路径,则会在 MySQL 数据目录中创建撤消表空间,如DATADIR所定义。

有关更多信息,请参阅第 14.6.3.4 节,“撤消表空间”。


innodb_undo_log_truncate

属性
Command-Line 格式--innodb-undo-log-truncate[={OFF\|ON}]
****介绍5.7.5
系统变量innodb_undo_log_truncate
范围全球
动态
类型Boolean
默认值OFF

启用后,超出innodb_max_undolog_size定义的阈值 value 的撤消表空间将标记为截断。只能撤消撤消表空间。不支持截断驻留在系统表空间中的撤消日志。要进行截断,必须至少有两个 undo 表空间和两个 redo-enabled undo 日志配置为使用 undo 表空间。这意味着innodb_undotablespaces必须设置为 value 等于或大于 2,并且innodb_rollback_segments必须设置为 value 等于或大于 35。

innodb_purge_rseg_truncate_frequency变量可用于加速撤消撤消表空间。

有关更多信息,请参阅截断撤消表空间。


innodb_undo_logs

属性
Command-Line 格式--innodb-undo-logs=#
****已过时5.7.19
系统变量innodb_undo_logs
范围全球
动态
类型整数
默认值128
最低 Value1
最大 Value128

注意
innodb_undologs已弃用,将在以后的版本中删除。
定义InnoDB使用的回滚段的数量。 innodb_undologs选项是innodb_rollback_segments的别名。有关更多信息,请参阅innodb_rollback_segments的说明。


innodb_undo_tablespaces

属性
Command-Line 格式--innodb-undo-tablespaces=#
****已过时5.7.21
系统变量innodb_undo_tablespaces
范围全球
动态没有
类型整数
默认值0
最低 Value0
最大 Value(> = 5.7.8)95
最大 Value(<= 5.7.7)126

InnoDB使用的撤消表空间的数量。默认 value 为 0。

注意
innodb_undotablespaces已弃用,将在以后的版本中删除。
由于在 long-running transactions 期间撤消日志会变大,因此在多个表空间中使用撤消日志会减少任何一个表空间的最大大小。撤消表空间 files 在innodb_undo_directory定义的位置创建,名称形式为undoN,其中N是表示空间 ID 的一系列整数(包括前导零)。

undo 表空间文件的初始大小取决于innodb_page_size value。对于默认的 16KB InnoDB页面大小,初始撤消表空间文件大小为 10MiB。对于 4KB,8KB,32KB 和 64KB 页面大小,初始 undo 表空间 files 大小分别为 7MiB,8MiB,20MiB 和 40MiB。

至少需要两个 undo 表空间才能截断 undo 日志。见截断撤消表空间。

重要
innodb_undotablespaces只能在初始化 MySQL 实例之前配置,之后不能更改。如果未指定 value,则使用默认设置 0 初始化实例。尝试使用比 MySQL 实例初始化时指定的更多数量的撤消表空间重新启动InnoDB会导致启动失败并显示错误,指出InnoDB未找到预期的撤消表空间数。
如第 14.6.7 节,“撤消日志”中所述,为临时表保留了 32 个回滚段。一个回滚段始终分配给系统表空间,从而为撤消表空间留下 95 个回滚段。这意味着innodb_undotablespaces最大限制为 95。

有关更多信息,请参阅第 14.6.3.4 节,“撤消表空间”。


innodb_use_native_aio

属性
Command-Line 格式--innodb-use-native-aio[={OFF\|ON}]
系统变量innodb_use_native_aio
范围全球
动态没有
类型Boolean
默认值ON

指定是否使用 Linux 异步 I/O 子系统。此变量仅适用于 Linux 系统,并且在服务器运行时无法更改。通常,您不需要配置此选项,因为默认情况下已启用此选项。

InnoDB在 Windows 系统上具有的异步 I/O功能在 Linux 系统上可用。 (其他 Unix-like 系统继续使用同步 I/O calls.)这个 feature 提高了大量 I/O-bound 系统的可扩展性,这些系统通常在SHOW ENGINE INNODB STATUS\G输出中显示许多未决的 reads/writes。

Running 与大量的InnoDB I/O 个线程,尤其是在同一台服务器上运行多个此类实例,可能会超出 Linux 系统的容量限制。在这种情况下,您可能会收到以下错误:

EAGAIN: The specified maxevents exceeds the user's limit of available events.

您通常可以通过向/proc/sys/fs/aio-max-nr写入更高的限制来解决此错误。

但是,如果 OS 中的异步 I/O 子系统出现问题导致InnoDB无法启动,则可以使用innodb_use_native_aio=0启动服务器。如果InnoDB检测到潜在问题,例如tmpdir位置,tmpfs文件系统和不支持tmpfs上的 AIO 的 Linux 内核的组合,则此选项也可能在启动期间自动禁用。

有关更多信息,请参阅部分 14.8.7,“在 Linux 上使用异步 I/O”。


innodb_use_sys_malloc

属性
Command-Line 格式--innodb-use-sys-malloc[={OFF\|ON}]
****已过时是(在 5.7.4 中删除)
系统变量innodb_use_sys_malloc
范围全球
动态没有
类型Boolean
默认值ON

启用操作系统 memory 分配器。如果禁用,InnoDB使用自己的分配器。默认的 value 是ON。有关更多信息,请参阅第 14.8.4 节,“为 InnoDB 配置 Memory 分配器”。

MySQL 5.7 中删除了innodb_use_sys_malloc。


innodb_version

InnoDB version number。在 MySQL 5.7 中,InnoDB的单独 version 编号不适用,并且此 value 与服务器的版编号相同。


innodb_write_io_threads

属性
Command-Line 格式--innodb-write-io-threads=#
系统变量innodb_write_io_threads
范围全球
动态没有
类型整数
默认值4
最低 Value1
最大 Value64

InnoDB中写操作的 I/O 个线程数。默认的 value 是 4.读取线程的对应部分是innodb_read_io_threads。有关更多信息,请参阅第 14.8.6 节,“配置背景 InnoDB 的数量 I/O 线程”。有关一般 I/O 调整建议,请参阅第 8.5.8 节,“优化 InnoDB 磁盘 I/O”。

注意
在 Linux 系统上,使用innodb_read_io_threads,innodb_write_io_threads和 Linux aio-max-nr设置的默认设置运行多个 MySQL 服务器(通常超过 12 个)可能超出系统限制。理想情况下,增加aio-max-nr设置;作为解决方法,您可以减少一个或两个 MySQL 变量的设置。
还要考虑sync_binlog的 value,它控制二进制 log 与磁盘的同步。

有关一般的 I/O 调整建议,请参阅第 8.5.8 节,“优化 InnoDB 磁盘 I/O”。