Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 Reference Manual  /  The InnoDB Storage Engine  /  InnoDB Startup Options and System Variables

17.14 InnoDB 启动选项和系统变量

  • 可以通过名称启用或禁用布尔类型的系统变量,或者使用--skip-前缀来禁用它们。例如,可以使用--innodb-adaptive-hash-index--skip-innodb-adaptive-hash-index在命令行上启用或禁用InnoDB自适应哈希索引,或者在选项文件中使用innodb_adaptive_hash_indexskip_innodb_adaptive_hash_index

  • 一些变量描述中提到“启用”或“禁用”一个变量。这些变量可以使用SET语句通过将其设置为ON1来启用,或者将其设置为OFF0来禁用。布尔变量可以在启动时设置为ONTRUEOFFFALSE(不区分大小写)和10。请参阅第6.2.2.4节,“程序选项修饰符”

  • 系统变量可以以--var_名=的形式在命令行中指定,也可以在选项文件中以var_名=的形式指定。

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

  • 关于GLOBALSESSION变量作用域修饰符的信息,请参阅SET语句文档。

  • 某些选项控制InnoDB数据文件的位置和布局。第17.8.1节,“InnoDB 启动配置”解释了如何使用这些选项。

  • 一些选项,可能您最初不需要使用,但可以根据机器容量和数据库工作负载来调整InnoDB性能特征。

  • 关于指定选项和系统变量的更多信息,请参阅第6.2.2节,“指定程序选项”

表17.23 InnoDB 选项和变量参考

Name Cmd-Line Option File System Var Status Var Var Scope Dynamic
foreign_key_checks 都是
innodb_adaptive_flushing 全局
innodb_adaptive_flushing_lwm 全局
innodb_adaptive_hash_index 全局
innodb_adaptive_hash_index_parts 全局
innodb_adaptive_max_sleep_delay 全局
innodb_autoextend_increment 全局
innodb_autoinc_lock_mode 全局
innodb_background_drop_list_empty 全局
Innodb_buffer_pool_bytes_data 全局
Innodb_buffer_pool_bytes_dirty 全局
innodb_buffer_pool_chunk_size 全局
innodb_buffer_pool_debug 全局
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_in_core_file 全局
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_checkpoint_disabled 全局
innodb_checksum_algorithm 全局
innodb_cmp_per_index_enabled 全局
innodb_commit_concurrency 全局
innodb_compress_debug 全局
innodb_compression_failure_threshold_pct 全局
innodb_compression_level 全局
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_ddl_buffer_size 双方
innodb_ddl_log_crash_reset_debug 全局
innodb_ddl_threads 双方
innodb_deadlock_detect 全局
innodb_dedicated_server 全局
innodb_default_row_format 全局
innodb_directories 全局
innodb_disable_sort_file_cache 全局
innodb_doublewrite 全局
innodb_doublewrite_batch_size 全局
innodb_doublewrite_dir 全局
innodb_doublewrite_files 全局
innodb_doublewrite_pages 全局
innodb_fast_shutdown 全局
innodb_fil_make_page_dirty_debug 全局
innodb_file_per_table 全局
innodb_fill_factor 全局
innodb_flush_log_at_timeout 全局
innodb_flush_log_at_trx_commit 全局
innodb_flush_method 全局
innodb_flush_neighbors 全局
innodb_flush_sync 全局
innodb_flushing_avg_loops 全局
innodb_force_load_corrupted 全局
innodb_force_recovery 全局
innodb_fsync_threshold 全局
innodb_ft_aux_table 全局
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_stopword_table 全局
innodb_ft_sort_pll_degree 全局
innodb_ft_total_cache_size 全局
innodb_ft_user_stopword_table 双方
Innodb_have_atomic_builtins 全局
innodb_idle_flush_pct 全局
innodb_io_capacity 全局
innodb_io_capacity_max 全局
innodb_limit_optimistic_insert_debug 全局
innodb_lock_wait_timeout 双方
innodb_log_buffer_size 全局
innodb_log_checkpoint_fuzzy_now 全局
innodb_log_checkpoint_now 全局
innodb_log_checksums 全局
innodb_log_compressed_pages 全局
innodb_log_file_size 全局
innodb_log_files_in_group 全局
innodb_log_group_home_dir 全局
innodb_log_spin_cpu_abs_lwm 全局
innodb_log_spin_cpu_pct_hwm 全局
innodb_log_wait_for_flush_spin_hwm 全局
Innodb_log_waits 全局
innodb_log_write_ahead_size 全局
Innodb_log_write_requests 全局
innodb_log_writer_threads 全局
Innodb_log_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_undo_log_size 全局
innodb_merge_threshold_set_all_debug 全局
innodb_monitor_disable 全局
innodb_monitor_enable 全局
innodb_monitor_reset 全局
innodb_monitor_reset_all 全局
Innodb_num_open_files 全局
innodb_numa_interleave 全局
innodb_old_blocks_pct 全局
innodb_old_blocks_time 全局
innodb_online_alter_log_max_size 全局
innodb_open_files 全局
innodb_optimize_fulltext_only 全局
Innodb_os_log_fsyncs 全局
Innodb_os_log_pending_fsyncs 全局
Innodb_os_log_pending_writes 全局
Innodb_os_log_written 全局
innodb_page_cleaners 全局
Innodb_page_size 全局
innodb_page_size 全局
Innodb_pages_created 全局
Innodb_pages_read 全局
Innodb_pages_written 全局
innodb_parallel_read_threads 会话
innodb_print_all_deadlocks 全局
innodb_print_ddl_logs 全局
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_redo_log_archive_dirs 全局
innodb_redo_log_capacity 全局
Innodb_redo_log_capacity_resized 全局
Innodb_redo_log_checkpoint_lsn 全局
Innodb_redo_log_current_lsn 全局
Innodb_redo_log_enabled 全局
innodb_redo_log_encrypt 全局
Innodb_redo_log_flushed_to_disk_lsn 全局
Innodb_redo_log_logical_size 全局
Innodb_redo_log_physical_size 全局
Innodb_redo_log_read_only 全局
Innodb_redo_log_resize_status 全局
Innodb_redo_log_uuid 全局
innodb_replication_delay 全局
innodb_rollback_on_timeout 全局
innodb_rollback_segments 全局
Innodb_row_lock_current_waits 全局
Innodb_row_lock_time 全局
Innodb_row_lock_time_avg 全局
Innodb_row_lock_time_max 全局
Innodb_row_lock_waits 全局
Innodb_rows_deleted 全局
Innodb_rows_inserted 全局
Innodb_rows_read 全局
Innodb_rows_updated 全局
innodb_saved_page_number_debug 全局
innodb_segment_reserve_factor 全局
innodb_sort_buffer_size 全局
innodb_spin_wait_delay 全局
innodb_spin_wait_pause_multiplier 全局
innodb_stats_auto_recalc 全局
innodb_stats_include_delete_marked 全局
innodb_stats_method 全局
innodb_stats_on_metadata 全局
innodb_stats_persistent 全局
innodb_stats_persistent_sample_pages 全局
innodb_stats_transient_sample_pages 全局
innodb-status-file
innodb_status_output 全局
innodb_status_output_locks 全局
innodb_strict_mode 双方
innodb_sync_array_size 全局
innodb_sync_debug 全局
innodb_sync_spin_loops 全局
Innodb_system_rows_deleted 全局
Innodb_system_rows_inserted 全局
Innodb_system_rows_read 全局
Innodb_system_rows_updated 全局
innodb_table_locks 双方
innodb_temp_data_file_path 全局
innodb_temp_tablespaces_dir 全局
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_undo_log_encrypt 全局
innodb_undo_log_truncate 全局
innodb_undo_tablespaces 全局
Innodb_undo_tablespaces_active 全局
Innodb_undo_tablespaces_explicit 全局
Innodb_undo_tablespaces_implicit 全局
Innodb_undo_tablespaces_total 全局
innodb_use_fdatasync 全局
innodb_use_native_aio 全局
innodb_validate_tablespace_paths 全局
innodb_version 全局
innodb_write_io_threads 全局
unique_checks 双方

  • --innodb-status-file

    Command-Line Format --innodb-status-file[={OFF|ON}]
    Type Boolean
    Default Value OFF

    启动选项--innodb-status-file控制是否创建名为innodb_status_pid的文件,并将SHOW ENGINE INNODB STATUS输出写入其中,每隔约15秒。

    默认情况下,不创建innodb_status_pid文件。要创建该文件,请使用--innodb-status-file选项启动mysqldInnoDB在正常关闭服务器时删除该文件。如果发生非正常关闭,可能需要手动删除状态文件。

    选项--innodb-status-file旨为临时使用,因为SHOW ENGINE INNODB STATUS输出生成可能影响性能,并且innodb_status_pid文件可能会随时间增长而变得很大。

    相关信息,请见第17.17.2节,“启用InnoDB监控”

  • innodb_adaptive_flushing

    Command-Line Format --innodb-adaptive-flushing[={OFF|ON}]
    System Variable innodb_adaptive_flushing
    Scope Global
    Dynamic
    SET_VAR Hint Applies
    Type 布尔值
    Default Value ON

    指定是否动态调整InnoDB缓冲池中的脏页flush率,根据工作负载进行调整。动态调整flush率的目的是避免I/O活动的burst。这项设置默认启用。请参阅第17.8.3.5节,“配置缓冲池flushing”获取更多信息。对于一般I/O优化建议,请参阅第10.5.8节,“优化InnoDB磁盘I/O”

  • innodb_adaptive_flushing_lwm

    Command-Line Format --innodb-adaptive-flushing-lwm=#
    System Variable innodb_adaptive_flushing_lwm
    Scope Global
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 10
    Minimum Value 0
    Maximum Value 70

    定义了redo日志容量百分比的低水位标记,表示adaptive flushing启用时的redo日志容量百分比。更多信息,请参见第17.8.3.5节,“配置缓冲池刷新”

  • innodb_adaptive_hash_index

    Command-Line Format --innodb-adaptive-hash-index[={OFF|ON}]
    System Variable innodb_adaptive_hash_index
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 布尔值
    Default Value OFF

    是否启用或禁用InnoDB的adaptive hash index。根据您的工作负载,您可能需要动态地启用或禁用adaptive hash indexing以提高查询性能。由于adaptive hash index可能对所有工作负载都不是有用的,因此使用实际工作负载进行benchmark,既启用又禁用adaptive hash indexing。详细信息请见第17.5.3节,“Adaptive Hash Index”

    这个变量默认禁用。您可以使用SET GLOBAL语句在不重新启动服务器的情况下修改该参数。更改设置需要具有足够权限以设置全局系统变量。请参阅第7.1.9.1节,“系统变量权限”。您也可以在服务器启动时使用--innodb-adaptive-hash-index来启用它。

    禁用自适应哈希索引将立即清空哈希表。正常操作可以继续进行,而哈希表正在被清空时,执行使用哈希表访问索引B-树的查询将直接访问索引B-树。当自适应哈希索引重新启用时,哈希表将在正常操作中被重建。

    在MySQL 8.4之前,这个选项默认启用。

  • innodb_adaptive_hash_index_parts

    Command-Line Format --innodb-adaptive-hash-index-parts=#
    System Variable innodb_adaptive_hash_index_parts
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 数字
    Default Value 8
    Minimum Value 1
    Maximum Value 512

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

    默认情况下,自适应哈希索引搜索系统被分为8个部分。最大设置值是512。

    有关相关信息,请参见第17.5.3节,“Adaptive Hash Index”

  • innodb_adaptive_max_sleep_delay

    Command-Line Format --innodb-adaptive-max-sleep-delay=#
    System Variable innodb_adaptive_max_sleep_delay
    Scope Global
    Dynamic Yes
    SET_VAR Hint Applies No
    Type Integer
    Default Value 150000
    Minimum Value 0
    Maximum Value 1000000
    Unit 微秒

    允许InnoDB自动调整innodb_thread_sleep_delay的值,以适应当前工作负载。任何非零值都启用了动态调整innodb_thread_sleep_delay的值,直到指定在innodb_adaptive_max_sleep_delay选项中的最大值。该值表示微秒。这一选项对繁忙系统非常有用,特别是MySQL系统具有数百或数千个同时连接的线程。

    更多信息,请见第17.8.4节,“InnoDB线程并发配置”

  • innodb_autoextend_increment

    Command-Line Format --innodb-autoextend-increment=#
    System Variable innodb_autoextend_increment
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 64
    Minimum Value 1
    Maximum Value 1000
    Unit 兆字节

    当自动扩展的InnoDB系统表空间文件满时,扩展大小(以兆字节为单位)。默认值为64。相关信息,请见系统表空间数据文件配置调整系统表空间

    innodb_autoextend_increment 设置不影响文件表空间通用表空间文件。这些文件无论innodb_autoextend_increment设置如何,都将自动扩展。初始扩展是小的量,随后扩展将以4MB为增量。

  • innodb_autoinc_lock_mode

    Command-Line Format --innodb-autoinc-lock-mode=#
    System Variable innodb_autoinc_lock_mode
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 2
    Valid Values

    0

    1

    2

    用于生成自增值的锁定模式。允许的值是0、1或2,分别对应传统、连续或交错锁定。

    默认设置为2(交错),以兼容行基于复制。

    每种锁定模式的特性,请参见InnoDB AUTO_INCREMENT 锁定模式

  • innodb_background_drop_list_empty

    Command-Line Format --innodb-background-drop-list-empty[={OFF|ON}]
    System Variable innodb_background_drop_list_empty
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 布尔值
    Default Value OFF

    启用innodb_background_drop_list_empty调试选项可以避免测试用例失败,延迟表创建直到背景删除列表为空。例如,如果测试用例A将表t1添加到背景删除列表,然后测试用例B等待背景删除列表为空后再创建表t1

  • innodb_buffer_pool_chunk_size

    Command-Line Format --innodb-buffer-pool-chunk-size=#
    System Variable innodb_buffer_pool_chunk_size
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 134217728
    Minimum Value 1048576
    Maximum Value innodb_缓冲池大小 / innodb_缓冲池实例数
    Unit 字节

    innodb_缓冲池块大小 定义了 InnoDB 缓冲池 resize 操作的块大小。

    为了避免在 resize 操作中复制所有缓冲池页面,操作将以方式进行。默认情况下,innodb_缓冲池块大小 是 128MB(134217728 字节)。块中包含的页面数取决于innodb_page_size 的值。innodb_缓冲池块大小 可以增加或减少,单位为 1MB(1048576 字节)。

    以下条件适用于更改innodb_缓冲池块大小 值:

    Important

    在更改innodb_buffer_pool_chunk_size时,需要注意,因为这将自动增加缓冲池的大小。在更改innodb_buffer_pool_chunk_size之前,计算其对innodb_buffer_pool_size的影响,以确保结果缓冲池大小是可接受的。

    为了避免潜在性能问题,chunks 的数量(innodb_buffer_pool_size / innodb_buffer_pool_chunk_size) shouldn't exceed 1000。

    变量innodb_buffer_pool_size是动态的,这允许在服务器在线时调整缓冲池大小。然而,缓冲池大小必须等于或是innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances的倍数,并且更改这两个变量设置需要重新启动服务器。

    请查看第17.8.3.1节,“配置InnoDB缓冲池大小”以获取更多信息。

  • innodb_buffer_池调试

    Command-Line Format --innodb-buffer-池调试[={OFF|ON}]
    System Variable innodb_buffer_池调试
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 布尔值
    Default Value OFF

    启用该选项允许在缓冲池大小小于1GB时创建多个缓冲池实例,忽略innodb_buffer_pool_instances的最小缓冲池大小限制。 innodb_buffer_池调试 选项仅在使用WITH_DEBUG CMake 选项编译时可用。

  • innodb_缓冲池dump_at_shutdown

    Command-Line Format --innodb-缓冲池dump_at_shutdown[={OFF|ON}]
    System Variable innodb_缓冲池dump_at_shutdown
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 布尔值
    Default Value ON

    指定在 MySQL 服务器关闭时记录 InnoDB 缓冲池中的页面,以缩短下一次启动的 暖启动 过程。通常与innodb_buffer_pool_load_at_startup 结合使用。innodb_buffer_pool_dump_pct 选项定义最近最多使用的缓冲池页面百分比。

    both innodb_buffer_pool_dump_at_shutdowninnodb_buffer_pool_load_at_startup 都默认启用。

    更多信息,请见第17.8.3.6节,“保存和恢复缓冲池状态”

  • innodb_buffer_pool_dump_now

    Command-Line Format --innodb-buffer-pool-dump-now[={OFF|ON}]
    System Variable innodb_buffer_pool_dump_now
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 布尔值
    Default Value OFF

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

    启用innodb_buffer_pool_dump_now将触发记录操作,但不会改变变量设置,该变量始终保持OFF0。要查看缓冲池dump状态后触发dump,请查询Innodb_buffer_pool_dump_status变量。

    启用innodb_buffer_pool_dump_now将触发dump操作,但不会改变变量设置,该变量始终保持OFF0。要查看缓冲池dump状态后触发dump,请查询Innodb_buffer_pool_dump_status变量。

    更多信息请见第17.8.3.6节,“保存和恢复缓冲池状态”

  • innodb_buffer_pool_dump_pct

    Command-Line Format --innodb-buffer-pool-dump-pct=#
    System Variable innodb_buffer_pool_dump_pct
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 25
    Minimum Value 1
    Maximum Value 100

    指定最近使用的页面百分比,以便读取和dump缓冲池。范围为1到100。默认值为25。例如,如果有4个缓冲池,每个缓冲池有100页,并且innodb_buffer_pool_dump_pct设置为25,则从每个缓冲池中dump最近使用的25页。

  • innodb_buffer_pool_filename

    Command-Line Format --innodb-buffer-pool-filename=file_name
    System Variable innodb_buffer_pool_filename
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 文件名
    Default Value ib_buffer_pool

    指定存储空间ID和页面ID的文件名称,该文件由innodb_buffer_pool_dump_at_shutdowninnodb_buffer_pool_dump_now生成。存储空间ID和页面ID以以下格式保存:space, page_id。默认情况下,文件名为ib_ buffer_pool,位于InnoDB数据目录中。非默认位置必须相对数据目录指定。

    可以在运行时使用SET语句指定文件名:

    SET GLOBAL innodb_buffer_pool_filename='file_name';

    您也可以在启动时指定文件名,在启动字符串或MySQL配置文件中。启动时指定文件名,文件必须存在或InnoDB返回启动错误,指出该文件或目录不存在。

    更多信息,请见第17.8.3.6节,“保存和恢复缓冲池状态”

  • innodb_buffer_pool_in_core_file

    Command-Line Format --innodb-buffer-pool-in-core-file[={OFF|ON}]
    System Variable innodb_buffer_pool_in_core_file
    Scope Global
    Dynamic Yes
    SET_VAR Hint Applies No
    Type 布尔值
    Default Value OFF

    禁用(默认)innodb_buffer_pool_in_core_file变量可以减少核心文件的大小,排除InnoDB缓冲池页面。

    要使用该变量,必须启用core_file变量,并且禁用该选项的操作系统必须支持MADV_DONTDUMP非 POSIX 扩展到madvise(),Linux 3.4 及更高版本支持。更多信息,请见第17.8.3.7节,“排除或包括缓冲池页面从核心文件”

    默认情况下在支持MADV_DONTDUMP的系统上禁用该选项,这通常只限于 Linux,而不是 macOS 或 Windows。

    在 MySQL 8.4 之前,该选项默认启用。

  • innodb_buffer_pool_instances

    Command-Line Format --innodb-buffer-pool-instances=#
    System Variable innodb_buffer_pool_instances
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value see description
    Minimum Value 1
    Maximum Value 64

    InnoDB 缓冲池被分割成的区域数。对于具有多个GB缓冲池的系统,分割缓冲池可以提高并发性,通过减少不同线程读取和写入到缓存页面的竞争。每个缓存页面都将被随机地分配给一个缓冲池实例中,使用哈希函数。每个缓冲池管理自己的免费列表、刷新列表LRUs和所有与缓冲池相关的数据结构,并且被保护着自己的缓冲池锁定。

    总的缓冲池大小将被分配给所有缓冲池。为了获得最佳效率,请指定innodb_buffer_pool_instancesinnodb_buffer_pool_size的组合,使每个缓冲池实例至少为1GB。

    如果innodb_buffer_pool_size≤ 1 GiB,则默认的innodb_buffer_pool_instances值为1。

    如果innodb_buffer_pool_size大于1 GiB,那么默认的innodb_buffer_pool_instances值是以下两个计算出的提示值中的最小值,范围为1-64:

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

  • innodb_buffer_pool_load_abort

    Command-Line Format --innodb-buffer-pool-load-abort[={OFF|ON}]
    System Variable innodb_buffer_pool_load_abort
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 布尔值
    Default Value OFF

    中断恢复InnoDB innodb_buffer_pool_load_at_startupinnodb_buffer_pool_load_now 触发的缓冲池内容恢复过程。

    启用innodb_buffer_pool_load_abort 将触发中断操作,但不会改变变量设置,这个变量始终保持在 OFF0。要查看缓冲池加载状态后触发的中断操作,请查询Innodb_buffer_pool_load_status 变量。

    更多信息请见第17.8.3.6节,“保存和恢复缓冲池状态”

  • innodb_buffer_pool_load_at_startup

    Command-Line Format --innodb-buffer-pool-load-at-startup[={OFF|ON}]
    System Variable innodb_buffer_pool_load_at_startup
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 布尔值
    Default Value ON

    在 MySQL 服务器启动时,指定将 InnoDB 缓冲池 自动预热,加载它在较早时间持有的相同页面。通常与innodb_buffer_pool_dump_at_shutdown结合使用。

    同时启用了innodb_buffer_pool_dump_at_shutdowninnodb_buffer_pool_load_at_startup

    更多信息,请见第17.8.3.6节,“保存和恢复缓冲池状态”

  • innodb_buffer_pool_load_now

    Command-Line Format --innodb-buffer-pool-load-now[={OFF|ON}]
    System Variable innodb_buffer_pool_load_now
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 布尔值
    Default Value OFF

    立即暖启动 InnoDB 缓冲池,加载数据页而不等待服务器重启。可以在性能测试或恢复 MySQL 服务器到正常工作负载时使用。

    启用innodb_buffer_pool_load_now触发加载操作,但不会改变变量设置,该变量始终保持OFF0。要查看缓冲池加载进度,请查询Innodb_buffer_pool_load_status变量。

    更多信息请见第17.8.3.6节,“保存和恢复缓冲池状态”

  • innodb_buffer_pool_size

    Command-Line Format --innodb-buffer-pool-size=#
    System Variable innodb_buffer_pool_size
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 134217728
    Minimum Value 5242880
    Maximum Value (64-bit platforms) 2**64-1
    Maximum Value (32-bit platforms) 2**32-1
    Unit 字节

    缓冲池的大小(以字节为单位),是缓冲池的内存区域,用于InnoDB缓存表和索引数据。默认值为134217728字节(128MB)。最大值取决于CPU架构;在32位系统中,最大值为4294967295(2^32-1),在64位系统中,最大值为18446744073709551615(2^64-1)。在32位系统中,CPU架构和操作系统可能会对实际最大大小施加限制。缓冲池的大小大于1GB时,设置innodb_buffer_pool_instances到一个值大于1可以提高忙碌服务器的可扩展性。

    更大的缓冲池需要更少的磁盘I/O来访问同一表数据多次。在专门的数据库服务器上,您可能将缓冲池大小设置为机器的物理内存大小的80%。在配置缓冲池大小时,请注意以下潜在问题,并准备缩小缓冲池大小如果必要。

    • 操作系统中的物理内存竞争可能会导致paging。

    • InnoDB保留了用于缓冲和控制结构的额外内存,因此实际分配空间大约是指定的缓冲池大小的10%以上。

    • 缓冲池的地址空间必须连续,这在Windows系统中可能会遇到问题,因为DLLs需要加载到特定的地址上。

    • 初始化缓冲池的时间大致与其大小成正比。在具有大缓冲池的实例中,初始化时间可能会很长。为了减少初始化期限,您可以在服务器关闭时保存缓冲池状态,并在服务器启动时恢复它。请参阅第17.8.3.6节,“保存和恢复缓冲池状态”

    当您增加或减少缓冲池大小时,操作将以块进行。块大小由innodb_buffer_pool_chunk_size变量定义,该变量的默认值为128 MB。

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

    innodb_buffer_pool_-size 可以动态设置,允许您在不重新启动服务器的情况下调整缓冲池的大小。状态变量Innodb_buffer_pool_resize_status 报告在线缓冲池resize操作的状态。请参阅第17.8.3.1节,“配置 InnoDB 缓冲池大小”获取更多信息。

    如果innodb_dedicated_server启用,innodb_buffer_pool_size值将自动配置,如果未明确定义。请参阅第17.8.12节,“启用专用的 MySQL 服务器自动配置”获取更多信息。

  • innodb_change_buffer_max_size

    Command-Line Format --innodb-change-buffer-max-size=#
    System Variable innodb_change_buffer_max_size
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 25
    Minimum Value 0
    Maximum Value 50

    InnoDB 变更缓冲区的最大大小,作为总buffer池大小的百分比。您可能会为具有大量插入、更新和删除活动的 MySQL 服务器增加这个值,或者为用于报告的 MySQL 服务器减少该值。更多信息,请见第17.5.2节,“变更缓冲区”。对于一般I/O优化建议,请见第10.5.8节,“Optimizing InnoDB Disk I/O”

  • innodb_change_buffering

    Command-Line Format --innodb-change-buffering=value
    System Variable innodb_change_buffering
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 枚举
    Default Value none
    Valid Values

    none

    inserts

    deletes

    changes

    purges

    all

    是否InnoDB执行更改缓冲,这是一个优化技术,它将延迟写操作到次要索引,以便在I/O操作可以顺序进行。允许的值在以下表格中描述。值也可以以数字形式指定。

    表17.24:InnoDB更改缓冲允许值

    Value Numeric Value Description
    none 0 默认值。不要缓冲任何操作。
    inserts 1 缓冲插入操作。
    deletes 2 缓冲删除标记操作;严格来说,是在purge操作中将索引记录标记为后续删除的写操作。
    changes 3 缓冲插入和删除标记操作。
    purges 4 缓冲背景中发生的物理删除操作。
    all 5 缓冲插入、删除标记操作和purge操作。

    在MySQL 8.4之前,默认值是all

    更多信息,请见第17.5.2节,“Change Buffer”。关于一般I/O调整建议,请见第10.5.8节,“Optimizing InnoDB Disk I/O”

  • innodb_change_buffering_debug

    Command-Line Format --innodb-change-buffering-debug=#
    System Variable innodb_change_buffering_debug
    Scope Global
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 0
    Minimum Value 0
    Maximum Value 2

    设置InnoDB更改缓冲的调试标志。值为1强制所有更改到更改缓冲中。值为2导致在合并时出现意外退出。默认值为0表示更改缓冲调试标志未设置。这项选项仅在使用WITH_DEBUGCMake选项编译debug支持时可用。

  • innodb_checkpoint_disabled

    Command-Line Format --innodb-checkpoint-disabled[={OFF|ON}]
    System Variable innodb_checkpoint_disabled
    Scope Global
    Dynamic
    SET_VAR Hint Applies
    Type 布尔值
    Default Value OFF

    这是一个专门用于高级调试的选项。它禁用检查点,以便在服务器退出时始终触发InnoDB恢复。应该只在短时间内启用该选项,通常是在运行写入redo日志条目的DML操作之前。这一选项仅在使用WITH_ DEBUGCMake选项编译debug支持时可用。

  • innodb_checksum_algorithm

    Command-Line Format --innodb-checksum-algorithm=value
    System Variable innodb_checksum_algorithm
    Scope Global
    Dynamic Yes
    SET_VAR Hint Applies No
    Type Enumeration
    Default Value crc32
    Valid Values

    crc32

    strict_crc32

    innodb

    strict_innodb

    none

    strict_none

    指定在 校验和 存储在 InnoDB 表空间 的磁盘块中生成和验证的方式。默认值为innodb_checksum_algorithmcrc32

    innodb 与早期 MySQL 版本兼容。值 crc32 使用一个速度更快的算法来计算每个修改块的校验和,并检查每个磁盘读取的校验和。它扫描块 64 位一次,而不是像 innodb 校验和算法那样扫描块 8 位一次。值 none 将常量值写入校验字段,而不是根据块数据计算值。表空间中的块可以混合使用老、新的和无校验值,随着数据的修改而逐渐更新;一旦表空间中的块被修改为使用 crc32 算法,那么关联的表不能被早期 MySQL 版本读取。

    严格的校验和算法在遇到表空间中有效但不匹配的校验值时报告错误。建议您只在新实例中使用严格设置,以便第一次设置表空间。严格设置相对较快,因为它们不需要在磁盘读取时计算所有校验值。

    以下表格显示了noneinnodbcrc32选项值之间的差异,以及它们的严格对应值。noneinnodbcrc32将指定类型的校验和值写入每个数据块,但在读取操作中验证块时,兼容其他校验和值。严格设置也接受有效的校验和值,但在遇到有效但不匹配的校验和值时打印错误消息。如果所有InnoDB数据文件在一个实例中创建,并且使用相同的innodb_checksum_algorithm值,可以使验证速度更快。

    表17.25:允许的innodb_checksum_algorithm值

    Value Generated checksum (when writing) Permitted checksums (when reading)
    none 常量数字。 noneinnodbcrc32生成的任何校验和值。
    innodb 使用原始算法从InnoDB中计算的软件校验和。 noneinnodbcrc32生成的任何校验和值。
    crc32 使用crc32算法计算的可能硬件辅助校验和。 noneinnodbcrc32生成的任何校验和值。
    strict_none 常量数字 使用noneinnodbcrc32生成的任何校验和。InnoDB如果遇到有效但不匹配的校验和,会打印错误信息。
    strict_innodb 使用原始算法从InnoDB中计算的软件校验和。 使用noneinnodbcrc32生成的任何校验和。InnoDB如果遇到有效但不匹配的校验和,会打印错误信息。
    strict_crc32 使用crc32算法计算的校验和,可能使用硬件辅助。 使用noneinnodbcrc32生成的任何校验和。InnoDB如果遇到有效但不匹配的校验和,会打印错误信息。

  • innodb_cmp_per_index_enabled

    Command-Line Format --innodb-cmp-per-index-enabled[={OFF|ON}]
    System Variable innodb_cmp_per_index_enabled
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 布尔值
    Default Value OFF

    启用信息_schema中的INNODB_ CMP_PER_INDEX表中的每个索引压缩相关统计信息。由于这些统计信息可能会很耗时,仅在开发、测试或副本实例中启用该选项,以便在InnoDB压缩表的性能调整过程中进行。

    更多信息,请见第28.4.8节,“The INFORMATION_SCHEMA INNODB_CMP_PER_INDEX and INNODB_CMP_PER_INDEX_RESET Tables”第17.9.1.4节,“Monitoring InnoDB Table Compression at Runtime”

  • innodb_commit_concurrency

    Command-Line Format --innodb-commit-concurrency=#
    System Variable innodb_commit_concurrency
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 0
    Minimum Value 0
    Maximum Value 1000

    可以同时提交的线程数量。默认值为0,允许任意数量的事务同时提交。

    innodb_commit_concurrency的值不能在运行时从0更改为非零或反之。可以将该值从一个非零值更改为另一个非零值。

  • innodb_compress_debug

    Command-Line Format --innodb-compress-debug=value
    System Variable innodb_compress_debug
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 枚举
    Default Value none
    Valid Values

    none

    zlib

    lz4

    lz4hc

    使用指定的压缩算法对所有表进行压缩,不需要为每个表定义COMPRESSION属性。这选项仅在使用WITH_DEBUGCMake选项编译debug支持时可用。

    相关信息,请见第17.9.2节,“InnoDB Page Compression”

  • innodb_compression_failure_threshold_pct

    Command-Line Format --innodb-compression-failure-threshold-pct=#
    System Variable innodb_compression_failure_threshold_pct
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 5
    Minimum Value 0
    Maximum Value 100

    定义了表的压缩失败率阈值,作为百分比,当MySQL开始在压缩页面中添加填充以避免昂贵的压缩失败。当达到这个阈值时,MySQL开始在每个新的压缩页面中留下动态调整的额外空闲空间,以至于指定的页面大小百分比由innodb_ compression_pad_pct_max控制。值为零将禁用监控压缩效率和动态调整填充量的机制。

    更多信息,请见第17.9.1.6节,“Compression for OLTP Workloads”

  • innodb_ compression_level

    Command-Line Format --innodb-compression-level=#
    System Variable innodb_ compression_level
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 6
    Minimum Value 0
    Maximum Value 9

    指定用于InnoDB压缩表和索引的 zlib 压缩级别。更高的值可以将更多数据存储在存储设备上,但是在压缩过程中需要更多 CPU 资源。较低的值可以减少 CPU 资源使用,当存储空间不是关键因素或您期望数据不太可压缩时。

    详见第17.9.1.6节,“OLTP 工作负载中的压缩”

  • innodb_compression_pad_pct_max

    Command-Line Format --innodb-compression-pad-pct-max=#
    System Variable innodb_compression_pad_pct_max
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 50
    Minimum Value 0
    Maximum Value 75

    指定每个压缩页面中可以保留的最大百分比空闲空间,以便在更新压缩表或索引时,重新组织数据和修改日志。只适用于当innodb_compression_failure_threshold_pct设置为非零值,并且压缩失败率超过阈值时。

    更多信息,请见第17.9.1.6节,“OLTP工作负载中的压缩”

  • innodb_concurrency_tickets

    Command-Line Format --innodb-concurrency-tickets=#
    System Variable innodb_concurrency_tickets
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 5000
    Minimum Value 1
    Maximum Value 4294967295

    确定可以同时进入InnoDB线程数量。线程如果已经达到并发限制,会被放入队列中。当线程被允许进入InnoDB时,它将获得等于innodb_concurrency_tickets的“”票据”,并可以自由地进入和离开InnoDB,直到使用完票据。然后,该线程将再次受到并发检查(可能会被队列中)下一次尝试进入InnoDB时。默认值为5000。

    小的innodb_concurrency_tickets值使得只有少数行需要处理的小事务和处理许多行的大事务竞争公平。小的innodb_concurrency_tickets值的缺点是大事务需要循环队列多次才能完成,这延长了完成任务所需的时间。

    innodb_concurrency_tickets值很大时,大型事务花费的时间更少,等待在队列末尾的位置(由innodb_thread_concurrency控制),并且花费更多时间检索行。同时,大型事务也需要更少的队列循环来完成任务。但是,innodb_concurrency_tickets值太大的缺点是,当多个大型事务同时运行时,可以使较小的事务等待更长时间执行。

    innodb_thread_concurrency值不为零时,您可能需要调整innodb_concurrency_tickets值来找到较大和较小事务之间的最佳平衡。SHOW ENGINE INNODB STATUS报告显示了当前事务在队列中的剩余票数。这一数据也可以从信息_schemaINNODB_TRX表的TRX_CONCURRENCY_TICKETS列中获得。

    更多信息,请见第17.8.4节,“InnoDB线程并发配置”

  • innodb_数据_文件_路径

    Command-Line Format --innodb-数据-文件-路径=file_name
    System Variable innodb_数据_文件_路径
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 字符串
    Default Value ibdata1:12M:autoextend

    定义了 InnoDB 系统表空间数据文件的名称、大小和属性。如果未指定innodb_数据_文件_路径 的值,缺省行为是创建一个自动扩展的数据文件,大小略大于 12MB,名称为 ibdata1

    数据文件指定语法包括文件名、文件大小、autoextend 属性和 max 属性:

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

    文件大小以千字节、兆字节或吉字节为单位,通过在大小值后添加 KMG 来指定。如果指定数据文件大小,以千字节为单位,请使用1024的倍数。否则,KB 值将被舍入到最近的兆字节(MB)边界。文件大小之和必须至少略大于 12MB。

    为了获取更多配置信息,请查看System Tablespace Data File Configuration。对于调整大小的指南,请查看Resizing the System Tablespace.

  • innodb_data_home_dir

    Command-Line Format --innodb-data-home-dir=dir_name
    System Variable innodb_data_home_dir
    Scope Global
    Dynamic No
    SET_VAR Hint Applies No
    Type 目录名称

    InnoDB 系统表空间数据文件的公共目录路径部分。默认值是 MySQL 的 data 目录。设置将与innodb_data_file_path 设置concatenate,除非该设置使用绝对路径。

    指定 innodb_data_home_dir 值时需要添加尾部斜杠。例如:

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

    这个设置不影响file-per-table 表空间的位置。

    相关信息,请参见第17.8.1节,“InnoDB启动配置”

  • innodb_ddl_buffer_size

    Command-Line Format --innodb-ddl-buffer-size=#
    System Variable innodb_ddl_buffer_size
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 1048576
    Minimum Value 65536
    Maximum Value 4294967295
    Unit 字节

    定义DDL操作的最大缓冲区大小。默认设置为1048576字节(约1MB)。适用于在线DDL操作,创建或重建次要索引。请参见第17.12.4节,“在线DDL内存管理”。每个DDL线程的最大缓冲区大小是最大缓冲区大小除以DDL线程数(innodb_ddl_buffer_size/innodb_ddl_threads)。

  • innodb_ddl_log_crash_reset_debug

    Command-Line Format --innodb-ddl-log-crash-reset-debug[={OFF|ON}]
    System Variable innodb_ddl_log_crash_reset_debug
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 布尔值
    Default Value OFF

    启用调试选项以重置 DDL 日志崩溃注入计数器到 1。该选项仅在使用 WITH_ DEBUG CMake 选项编译 debugging 支持时可用。

  • innodb_ddl_threads

    Command-Line Format --innodb-ddl-threads=#
    System Variable innodb_ddl_threads
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 4
    Minimum Value 1
    Maximum Value 64

    定义索引创建过程中的并行线程的最大数量。适用于在线 DDL 操作,创建或重建次要索引。有关相关信息,请参阅第 17.12.5 节,“Configuring Parallel Threads for Online DDL Operations”第 17.12.4 节,“Online DDL Memory Management”

  • innodb_deadlock_detect

    Command-Line Format --innodb-deadlock-detect[={OFF|ON}]
    System Variable innodb_deadlock_detect
    Scope Global
    Dynamic
    SET_VAR Hint Applies
    Type 布尔值
    Default Value ON

    该选项用于禁用死锁检测。在高并发系统中,死锁检测可能会导致线程等待锁定的 slowdown。有时,它可能更有效地禁用死锁检测,并依靠innodb_lock_wait_timeout设置来 rollback事务当出现死锁时。

    有关相关信息,请参见第17.7.5.2节,“Deadlock Detection”

  • innodb_dedicated_server

    Command-Line Format --innodb-dedicated-server[={OFF|ON}]
    System Variable innodb_dedicated_server
    Scope Global
    Dynamic
    SET_VAR Hint Applies
    Type 布尔值
    Default Value OFF

    innodb_dedicated_server启用时,InnoDB将自动配置以下变量:

    只有在 MySQL 实例驻留在专用服务器上,可以使用所有可用的系统资源时,才考虑启用innodb_dedicated_server。启用innodb_dedicated_server不建议在 MySQL 实例与其他应用程序共享系统资源时。

    更多信息,请参阅第17.8.12节,“Enabling Automatic Configuration for a Dedicated MySQL Server”

  • innodb_default_row_format

    Command-Line Format --innodb-default-row-format=value
    System Variable
    Scope Global
    Dynamic Yes
    SET_VAR Hint Applies No
    Type Enumeration
    Default Value DYNAMIC
    Valid Values

    REDUNDANT

    COMPACT

    DYNAMIC

    innodb_default_row_format 选项定义了 InnoDB 表和用户创建的临时表的默认行格式。默认设置为 DYNAMIC。其他允许的值为 COMPACTREDUNDANTCOMPRESSED 行格式不能定义为默认格式,系统表空间 中不支持使用该格式。

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

    当没有明确指定ROW_FORMAT选项或使用ROW__FORMAT=DEFAULT时,任何重建表的操作都将静默地更改表的行格式为由innodb_default_row_format定义的格式。更多信息,请见表的行格式定义

    服务器创建用于处理查询的内部InnoDB临时表,始终使用DYNAMIC行格式,无论innodb_default_row_format设置是什么。

  • innodb_directories

    Command-Line Format --innodb_directories=dir_name
    System Variable innodb_directories
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 目录名称
    Default Value NULL

    在启动时扫描的目录列表,用于移动或恢复表空间文件到新位置,而服务器处于离线状态。此外,也用于指定使用绝对路径或位于数据目录外的表空间文件所在目录。

    崩溃恢复期间表空间发现依赖于innodb_directories设置来识别redo日志中引用的表空间。更多信息,请见崩溃恢复期间表空间发现

    默认值为NULL,但由innodb_data_home_dirinnodb_undo_directorydatadir定义的目录总是被追加到innodb_directories参数值中,当InnoDB在启动时构建要扫描的目录列表时。这些目录无论是否指定了innodb_directories设置,都将被追加。

    innodb_directories可以在启动命令或MySQL选项文件中指定。因为否则一些命令解释器将认为分号(;)是一个特殊字符,故需要使用引号来 surround参数值(例如,Unix shells将其视为命令终止符)。

    启动命令:

    mysqld --innodb-directories="directory_path_1;directory_path_2"

    MySQL选项文件:

    [mysqld]
    innodb_directories="directory_path_1;directory_path_2"

    不能使用通配表达式指定目录。

    innodb_directories 扫描也会遍历指定目录的子目录。重复的目录和子目录将从要扫描的目录列表中被 discard。

    更多信息,请见第17.6.3.6节,“在服务器离线时移动表空间文件”

  • innodb_disable_sort_file_cache

    Command-Line Format --innodb-disable-sort-file-cache[={OFF|ON}]
    System Variable innodb_disable_sort_file_cache
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 布尔值
    Default Value OFF

    禁用操作系统文件系统缓存对 merge-sort 临时文件的使用。效果是打开这些文件时使用等效的O_DIRECT

  • innodb_doublewrite

    Command-Line Format --innodb-doublewrite=value
    System Variable innodb_doublewrite
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 枚举值
    Default Value ON
    Valid Values

    ON

    OFF

    DETECT_AND_RECOVER

    DETECT_ONLY

    innodb_doublewrite 变量控制双写缓冲。默认情况下,双写缓冲通常处于启用状态。

    您可以在启动服务器时将 innodb_doublewrite 设置为ONOFF以启用或禁用双写缓冲,分别。DETECT_AND_RECOVER 等同于 ON。在这种设置下,除了数据库页面内容被写入到双写缓冲区外,它还可以在恢复时访问该缓冲区以修复不完整的页面写入。在DETECT_ONLY中,只有元数据被写入到双写缓冲区,而不是数据库页面内容。恢复也不使用双写缓冲区来修复不完整的页面写入。这是一个轻量级设置,旨在仅检测不完整的页面写入。

    MySQL 支持对 innodb_doublewrite 设置的动态更改,使得双写缓冲区在ONDETECT_AND_RECOVERDETECT_ONLY之间切换。MySQL 不支持将启用双写缓冲区的设置更改为OFF或反之。

    如果双写缓冲区位于 Fusion-io 设备上,该设备支持原子写入,双写缓冲区将自动禁用,并使用 Fusion-io 原子写入来执行数据文件写入操作。然而,请注意 innodb_doublewrite 设置是全局的。当双写缓冲区禁用时,它将对所有数据文件进行禁用,包括不在 Fusion-io 硬件上的文件。这一特性仅支持 Fusion-io 硬件,并且仅在 Linux 上的 Fusion-io NVMFS 中启用。为了充分利用该特性,建议设置 innodb_flush_methodO_DIRECT

    有关相关信息,请参见第17.6.4节,“Doublewrite Buffer”

  • innodb_doublewrite_batch_size

    Command-Line Format --innodb-doublewrite-batch-size=#
    System Variable innodb_doublewrite_batch_size
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 0
    Minimum Value 0
    Maximum Value 256

    定义批量写入双写页的数量。

    更多信息,请参见第17.6.4节,“Doublewrite Buffer”

  • innodb_doublewrite_dir

    Command-Line Format --innodb-doublewrite-dir=dir_name
    System Variable innodb_doublewrite_dir
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 目录名称

    定义双写文件的目录。如果未指定目录,双写文件将在innodb_data_home_dir目录下创建,该目录默认为数据目录如果未指定。

    更多信息,请参见第17.6.4节,“Doublewrite Buffer”

  • innodb_doublewrite_files

    Command-Line Format --innodb-doublewrite-files=#
    System Variable innodb_doublewrite_files
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 2
    Minimum Value 1
    Maximum Value 256

    定义了双写文件的数量。默认情况下,每个缓冲池实例创建两个双写文件。

    最少有两个双写文件。最大双写文件数是缓冲池实例的两倍。(缓冲池实例的数量由innodb_ buffer_pool_instances变量控制。)

    更多信息,请见第17.6.4节,“Doublewrite Buffer”

  • innodb_doublewrite_pages

    Command-Line Format --innodb-doublewrite-pages=#
    System Variable innodb_doublewrite_pages
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 128
    Minimum Value 1
    Maximum Value 512

    定义了每个线程的批量写入双写页面的最大数量。如果未指定值,innodb_doublewrite_pages将默认为128。

    在MySQL 8.4之前,默认值是innodb_write_io_threads的值,该值默认为4。

    更多信息,请见第17.6.4节,“Doublewrite Buffer”.

  • innodb_extend_and_initialize

    Command-Line Format --innodb=extend-and-initialize[={OFF|ON}]
    System Variable innodb_extend_and_initialize
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 布尔值
    Default Value ON

    控制Linux系统上文件表空间和一般表空间的空间分配。

    启用时,InnoDB将写入新分配页面中的NULL值。禁用时,使用posix_fallocate()调用来分配空间,这些调用预留空间而不实际写入NULL值。

    更多信息,请见第17.6.3.8节,“Linux上表空间空间分配优化”.

  • innodb_fast_shutdown

    Command-Line Format --innodb-fast-shutdown=#
    System Variable innodb_fast_shutdown
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 1
    Valid Values

    0

    1

    2

    InnoDB 关机模式。值为 0 时,InnoDB 会进行慢关机,完整地清理和合并缓冲区,然后关机。如果值为 1(默认),InnoDB 将在关机时跳过这些操作,这被称为快速关机。如果值为 2,InnoDB 将将日志刷新并关机,如 MySQL 崩溃一样;没有丢失已提交事务,但崩溃恢复操作会使下一个启动时间更长。

    慢关机可能需要分钟或小时,以处理大量缓冲数据。在升级或降级 MySQL 主要版本前,使用慢关机技术,以确保所有数据文件都准备好了,以便升级过程更新文件格式。

    在紧急情况下,如数据 corruption risk 高时,可以使用innodb_fast_shutdown=2,以获取最快的关机方式。

  • innodb_fil_make_page_dirty_debug

    Command-Line Format --innodb-fil-make-page-dirty-debug=#
    System Variable innodb_fil_make_page_dirty_debug
    Scope Global
    Dynamic Yes
    SET_VAR Hint Applies No
    Type Integer
    Default Value 0
    Minimum Value 0
    Maximum Value 2**32-1

    默认情况下,设置innodb_fil_make_page_dirty_debug将立即使表空间的第一页脏。 如果innodb_saved_page_number_debug设置为非默认值,设置innodb_fil_make_page_dirty_debug将使指定的页面脏。 innodb_fil_make_page_dirty_debug选项仅在使用WITH_DEBUGCMake选项编译debug支持时可用。

  • innodb_file_per_table

    Command-Line Format --innodb-文件-每-表[={OFF|ON}]
    System Variable innodb_文件-每-表
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 布尔值
    Default Value ON

    innodb_文件-每-表启用时,表默认创建在文件-每-表空间中。当禁用时,表默认创建在系统表空间中。关于文件-每-表空间的信息,请见第17.6.3.2节,“文件-每-表空间”。关于InnoDB系统表空间的信息,请见第17.6.3.1节,“系统表空间”

    变量innodb_文件-每-表可以在运行时使用SET GLOBAL语句配置指定在命令行启动或选项文件中指定。运行时配置需要具有足够的权限来设置全局系统变量(见第7.1.9.1节,“系统变量权限”),并且立即影响所有连接的操作。

    当一个文件表空间中的表被截断或删除时,释放的空间将返回给操作系统。截断或删除一个位于系统表空间中的表只会释放系统表空间中的空间。系统表空间中的释放空间可以用于InnoDB数据,但不会返回给操作系统,因为系统表空间的数据文件从不缩小。

    innodb_file_per-table设置不影响临时表的创建;临时表是在会话临时表空间中创建的。请参阅第17.6.3.5节,“Temporary Tablespaces”

  • innodb_fill_factor

    Command-Line Format --innodb-fill-factor=#
    System Variable innodb_fill_factor
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 100
    Minimum Value 10
    Maximum Value 100

    InnoDB在创建或重建索引时执行 bulk load,这种索引创建方法称为““sorted index build””。

    innodb_fill_factor 定义了每个 B 树页面中用于排序索引构建的空间百分比,剩余空间保留用于未来索引增长。例如,将 innodb_fill_factor 设置为 80 保留每个 B 树页面的 20% 空间用于未来索引增长。实际百分比可能会有所不同。innodb_fill_factor 设置被解释为提示而不是硬限制。

    innodb_fill_factor 设置为 100 将留下聚簇索引页面的 1/16 空间用于未来索引增长。

    innodb_fill_factor 适用于 B 树叶子和非叶子页面。它不适用于外部页面,用于 TEXTBLOB 项。

    更多信息,请见 第 17.6.2.3 节,“排序索引构建”

  • innodb_flush_log_at_timeout

    Command-Line Format --innodb-flush-log-at-timeout=#
    System Variable innodb_flush_log_at_timeout
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 1
    Minimum Value 1
    Maximum Value 2700
    Unit

    每隔N秒写入和刷新日志。innodb_flush_log_at_timeout允许将flush的超时期限增加,以减少flush操作并避免影响二进制日志组提交性能。innodb_flush_log_at_timeout的默认设置是每秒一次。

  • innodb_flush_log_at_trx_commit

    Command-Line Format --innodb-flush-log-at-trx-commit=#
    System Variable innodb_flush_log_at_trx_commit
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 枚举
    Default Value 1
    Valid Values

    0

    1

    2

    控制事务提交操作之间的严格ACID一致性和更高性能之间的平衡。您可以通过改变默认值来获得更好的性能,但这可能会在崩溃时丢失事务。

    • 默认设置为1是为了满足完整的ACID一致性。每个事务提交操作都会将日志写入并刷新到磁盘。

    • 当设置为0时,日志会在每秒写入一次,并且在每秒刷新一次到磁盘。在崩溃时,尚未刷新的事务可能会丢失。

    • 当设置为2时,事务提交操作后将立即写入日志,并且每秒刷新一次到磁盘。在崩溃时,尚未刷新的事务可能会丢失。

    • 对于设置0和2,单次刷新在100%保证不了。刷新可能会由于DDL更改和其他内部InnoDB活动导致独立于innodb_flush_log_at_trx_commit设置而发生,或者由于调度问题而更少地发生。如果日志每秒刷新一次,在崩溃时最多可以丢失一秒的事务。如果日志刷新的频率高于或低于每秒,则丢失事务的数量将相应变化。

    • 日志刷新频率由innodb_flush_log_at_timeout控制,可以将日志刷新频率设置为N秒(其中N1 ... 2700,默认值为1)。然而,任何未预期的mysqld进程退出可能会擦除最多N秒的事务。

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

    • InnoDB 崩溃恢复无论innodb_flush_log_at_trx_commit设置如何。事务将完全应用或完全擦除。

    在使用事务的复制设置中,为了确保持久性和一致性:

    关于复制服务器在意外中断时最具韧性的设置组合,请参阅第19.4.2节,“处理复制服务器的意外中断”

    Caution

    许多操作系统和一些磁盘硬件会欺骗flush-到磁盘操作。它们可能会告诉mysqld flush已经完成,即使实际上没有。在这种情况下,事务的可靠性甚至不能保证,在最坏的情况下,电源故障可能会损害InnoDB数据。使用SCSI磁盘控制器或磁盘本身的电池缓存可以加速文件flush操作,并使其更加安全。你也可以尝试禁用硬件缓存中的磁盘写入缓存。

  • innodb_flush_method

    Command-Line Format --innodb-flush-method=value
    System Variable innodb_flush_method
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 字符串
    Default Value (Unix) O_DIRECT如果支持,否则fsync
    Default Value (Windows) unbuffered
    Valid Values (Unix)

    fsync

    O_DSYNC

    littlesync

    nosync

    O_DIRECT

    O_DIRECT_NO_FSYNC

    Valid Values (Windows)

    unbuffered

    normal

    定义了在 Innodb 数据文件和日志文件中刷新数据的方法,可以影响 I/O 通过率。

    在 Unix-类系统上,缺省值是 O_DIRECT 如果支持否则默认为 fsync。在 Windows 上,缺省值是 unbuffered

    Unix-类系统上的 Innodb 刷新方法选项包括:

    • fsync0: InnoDB 使用系统调用fsync()将数据文件和日志文件刷新。

    • O_DSYNC1: InnoDB 使用O_SYNC打开和刷新日志文件,并使用fsync()刷新数据文件。InnoDB 不直接使用O_DSYNC,因为在许多 Unix 变体上出现了问题。

    • littlesync2: 这个选项用于内部性能测试,当前不受支持。请自行风险使用。

    • nosync3: 这个选项用于内部性能测试,当前不受支持。请自行风险使用。

    • O_DIRECT4: InnoDB 使用O_DIRECT(或 Solaris 上的directio())打开数据文件,并使用fsync()刷新数据和日志文件。这选项在一些 GNU/Linux 版本、FreeBSD 和 Solaris 上可用。

    • O_DIRECT_NO_FSYNC: InnoDB 在flush I/O 过程中使用O_DIRECT,但在每个写操作后跳过fsync()系统调用。

      MySQL 在创建新文件、增加文件大小和关闭文件时调用fsync(),以确保文件系统元数据更改同步。仍然跳过每个写操作后的fsync()系统调用。

      在不同存储设备上存储redo日志文件和数据文件可能会导致数据丢失,如果在设备缓存中没有电池备份,突然退出前数据文件写入未被刷新。如果您使用或计划使用不同的存储设备来存储redo日志文件和数据文件,并且您的数据文件位于一个不带电池的缓存设备上,请使用O_DIRECT

    在支持fdatasync()系统调用平台上,innodb_use_fdatasync变量允许使用fsync()innodb_flush_method选项来使用fdatasync()。一个fdatasync()系统调用除非必要,否则不会将更改写入文件元数据,从而提供潜在的性能优势。

    Windows系统上的innodb_flush_method选项包括:

    • unbuffered0InnoDB使用非缓冲I/O。

      Note

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

    • normal1InnoDB使用缓冲I/O。

    每个设置对性能的影响取决于硬件配置和工作负载。为确定哪个设置使用或是否保持默认设置,请对您的特定配置进行基准测试。查看Innodb_data_fsyncs状态变量,以了解每个设置的总fsync()(或fdatasync()如果innodb_use_fdatasync启用)调用次数。您的工作负载中读写操作的混合可以影响设置的性能。例如,在具有硬件RAID控制器和电池备份写缓存的系统上,O_DIRECT可以帮助避免InnoDB缓冲池和操作系统文件系统缓存之间的双缓冲。在某些系统中,如果InnoDB数据和日志文件位于SAN上,缺省值或O_DSYNC可能对读密集型工作负载(主要由SELECT语句组成)更快。总是使用反映生产环境的硬件和工作负载来测试这个参数。对于一般I/O优化建议,请见第10.5.8节,“Optimizing InnoDB Disk I/O”

  • innodb_flush_neighbors

    Command-Line Format --innodb-flush-neighbors=#
    System Variable innodb_flush_neighbors
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 枚举
    Default Value 0
    Valid Values

    0

    1

    2

    指定是否在将刷新 InnoDB 缓冲池中的一页时,也将同一个extent中的其他脏页刷新。

    • 设置为 0 禁用innodb_flush_neighbors。同一个extent中的脏页不被刷新。

    • 设置为 1 则刷新同一个extent中的连续脏页。

    • 设置为 2 则刷新同一个extent中的脏页。

    在传统的HDD存储设备上存储表数据时,flush这些邻近页面在一个操作中可以减少I/O开销(主要是磁盘寻道操作),相比于在不同的时间flush单个页面。对于存储在SSD上的表数据,寻道时间不是一个重要因素,可以将这个选项设置为0以spread out写操作。有关相关信息,请见第17.8.3.5节,“配置缓冲池flushing”

  • innodb_flush_sync

    Command-Line Format --innodb-flush-sync[={OFF|ON}]
    System Variable innodb_flush_sync
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 布尔值
    Default Value ON

    默认情况下启用的innodb_flush_sync变量会在检查点期间忽略innodb_io_capacityinnodb_io_capacity_max设置,以便在I/O活动的高峰期保持一定的I/O速率。要遵守由innodb_io_capacityinnodb_io_capacity_max定义的I/O速率,禁用innodb_flush_sync.

    关于配置innodb_flush_sync变量的信息,请参见第17.8.7节,“配置InnoDB I/O容量”.

  • innodb_flushing_avg_loops

    Command-Line Format --innodb-flushing-avg-loops=#
    System Variable innodb_flushing_avg_loops
    Scope Global
    Dynamic Yes
    SET_VAR Hint Applies No
    Type Integer
    Default Value 30
    Minimum Value 1
    Maximum Value 1000

    InnoDB 对flushing状态的快照保留迭代次数,控制自适应刷新工作负载的响应速度。增加该值使flush操作的速率变化平滑地随着工作负载的变化,而减少该值使自适应刷新快速地调整工作负载变化,可以导致突然增加和减少工作负载时的刷新活动峰值。

    相关信息,请参见第17.8.3.5节,“缓冲池刷新配置”

  • innodb_force_load_corrupted

    Command-Line Format --innodb-force-load-corrupted[={OFF|ON}]
    System Variable innodb_force_load_corrupted
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 布尔值
    Default Value OFF

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

  • innodb_分插

    Command-Line Format --innodb-分插=#
    System Variable innodb_分插
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 0
    Minimum Value 0
    Maximum Value 6

    崩溃恢复模式,通常只在严重的故障排除情况下更改。可能的值从0到6。关于innodb_分插的含义和重要信息,请参见

     17.20.3,"Forcing InnoDB Recovery"
    .

    Warning

    只有在紧急情况下将该变量设置为大于 0 的值,以便可以启动InnoDB并dump表格。出于安全考虑,InnoDBinnodb_force_recovery大于 0 时禁止INSERTUPDATEDELETE操作。设置innodb_force_recovery为 4 或更大将InnoDB置于只读模式。

    这些限制可能会导致复制管理命令失败,因为复制存储副本状态日志在InnoDB表中。

  • innodb_fsync_threshold

    Command-Line Format --innodb-fsync-threshold=#
    System Variable innodb_fsync_threshold
    Scope Global
    Dynamic Yes
    SET_VAR Hint Applies No
    Type Integer
    Default Value 0
    Minimum Value 0
    Maximum Value 2**64-1

    默认情况下,当InnoDB创建一个新的数据文件,例如新日志文件或表空间文件时,该文件将完全写入操作系统缓存,然后才被刷新到磁盘,这可能会导致一次大量的磁盘写活动。为了强制小型、定期地刷新操作系统缓存中的数据,可以使用innodb_ fsync_threshold变量来定义一个字节阈值。当达到字节阈值时,操作系统缓存中的内容将被刷新到磁盘。默认值为0,强制使用默认行为,即在文件完全写入缓存后才刷新数据到磁盘。

    指定一个阈值以强制小型、定期的刷新可能对多个MySQL实例共享同一存储设备的情况非常有益处。例如,创建一个新的MySQL实例及其关联的数据文件可能会导致大量的磁盘写活动,影响其他使用相同存储设备的MySQL实例的性能。配置阈值可以避免这种写活动的峰值。

  • innodb_ft_aux_table

    System Variable innodb_ft_aux_table
    Scope Global
    Dynamic Yes
    SET_VAR Hint Applies No
    Type String

    指定了一个InnoDB表的完全限定名,该表包含一个FULLTEXT索引。这变量旨在诊断用途且只能在运行时设置。例如:

    SET GLOBAL innodb_ft_aux_table = 'test/t1';

    设置该变量到格式为db_名/table_名的名称后,INFORMATION_SCHEMA表中的INNODB_FT_INDEX_TABLEINNODB_FT_INDEX_CACHEINNODB_FT_CONFIGINNODB_FT_DELETEDINNODB_FT_BEING_DELETED将显示指定表的搜索索引信息。

    更多信息,请见第17.15.4节,“InnoDB INFORMATION_SCHEMA FULLTEXT Index Tables”

  • innodb_ft_cache_size

    Command-Line Format --innodb-ft-cache-size=#
    System Variable innodb_ft_cache_size
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 8000000
    Minimum Value 1600000
    Maximum Value 80000000
    Unit 字节

    为 InnoDB FULLTEXT 搜索索引缓存分配的内存大小,单位为字节。该缓存用于在创建 InnoDB FULLTEXT 索引时将文档解析到内存中。索引插入和更新操作直到达到innodb_ft_cache_size大小限制才被写入磁盘。innodb_ft_cache_size可以在表级别设置缓存大小。要为所有表设置全局限制,请查看innodb_ft_total_cache_size

    更多信息请见InnoDB Full-Text Index Cache

  • innodb_ft_enable_diag_print

    Command-Line Format --innodb-ft-enable-diag-print[={OFF|ON}]
    System Variable innodb_ft_enable_diag_print
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 布尔值
    Default Value OFF

    是否启用额外的全文搜索(FTS)诊断输出。这选项主要是为高级 FTS 调试而设计,通常对大多数用户不感兴趣。输出将被打印到错误日志中,并包括以下信息等:

    • FTS 索引同步进度(当 FTS 缓存限制达到时)。例如:

      FTS SYNC for table test, deleted count: 100 size: 10000 bytes
      SYNC words: 100
    • FTS 优化进度。例如:

      FTS start optimize test
      FTS_OPTIMIZE: optimize "mysql"
      FTS_OPTIMIZE: processed "mysql"
    • FTS 索引构建进度。例如:

      Number of doc processed: 1000
    • 对于 FTS 查询,查询解析树、词语权重、查询处理时间和内存使用将被打印。例如:

      FTS Search Processing time: 1 secs: 100 millisec: row(s) 10000
      Full Search Memory: 245666 (bytes),  Row: 10000
  • innodb_ft_enable_stopword

    Command-Line Format --innodb-ft-enable-stopword[={OFF|ON}]
    System Variable innodb_ft_enable_stopword
    Scope Global, Session
    Dynamic Yes
    SET_VAR Hint Applies No
    Type Boolean
    Default Value ON

    指定在创建时将一组停用词与 InnoDB FULLTEXT 索引相关联。如果设置了innodb_ft_user_stopword_table选项,则停用词来自该表。否则,如果设置了innodb_ft_server_stopword_table选项,则停用词来自该表。否则,将使用默认的停用词集。

    更多信息,请见第14.9.4节,“全文停止词”.

  • innodb_ft_max_token_size

    Command-Line Format --innodb-ft-max-token-size=#
    System Variable innodb_ft_max_token_size
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 84
    Minimum Value 10
    Maximum Value 84

    InnoDB全文索引中存储单词的最大字符长度。设置此值的限制可以减少索引大小,从而加速查询,通过省略长关键字或任意集合的字母序列,这些字母序列不是实际单词也 unlikely 是搜索术语。

    更多信息,请见第14.9.6节,“MySQL全文搜索的 fine-tuning”.

  • innodb_ft_min_token_size

    Command-Line Format --innodb-ft-min-token-size=#
    System Variable innodb_ft_min_token_size
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 3
    Minimum Value 0
    Maximum Value 16

    InnoDB 全文索引中存储单词的最小长度。增加该值可以减少索引大小,从而加速查询,通过省略不太可能在搜索上下文中的常见单词,如英语单词“a”和“to”。对于使用CJK(中文、日语、韩语)字符集的内容,请指定值为1。

    更多信息请参阅第14.9.6节,“MySQL全文搜索 fine-tuning”

  • innodb_ft_num_word_optimize

    Command-Line Format --innodb-ft-num-word-optimize=#
    System Variable innodb_ft_num_word_optimize
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 2000
    Minimum Value 1000
    Maximum Value 10000

    每次对InnoDB FULLTEXT索引执行OPTIMIZE TABLE操作时要处理的单词数量。由于对包含全文搜索索引的表进行批量插入或更新操作可能需要大量索引维护以 incorporate所有更改,您可能会执行一系列OPTIMIZE TABLE语句,每个语句从上一个语句的结尾继续。

    更多信息,请见第14.9.6节,“MySQL全文搜索的 fine-tuning”

  • innodb_ft_result_cache_limit

    Command-Line Format --innodb-ft-result-cache-limit=#
    System Variable innodb_ft_result_cache_limit
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 2000000000
    Minimum Value 1000000
    Maximum Value 2**32-1
    Unit 字节

    InnoDB全文搜索查询结果缓存限制(以字节为单位),每个全文搜索查询或每个线程。中间和最终的InnoDB全文搜索查询结果在内存中处理。使用innodb_ft_result_cache_limit将全文搜索查询结果缓存大小限制,以避免在处理非常大的InnoDB全文搜索查询结果(例如数百万或数千万行)时的内存过高消耗。内存按需分配,当处理全文搜索查询时。如果达到结果缓存大小限制,会返回错误,指示查询超出了允许的最大内存。

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

  • innodb_ft_server_stopword_table

    Command-Line Format --innodb-ft-server-stopword-table=db_name/table_name
    System Variable innodb_ft_server_stopword_table
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 字符串
    Default Value NULL

    使用该选项可以为所有InnoDB表指定自定义的FULLTEXT索引停用词列表。要为特定的InnoDB表配置自定义停用词列表,请使用innodb_ft_user_stopword_table

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

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

    停用词表必须是InnoDB表,包含一个名为value的单个VARCHAR列。

    更多信息,请见第14.9.4节,“Full-Text Stopwords”

  • innodb_ft_sort_pll_degree

    Command-Line Format --innodb-ft-sort-pll-degree=#
    System Variable innodb_ft_sort_pll_degree
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 2
    Minimum Value 1
    Maximum Value 16

    在构建搜索索引时,用于并行索引和 tokenize 文本的线程数量。

    相关信息,请参见第17.6.2.4节,“InnoDB Full-Text Indexes”innodb_sort_buffer_size

  • innodb_ft_total_cache_size

    Command-Line Format --innodb-ft-total-cache-size=#
    System Variable innodb_ft_total_cache_size
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 640000000
    Minimum Value 32000000
    Maximum Value 1600000000
    Unit 字节

    所有表的InnoDB全文搜索索引缓存总内存大小,单位为字节。创建多个表,每个表都具有FULLTEXT搜索索引,可以消耗大量可用内存。innodb_ft_total_cache_size定义了所有全文搜索索引的全球内存限制,以避免过高的内存消耗。如果索引操作达到全球限制,会触发强制同步。

    更多信息,请见InnoDB Full-Text Index Cache

  • innodb_ft_user_stopword_table

    Command-Line Format --innodb-ft-user-stopword-table=db_name/table_name
    System Variable innodb_ft_user_stopword_table
    Scope Global, Session
    Dynamic Yes
    SET_VAR Hint Applies No
    Type String
    Default Value NULL

    该选项用于指定特定表的InnoDB FULLTEXT索引停用词列表。要为所有InnoDB表配置自定义停用词列表,请使用innodb_ft_server_stopword_table

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

    停用词表必须在配置innodb_ft_user_stopword_table之前存在。innodb_ft_enable_stopword必须启用,并且innodb_ft_user_stopword_table必须配置,才能创建FULLTEXT索引。

    停用词表必须是InnoDB表,包含一个名为value的单个VARCHAR列。

    更多信息,请见第14.9.4节,“Full-Text Stopwords”

  • innodb_idle_flush_pct

    Command-Line Format --innodb-idle-flush-pct=#
    System Variable innodb_idle_flush_pct
    Scope Global
    Dynamic Yes
    SET_VAR Hint Applies No
    Type Integer
    Default Value 100
    Minimum Value 0
    Maximum Value 100

    InnoDB 空闲时,限制页面刷新。值为 innodb_idle_flush_pct 的百分比,定义了 InnoDB 可以执行的 I/O 操作数(每秒)innodb_io_capacity。更多信息,请参见空闲期间限制缓冲刷新

  • innodb_io_capacity

    Command-Line Format --innodb-io-capacity=#
    System Variable innodb_io_capacity
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 10000
    Minimum Value 100
    Maximum Value (64-bit platforms) 2**64-1
    Maximum Value (32-bit platforms) 2**32-1

    变量 innodb_io_capacity 定义了 InnoDB 背景任务(如页面刷新和更改缓冲区)每秒可执行的 I/O 操作数(IOPS)。

    关于配置innodb_io_capacity变量的信息,请参阅第17.8.7节,“配置InnoDB I/O Capacity”.

  • innodb_io_capacity_max

    Command-Line Format --innodb-io-capacity-max=#
    System Variable innodb_io_capacity_max
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 2 * innodb_io_capacity
    Minimum Value 100
    Maximum Value 2**32-1

    如果flush活动落后,InnoDB可以更积极地Flush,高于由innodb_io_capacity变量定义的I/O操作每秒(IOPS)速率。innodb_io_capacity_max变量定义了在这种情况下InnoDB背景任务执行的最大IOPS数。这选项不控制innodb_flush_sync行为。

    默认值是innodb_io_capacity变量的两倍。

    关于配置innodb_io_capacity_max变量的信息,请参阅第17.8.7节,“Configuring InnoDB I/O Capacity”

  • innodb_limit_optimistic_insert_debug

    Command-Line Format --innodb-limit-optimistic-insert-debug=#
    System Variable innodb_limit_optimistic_insert_debug
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 0
    Minimum Value 0
    Maximum Value 2**32-1

    限制每个B-树页的记录数。默认值为0,表示不对记录数进行限制。这项选项仅在使用WITH_DEBUGCMake选项编译debug支持时可用。

  • innodb_lock_wait_timeout

    Command-Line Format --innodb-lock-wait-timeout=#
    System Variable innodb_lock_wait_timeout
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 50
    Minimum Value 1
    Maximum Value 1073741824
    Unit

    InnoDB事务等待行锁定的时间长度,以秒为单位。默认值为50秒。如果一个事务尝试访问另一个InnoDB事务锁定的行,事务将在最多等待这个时间长度以获取写入权限,然后出现以下错误:

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

    当锁定等待超时发生时,当前语句将被回滚(而不是整个事务)。要使整个事务回滚,请使用--innodb-rollback-on-timeout选项。请参阅第17.20.5节,“InnoDB错误处理”

    您可能会将这个值降低,以便在交互式应用程序或OLTP系统中快速显示用户反馈或将更新操作放入队列以便后续处理。您也可能会将这个值增加,以便长时间运行的后端操作,例如数据仓库中的变换步骤,等待其他大型插入或更新操作完成。

    innodb_lock_wait_timeout 适用于 InnoDB 行锁。MySQL 表锁不在 InnoDB 内部发生,并且这个超时时间不适用于等待表锁的等待。

    锁定等待超时值不适用于启用 innodb_deadlock_detect (默认情况下)的死锁,因为 InnoDB 可以立即检测到死锁并回滚其中一个死锁事务。当 innodb_deadlock_detect 被禁用时,InnoDB 依赖于 innodb_lock_wait_timeout 在死锁发生时事务回滚。请参阅第17.7.5.2节,“Deadlock Detection”

    innodb_lock_wait_timeout 可以在运行时使用 SET GLOBALSET SESSION 语句设置。更改 GLOBAL 设置需要具有足够的权限来设置全局系统变量(见第7.1.9.1节,“系统变量权限”),对所有连接的客户端产生影响。任何客户端都可以更改 SESSION 设置为innodb_lock_wait_timeout,只对该客户端产生影响。

  • innodb_log_buffer_size

    Command-Line Format --innodb-log-buffer-size=#
    System Variable innodb_log_buffer_size
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 67108864
    Minimum Value 1048576
    Maximum Value 4294967295

    InnoDB 在磁盘上写入日志文件时使用的缓冲区大小,以字节为单位。默认值为 64MB。一个大的日志缓冲区使得可以在事务提交前不需要将日志写入磁盘,从而支持大型事务的运行。如果您有更新、插入或删除许多行的事务,可以将日志缓冲区设置更大,以减少磁盘 I/O。有关相关信息,请参阅内存配置第10.5.4节,“优化 InnoDB redo 记录”。对于一般的 I/O 调整建议,请参阅第10.5.8节,“优化 InnoDB 磁盘 I/O”

  • innodb_log_checkpoint_fuzzy_now

    Command-Line Format --innodb-log-checkpoint-fuzzy-now[={OFF|ON}]
    System Variable innodb_log_checkpoint_fuzzy_now
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 布尔值
    Default Value OFF

    启用这个调试选项强制InnoDB写入模糊检查点。这选项仅在使用WITH_ DEBUGCMake选项编译调试支持时可用。

  • innodb_log_checkpoint_now

    Command-Line Format --innodb-log-checkpoint-now[={OFF|ON}]
    System Variable innodb_log_checkpoint_now
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 布尔值
    Default Value OFF

    启用这个调试选项强制InnoDB写入检查点。这选项仅在使用WITH_ DEBUGCMake选项编译调试支持时可用。

  • innodb_log_checksums

    Command-Line Format --innodb-log-checksums[={OFF|ON}]
    System Variable innodb_log_checksums
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 布尔值
    Default Value ON

    启用或禁用redo日志页的校验和。

    innodb_log_checksums=ON 启用了 redo 日志页的 CRC-32C 检查和算法。当innodb_log_checksums被禁用时,redo 日志页的检查和字段内容将被忽略。

    redo 日志头页和 redo 日志检查点页上的 checksums 从不被禁用。

  • innodb_log_compressed_pages

    Command-Line Format --innodb-log-compressed-pages[={OFF|ON}]
    System Variable innodb_log_compressed_pages
    Scope Global
    Dynamic Yes
    SET_VAR Hint Applies No
    Type Boolean
    Default Value ON

    指定是否将 re-压缩的 的图像写入到 redo 日志。re-压缩可能会在对压缩数据进行更改时发生。

    innodb_log_compressed_pages 默认启用,以防止在恢复过程中使用不同版本的zlib压缩算法可能引起的损坏。如果您确定zlib版本不会更改,可以禁用innodb_log_compressed_pages以减少对修改压缩数据的工作负载的redo日志生成。

    要测量启用或禁用innodb_log_compressed_pages的影响,比较在相同工作负载下redo日志生成的结果。可用的选项包括观察SHOW ENGINE INNODB STATUS输出中的Log sequence number(LSN)在LOG部分,或者监控Innodb_os_log_written状态以获取redo日志文件写入的字节数。

    相关信息,请见第17.9.1.6节,“OLTP工作负载的压缩”

  • innodb_log_file_size

    Command-Line Format --innodb-log-file-size=#
    Deprecated
    System Variable innodb_日志文件大小
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 50331648
    Minimum Value 4194304
    Maximum Value 512GB / innodb_日志文件组
    Unit 字节

    每个日志文件日志组中的字节大小。日志文件的总大小(innodb_log_file_size * innodb_log_files_in_group)不能超过512GB的最大值。例如,255 GB的日志文件对(pair)接近限制但不超过它。默认值为48MB。

    通常,日志文件的总大小应该足够大,以平滑工作负载活动的峰值和谷值,这意味着可以处理超过一个小时的写入活动。值越大,缓冲池中的检查点刷新活动就需要更少,减少了磁盘I/O。较大的日志文件也会使崩溃恢复速度变慢。

    最小的innodb_log_file_size是4MB。

    有关相关信息,请参阅Redo Log Configuration。对于一般I/O优化建议,请参阅第10.5.8节,“Optimizing InnoDB Disk I/ O”

    如果innodb_dedicated_server启用,innodb_log_file_size值将自动配置,如果未明确定义。更多信息,请参阅第17.8.12节,“Enabling Automatic Configuration for a Dedicated MySQL Server”

  • innodb_log_files_in_group

    Command-Line Format --innodb-log-files-in-group=#
    Deprecated
    System Variable innodb_log_files_in_group
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 2
    Minimum Value 2
    Maximum Value 100

    log文件组中的日志文件数量。InnoDB将文件写入循环方式。默认值(和推荐值)是2。文件的位置由innodb_log_group_home_dir指定。日志文件的总大小(innodb_log_file_size * innodb_log_files_in_group)可以达到512GB。

    相关信息,请参阅redo日志配置

    如果启用了innodb_dedicated_server,则innodb_log_files_in_group将自动配置,如果未明确定义。更多信息,请见第17.8.12节,“Enabling Automatic Configuration for a Dedicated MySQL Server”

  • innodb_log_group_home_dir

    Command-Line Format --innodb-log-group-home-dir=dir_name
    System Variable innodb_log_group_home_dir
    Scope Global
    Dynamic
    SET_VAR Hint Applies
    Type 目录名称

    InnoDB redo log 文件的目录路径。

    相关信息,请见Redo Log Configuration

  • innodb_log_spin_cpu_abs_lwm

    Command-Line Format --innodb-log-spin-cpu-abs-lwm=#
    System Variable innodb_log_spin_cpu_abs_lwm
    Scope Global
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 80
    Minimum Value 0
    Maximum Value 4294967295

    定义了在等待flush redo时,用户线程不再spin的最小CPU使用率。该值以CPU核心使用率的总和表示。例如,默认值80是单个CPU核心的80%。在多核处理器系统上,一值为150表示100%使用一个CPU核心加50%使用第二个CPU核心。

    有关相关信息,请参见第10.5.4节,“InnoDB redo日志优化”

  • innodb_log_spin_cpu_pct_hwm

    Command-Line Format --innodb-log-spin-cpu-pct-hwm=#
    System Variable innodb_log_spin_cpu_pct_hwm
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 50
    Minimum Value 0
    Maximum Value 100

    定义了在等待flush redo时,用户线程不再spin的最大CPU使用率。该值以所有CPU核心总处理能力的百分比表示。默认值为50%。例如,在服务器上有四个CPU核心的情况下,两个CPU核心的100%使用是服务器的50%处理能力。

    innodb_log_spin_cpu_pct_hwm 变量尊重处理器亲和性。例如,如果服务器有48个核心,但mysqld进程被固定到四个CPU核心上,其他44个CPU核心将被忽略。

    有关相关信息,请参阅第10.5.4节,“优化InnoDB redo日志”

  • innodb_log_wait_for_flush_spin_hwm

    Command-Line Format --innodb-log-wait-for-flush-spin-hwm=#
    System Variable innodb_log_wait_for_flush_spin_hwm
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 400
    Minimum Value 0
    Maximum Value (64-bit platforms) 2**64-1
    Maximum Value (32-bit platforms) 2**32-1
    Unit 微秒

    定义了在等待flush redo时用户线程不再旋转的最大平均日志刷新时间。默认值为400微秒。

    有关相关信息,请参阅第10.5.4节,“优化InnoDB redo日志”

  • innodb_log_write_ahead_size

    Command-Line Format --innodb-log-write-ahead-size=#
    System Variable innodb_log_write_ahead_size
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 8192
    Minimum Value 512(日志文件块大小)
    Maximum Value 等于innodb_page_size
    Unit 字节

    定义redo日志的写前置块大小,以字节为单位。为了避免“读-写”,将innodb_log_write_ahead_size设置与操作系统或文件系统缓存块大小相匹配。默认设置为8192字节。读-写发生在redo日志块未完全缓存在操作系统或文件系统中,因为write-ahead块大小与操作系统或文件系统缓存块大小不匹配时。

    有效的值为innodb_log_write_ahead_size的倍数(2n),其中n是InnoDB日志文件块大小的指数。最小值为InnoDB日志文件块大小(512)。在指定最小值时,不会发生写前操作。最大值等于innodb_page_size的值。如果您指定了innodb_log_write_ahead_size的值大于innodb_page_size的值,innodb_log_write_ahead_size设置将被截断到innodb_page_size的值。

    如果您将innodb_log_write_ahead_size设置太低,相对于操作系统或文件系统缓存块大小可能会导致“read-on-write”。如果将值设置太高可能会对日志文件写入的fsync性能产生轻微影响,因为多个块同时被写入。

    有关相关信息,请参见第10.5.4节,“优化InnoDB redo日志”

  • innodb_log_writer_threads

    Command-Line Format --innodb-log-writer-threads[={OFF|ON}]
    System Variable innodb_log_writer_threads
    Scope Global
    Dynamic Yes
    SET_VAR Hint Applies No
    Type Boolean
    Default Value ON

    启用专门的日志写入线程,用于将redo日志记录从日志缓冲区写入到系统缓冲区,并将系统缓冲区刷新到redo日志文件中。专门的日志写入线程可以在高并发系统中提高性能,但是在低并发系统中禁用专门的日志写入线程可以提供更好的性能。

    更多信息,请见第10.5.4节,“InnoDB redo日志优化”

  • innodb_lru_scan_depth

    Command-Line Format --innodb-lru-scan-depth=#
    System Variable innodb_lru_scan_depth
    Scope Global
    Dynamic Yes
    SET_VAR Hint Applies No
    Type Integer
    Default Value 1024
    Minimum Value 100
    Maximum Value (64-bit platforms) 2**64-1
    Maximum Value (32-bit platforms) 2**32-1

    影响InnoDB缓冲池flush操作算法和启发式的参数。主要对性能专家调整I/O密集型工作负载感兴趣。它指定每个缓冲池实例中,页清洁线程在LRU页面列表中扫描的深度,以查找需要flush的脏页。这是一个背景操作,每秒执行一次。

    通常情况下,小于默认值的设置是合适的。远远高于必要的值可能会影响性能。如果您有空闲I/O容量,可以考虑增加该值;反之,如果写入密集型工作负载饱和了您的I/O容量,特别是在大缓冲池的情况下,请减少该值。

    在调整innodb_lru_scan_depth时,从低值开始,并将设置向上配置,以尽量少见零免费页。同时,也要考虑更改innodb_lru_scan_depth,因为innodb_lru_scan_depth * innodb_buffer_pool_instances定义了每秒执行的工作量。

    相关信息,请见第17.8.3.5节,“配置缓冲池刷新”。关于I/O优化的总体建议,请见第10.5.8节,“优化InnoDB磁盘I/O”

  • innodb_max_dirty_pages_pct

    Command-Line Format --innodb-max-dirty-pages-pct=#
    System Variable innodb_max_dirty_pages_pct
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 数字
    Default Value 90
    Minimum Value 0
    Maximum Value 99.999

    InnoDB尝试从缓冲池刷新数据,以使脏页的百分比不超过该值。

    innodb_max_dirty_pages_pct设置确定刷新活动的目标,但不会影响刷新速度。关于管理刷新速度的信息,请见第17.8.3.5节,“配置缓冲池刷新”

    相关信息,请见第17.8.3.5节,“配置缓冲池刷新”。对于一般I/O优化建议,请见第10.5.8节,“优化InnoDB磁盘I/O”

  • innodb_max_dirty_pages_pct_lwm

    Command-Line Format --innodb-max-dirty-pages-pct-lwm=#
    System Variable innodb_max_dirty_pages_pct_lwm
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 数字
    Default Value 10
    Minimum Value 0
    Maximum Value 99.999

    定义了一个低水位标记,表示dirty页面百分比的下限,当达到该值时启用预刷新以控制dirty页面比例。设置为0将完全禁用预刷新行为。配置的值应该总是小于innodb_max_dirty_pages_pct的值。更多信息,请见第17.8.3.5节,“配置缓冲池刷新”

  • innodb_max_purge_lag

    Command-Line Format --innodb-max-purge-lag=#
    System Variable innodb_max_purge_lag
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 0
    Minimum Value 0
    Maximum Value 4294967295

    定义了期望的最大purge延迟。如果这个值超过,则对INSERTUPDATEDELETE操作施加延迟,以便purge可以追上。默认值为0,这意味着没有最大purge延迟且不施加延迟。

    更多信息,请见第17.8.9节,“purge 配置”

  • innodb_max_purge_lag_delay

    Command-Line Format --innodb-max-purge-lag-delay=#
    System Variable innodb_max_purge_lag_delay
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 0
    Minimum Value 0
    Maximum Value 10000000
    Unit 微秒

    指定了在innodb_max_purge_lag阈值超过时的最大延迟微秒数。指定的innodb_max_purge_lag_delay值是由innodb_max_purge_lag公式计算的延迟期限的上限。

    更多信息,请见第17.8.9节,“Purge Configuration”

  • innodb_max_undo_log_size

    Command-Line Format --innodb-max-undo-log-size=#
    System Variable innodb_max_undo_log_size
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 1073741824
    Minimum Value 10485760
    Maximum Value 2**64-1
    Unit 字节

    定义了undo表空间的阈值大小。如果undo表空间超过阈值,它可以在innodb_undo_log_truncate启用时被标记为截断。默认值是1024 MiB(1073741824字节)。

    更多信息,请见Truncating Undo Tablespaces

  • innodb_merge_threshold_set_all_debug

    Command-Line Format --innodb-merge-threshold-set-all-debug=#
    System Variable innodb_merge_threshold_set_all_debug
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 50
    Minimum Value 1
    Maximum Value 50

    定义了一个覆盖当前MERGE_THRESHOLD设置的索引页面满页百分比值,为所有当前在字典缓存中的索引设置。只有在使用WITH_DEBUGCMake选项编译debug支持时可用。有关相关信息,请参见第17.8.11节,“Configuring the Merge Threshold for Index Pages”

  • innodb_monitor_disable

    Command-Line Format --innodb-monitor-disable={counter|module|pattern|all}
    System Variable innodb_monitor_disable
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 字符串

    该变量作为开关,禁用InnoDB metrics counters。计数器数据可以使用信息_schema中的INNODB_METRICS表查询。关于使用信息,请见第17.15.6节,“InnoDB INFORMATION_SCHEMA Metrics Table”

    innodb_monitor_disable='latch'禁用SHOW ENGINE INNODB MUTEX的统计信息收集。关于更多信息,请见第15.7.7.16节,“SHOW ENGINE Statement”

  • innodb_monitor_enable

    Command-Line Format --innodb-monitor-enable={counter|module|pattern|all}
    System Variable innodb_monitor_enable
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 字符串

    这个变量作为开关,启用InnoDB 度量计数器。计数器数据可以使用信息_schema中的INNODB_METRICS表查询。关于使用信息,请见第17.15.6节,“InnoDB INFORMATION_SCHEMA Metrics Table”

    innodb_ monitor_enable='latch'启用SHOW ENGINE INNODB MUTEX的统计信息收集。关于更多信息,请见第15.7.7.16节,“SHOW ENGINE Statement”

  • innodb_ monitor_reset

    Command-Line Format --innodb-monitor-reset={counter|module|pattern|all}
    System Variable innodb_ monitor_reset
    Scope Global
    Dynamic Yes
    SET_VAR Hint Applies No
    Type Enumeration
    Default Value NULL
    Valid Values

    counter

    module

    pattern

    all

    该变量作为开关,重置InnoDB度量计数器的计数值为零。度量数据可以使用信息_schema中的INNODB_METRICS表查询。关于使用信息,请见第17.15.6节,“InnoDB INFORMATION_SCHEMA Metrics Table”.

    innodb_monitor_reset='latch'重置SHOW ENGINE INNODB MUTEX报告的统计信息。关于更多信息,请见第15.7.7.16节,“SHOW ENGINE Statement”.

  • innodb_monitor_reset_all

    Command-Line Format --innodb-monitor-reset-all={counter|module|pattern|all}
    System Variable innodb_monitor_reset_all
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 枚举
    Default Value NULL
    Valid Values

    counter

    module

    pattern

    all

    这个变量作为开关,重置所有值(最小、最大等)对于 InnoDB 计数器。计数器数据可以使用信息_schema中的INNODB_METRICS表查询。关于使用信息,请见第17.15.6节,“InnoDB INFORMATION_SCHEMA Metrics Table”

  • innodb_numa_interleave

    Command-Line Format --innodb-numa-interleave[={OFF|ON}]
    System Variable innodb_numa_interleave
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 布尔值
    Default Value ON

    启用 NUMA 交错内存策略对 InnoDB 缓冲池的分配。当innodb_numa_interleave启用时,NUMA 内存策略将被设置为MPOL_INTERLEAVE对 mysqld 进程。在分配 InnoDB 缓冲池后,NUMA 内存策略将被设置回MPOL_DEFAULT。为了使innodb_numa_interleave 选项可用,MySQL 必须在支持 NUMA 的 Linux 系统上编译。如果系统支持,默认值为 ON,否则默认为 OFF

    CMake根据当前平台是否支持NUMA来设置默认WITH_NUMA值。更多信息,请见第2.8.7节,“MySQL Source-Configuration Options”.

  • innodb_old_blocks_pct

    Command-Line Format --innodb-old-blocks-pct=#
    System Variable innodb_old_blocks_pct
    Scope Global
    Dynamic Yes
    SET_VAR Hint Applies No
    Type Integer
    Default Value 37
    Minimum Value 5
    Maximum Value 95

    指定InnoDB缓冲池中旧块子列表的近似百分比。值的范围是5到95。默认值为37(即池的3/8)。通常与innodb_old_blocks_time一起使用。

    更多信息,请见第17.8.3.3节,“使缓冲池扫描抵抗”。关于缓冲池管理、LRU算法和驱逐策略,请见第17.5.1节,“缓冲池”

  • innodb_old_blocks_time

    Command-Line Format --innodb-old-blocks-time=#
    System Variable innodb_old_blocks_time
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 1000
    Minimum Value 0
    Maximum Value 2**32-1
    Unit 毫秒

    非零值可以防止缓冲池被填充由仅在短期内引用数据的数据,例如在全表扫描期间。增加这个值可以提供更多保护,以免全表扫描干扰缓冲池中的数据。

    指定在毫秒中一个块插入到旧子列表后,它必须留在那里直到其第一次访问后至少经过多少毫秒才能被移动到新子列表。如果值为0,块插入到旧子列表并且立即在首次访问时移动到新子列表,不管访问发生的时间点。如果值大于0,块将留在旧子列表中直到至少发生了该多个毫秒的访问。例如,值为1000使块留在旧子列表中1秒后才能被移到新子列表。

    默认值是1000。

    这个变量通常与innodb_old_blocks_pct一起使用。更多信息,请见第17.8.3.3节,“使缓冲池扫描抵抗”。关于缓冲池管理、LRU算法和驱逐策略,请见第17.5.1节,“缓冲池”

  • innodb_online_alter_log_max_size

    Command-Line Format --innodb-online-alter-log-max-size=#
    System Variable innodb_online_alter_log_max_size
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 134217728
    Minimum Value 65536
    Maximum Value 2**64-1
    Unit 字节

    指定了在在线 DDL操作中用于 InnoDB 表的临时日志文件大小上限。对于每个被创建或更改的索引,存在一个这样的日志文件。在DDL操作期间,该日志文件存储了在表中插入、更新或删除的数据。临时日志文件会根据innodb_sort_buffer_size的值扩展,直到达到由innodb_online_alter_log_max_size指定的最大大小。如果临时日志文件超过上限大小,ALTER TABLE操作将失败,并且所有未提交的并发 DML 操作将回滚。因此,对于这个选项的较大值允许更多的 DML 在在线 DDL 操作期间发生,但也会延长DDL 操作结束时表锁定的时间,以便应用日志中的数据。

  • innodb_open_files

    Command-Line Format --innodb-open-files=#
    System Variable innodb_open_files
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value -1(表示自动调整;不要将这个字面值分配给该变量)
    Minimum Value 10
    Maximum Value 2147483647

    指定 InnoDB 可以同时打开的文件最大数量。最小值为 10。如果innodb_file_per_table被禁用,缺省值为 300;否则,缺省值为 300 或 table_open_cache 设置的值,取高者。

    可以在运行时使用SELECT innodb_set_open_files_limit(N)语句设置 innodb_open_files限制,例如:

    mysql> SELECT innodb_set_open_files_limit(1000);

    该语句执行一个存储过程,该过程将设置新的限制。如果过程成功,它将返回新设置的限制值;否则,将返回失败信息。

    不能使用SET语句设置 innodb_open_files。要在运行时设置innodb_open_files,请使用上述描述的语句。

    innodb_open_files=default 设置不支持。只允许整数值。

    为了防止非LRU管理文件占用整个innodb_open_files限制,非LRU管理文件被限制为该限制的90%,以留出10%用于LRU管理文件。

  • innodb_optimize_fulltext_only

    Command-Line Format --innodb-optimize-fulltext-only[={OFF|ON}]
    System Variable innodb_optimize_fulltext_only
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 布尔值
    Default Value OFF

    修改OPTIMIZE TABLEInnoDB表的操作方式。旨在临时启用,以便在执行InnoDB表的维护操作时启用。

    默认情况下,OPTIMIZE TABLE 对表的聚簇索引进行重组。启用该选项时,OPTIMIZE TABLE 将跳过表数据的重组,而是处理InnoDB 全文索引中的新添加、删除和更新token数据。更多信息,请参见Optimizing InnoDB Full-Text Indexes.

  • innodb_page_cleaners

    Command-Line Format --innodb-page-cleaners=#
    System Variable innodb_page_cleaners
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value innodb_buffer_pool_instances
    Minimum Value 1
    Maximum Value 64

    buffer pool 实例中脏页的数量 cleaner线程。Page cleaner线程执行 flush 列表和 LRU 刷新。当有多个 page cleaner 线程时,buffer pool 刷盘任务将被分配给空闲 page cleaner 线程。innodb_page_cleaners 的默认值设置为innodb_buffer_pool_instances 的同一个值。如果指定的 page cleaner 线程数量超过 buffer pool 实例数量,则innodb_page_cleaners 将被自动设置为innodb_buffer_pool_instances 的同一个值。

    如果您的工作负载在从 buffer pool 实例中刷新脏页到数据文件时是写-IO bound的,并且系统硬件有可用容量,增加 page cleaner 线程数量可能会提高写-IO 通过率。

    多线程 Page cleaner 支持扩展到关闭和恢复阶段。

    在 Linux 平台上,如果支持,并且 mysqld 执行用户被授权,可以使用 setpriority() 系统调用将 page cleaner 线程设置为高优先级,以帮助页面刷新保持与当前工作负载的同步。setpriority() 支持由以下 InnoDB 启动消息指示:

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

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

    mysql              hard    nice       -20
    mysql              soft    nice       -20

    对于使用systemd管理的系统,可以通过在本地systemd配置文件中指定LimitNICE=-20来实现相同的结果。例如,创建一个名为override.conf的文件,并将其添加到/etc/systemd/system/mysqld.service.d/override.conf中:

    [Service]
    LimitNICE=-20

    在创建或更改override.conf后,重新加载systemd配置,然后告诉systemd重启MySQL服务:

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

    要了解更多关于使用本地systemd配置文件的信息,请参阅Configuring systemd for MySQL

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

    $> cat /proc/mysqld_pid/limits | grep nice
    Max nice priority         18446744073709551596 18446744073709551596
  • innodb_page_size

    Command-Line Format --innodb-page-size=#
    System Variable innodb_page_size
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 枚举
    Default Value 16384
    Valid Values

    4096

    8192

    16384

    32768

    65536

    指定了页面大小的值,以便在表空间中使用InnoDB。可以以字节或千字节为单位指定值。例如,可以将16KB的页面大小指定为16384、16KB或16k。

    innodb_page_size只能在MySQL实例初始化之前配置,并且不能在实例启动后更改。如果没有指定值,实例将使用默认页面大小。请参阅第17.8.1节,“InnoDB Startup Configuration”

    对于32KB和64KB的页面大小,行长的最大值约为16000字节。ROW_FORMAT=COMPRESSEDinnodb_page_size设置为32KB或64KB时不受支持。对于innodb_page_size=32KB,extent大小为2MB。对于innodb_page_size=64KB,extent大小为4MB。在使用32KB或64KB页面大小时,innodb_log_buffer_size应该设置为至少16MB(默认值为64MB)。

    默认的16KB页面大小或更大适合广泛的工作负载,特别是涉及表扫描和DML操作的bulk更新查询。较小的页面大小可能对OLTP工作负载更有效,这些工作负载涉及许多小写入,where contention可以是问题,当单个页面包含许多行。较小的页面也可能对SSD存储设备更有效,这些设备通常使用小块大小。将InnoDB页面大小保持与存储设备块大小相近可以最小化写入磁盘的未改变数据量。

    第一个系统表空间数据文件(ibdata1)的最小文件大小取决于innodb_page_size的值。请查看innodb_data_file_path选项描述以获取更多信息。

    使用特定的InnoDB页面大小的MySQL实例不能使用来自不同页面大小的实例的数据文件或日志文件。

    关于一般I/O调整建议,请查看第10.5.8节,“Optimizing InnoDB Disk I/ O”

  • innodb_parallel_read_threads

    Command-Line Format --innodb-parallel-read-threads=#
    System Variable innodb_parallel_read_threads
    Scope Session
    Dynamic Yes
    SET_VAR Hint Applies No
    Type Integer
    Default Value (可用逻辑处理器 / 8),最小4
    Minimum Value 1
    Maximum Value 256

    定义了并行.clustered索引读取的线程数。支持对分区进行并行扫描。并行读取线程可以提高CHECK TABLE性能。InnoDB在执行CHECK TABLE操作时,读取clustered索引两次。第二次读取可以并行进行。这一特性不适用于secondary索引扫描。innodb_parallel_read_threads会话变量必须设置为大于1的值,以便并行clustered索引读取发生。实际用于并行clustered索引读取的线程数由innodb_parallel_read_threads设置或要扫描的索引子树数量,取决于较小者。扫描过程中读入缓冲池中的页面被保持在缓冲池LRU列表的尾部,以便在需要释放缓冲池页面时快速丢弃它们。

    并行读取线程的最大数量(256)是所有客户端连接的总线程数。如果达到线程限制,连接将回退到使用单个线程。默认值是系统可用逻辑处理器数量除以8,以最小值4为准。

    在MySQL 8.4之前,默认值始终为4。

  • innodb_print_all_deadlocks

    Command-Line Format --innodb-print-all-deadlocks[={OFF|ON}]
    System Variable innodb_print_all_deadlocks
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 布尔值
    Default Value OFF

    当启用此选项时,InnoDB用户事务中的所有死锁信息将记录在mysqld错误日志中。否则,您只能看到最后一个死锁的信息,使用SHOW ENGINE INNODB STATUS语句。偶尔的InnoDB死锁不是问题,因为InnoDB立即检测到条件并自动回滚事务之一。你可能会使用此选项来 troubleshoot为什么死锁正在发生,如果应用程序没有适当的错误处理逻辑来检测回滚并重试操作。大量死锁可能表明需要重新结构访问多个表的交易,以便每个事务都访问表的相同顺序,从而避免死锁条件。

    有关相关信息,请见第17.7.5节,“InnoDB中的死锁”

  • innodb_print_ddl_logs

    Command-Line Format --innodb-print-ddl-logs[={OFF|ON}]
    System Variable innodb_print_ddl_logs
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 布尔值
    Default Value OFF

    启用该选项将导致 MySQL 将 DDL 日志写入到 stderr。更多信息,请见查看DDL日志

  • innodb_purge_batch_size

    Command-Line Format --innodb-purge-batch-size=#
    System Variable innodb_purge_batch_size
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 300
    Minimum Value 1
    Maximum Value 5000

    定义了undo日志页面的批处理大小,从历史列表中purge解析和处理。多线程purge配置下,协调purge线程将innodb_purge_batch_size除以innodb_purge_threads,并将每个purge线程分配的页面数。变量innodb_purge_batch_size也定义了purge在undo日志中释放的页面数,每128次迭代。

    选项innodb_purge_batch_size旨在与innodb_purge_threads设置一起进行高级性能调整。大多数用户不需要更改innodb_purge_batch_size的默认值。

    相关信息,请见第17.8.9节,“purge配置”

  • innodb_purge_threads

    Command-Line Format --innodb-purge-threads=#
    System Variable innodb_purge_threads
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 1 if available logical processors <= 16; otherwise 4
    Minimum Value 1
    Maximum Value 32

    InnoDB 回滚操作的背景线程数量。增加该值可以在系统中执行多个表的DML操作时提高效率。

    相关信息,请参见第17.8.9节,“Purge Configuration”

  • innodb_purge_rseg_truncate_frequency

    Command-Line Format --innodb-purge-rseg-truncate-frequency=#
    System Variable innodb_purge_rseg_truncate_frequency
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 128
    Minimum Value 1
    Maximum Value 128

    定义purge系统在每次调用时释放回滚段的频率,以undo表空间的次数为单位。通常,purge系统每128次调用释放回滚段。默认值是128。减少该值可以增加purge线程释放回滚段的频率。

    innodb_purge_rseg_truncate_frequency 是与innodb_undo_log_truncate一起使用的。更多信息,请见Truncating Undo Tablespaces.

  • innodb_random_read_ahead

    Command-Line Format --innodb-random-read-ahead[={OFF|ON}]
    System Variable innodb_random_read_ahead
    Scope Global
    Dynamic Yes
    SET_VAR Hint Applies No
    Type Boolean
    Default Value OFF

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

    关于不同类型的读取请求性能考虑,请见Section 17.8.3.4, “Configuring InnoDB Buffer Pool Prefetching (Read-Ahead)”。关于一般 I/ O调整建议,请见Section 10.5.8, “Optimizing InnoDB Disk I/O”.

  • innodb_read_ahead_threshold

    Command-Line Format --innodb-read-ahead-threshold=#
    System Variable innodb_read_ahead_threshold
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 56
    Minimum Value 0
    Maximum Value 64

    控制InnoDB对线性读前的敏感度,该读前用于将页面prefetch到缓冲池中。如果InnoDB从一个extent(64页)顺序读取至少innodb_read_ahead_threshold页,它将启动异步读取整个下一个extent的操作。允许的值范围为0到64。值为0将禁用读前。对于默认值56,InnoDB必须顺序读取至少56页从extent中,以便启动对下一个extent的异步读取。

    了解读取机制中读取的页面数量,以及这些页面从缓冲池中被驱逐而未被访问的数量,可以在调整innodb_read_ahead_threshold设置时非常有用。SHOW ENGINE INNODB STATUS输出显示了Innodb_buffer_pool_read_aheadInnodb_buffer_pool_read_ahead_evicted全局状态变量的计数信息,这些变量报告了读取机制请求将页面引入缓冲池的数量,以及这些页面从缓冲池中被驱逐而未被访问的数量,分别。状态变量报告自最后一次服务器重启以来全球值。

    SHOW ENGINE INNODB STATUS还显示了读取机制页面的读取率和未被访问的驱逐率。每秒平均值基于自SHOW ENGINE INNODB STATUS最后一次调用以来收集的统计信息,并在SHOW ENGINE INNODB STATUS输出的缓冲池和内存部分中显示。

    更多信息,请见第17.8.3.4节,“InnoDB 缓冲池预取配置(读前)”。对于一般I/O调整建议,请见第10.5.8节,“Optimizing InnoDB Disk I/O”

  • innodb_读_io_线程

    Command-Line Format --innodb-读-io-线程=#
    System Variable innodb_读_io_线程
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value (系统可用逻辑处理器 / 2),最小值为4
    Minimum Value 1
    Maximum Value 64

    InnoDB 中的读操作I/O线程数量。与写线程对应的是innodb_写_io_线程。更多信息,请见第17.8.5节,“配置背景InnoDB I/O线程数量”。对于一般I/O调整建议,请见第10.5.8节,“Optimizing InnoDB Disk I/O”。默认值是系统可用逻辑处理器的数量除以2,且最小值为4。

    在MySQL 8.4之前,默认值总是为4。

    Note

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

  • innodb_read_only

    Command-Line Format --innodb-read-only[={OFF|ON}]
    System Variable innodb_read_only
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 布尔值
    Default Value OFF

    将InnoDB设置为只读模式。用于分布式数据库应用程序或数据集的只读媒体。也可以在数据仓库中使用,以共享同一个数据目录之间多个实例。更多信息,请参见第17.8.2节,“配置InnoDB为只读操作”

    启用innodb_read_only将阻止所有存储引擎创建和删除表,而不仅限于InnoDB。对于任何存储引擎的表创建和drop操作,会修改数据字典表在mysql系统数据库中,但是这些表使用InnoDB存储引擎且无法在启用innodb_read_only时进行修改。同样适用于其他需要修改数据字典表的表操作的原则,例如:

    此外,mysql 系统数据库中的其他表使用 InnoDB 存储引擎。将这些表设置为只读结果是对它们进行修改操作的限制示例:

  • innodb_redo_log_archive_dirs

    Command-Line Format --innodb-redo-log-archive-dirs
    System Variable innodb_redo_log_archive_dirs
    Scope Global
    Dynamic Yes
    SET_VAR Hint Applies No
    Type String
    Default Value NULL

    定义了redo日志归档文件可以创建的标记目录。您可以在分号 (;) 分隔的列表中定义多个标记目录。例如:

    innodb_redo_log_archive_dirs='label1:/backups1;label2:/backups2'

    标签可以是任何字符串,除了冒号 (:) 之外,冒号 (:) 不允许出现。空标签也允许,但是仍然需要冒号 (:)。

    路径必须指定,并且目录必须存在。路径可以包含冒号 (:), 但是分号 (;) 不允许出现。

  • innodb_redo_log_capacity

    Command-Line Format --innodb-redo-log-capacity=#
    System Variable innodb_redo_log_capacity
    Scope Global
    Dynamic Yes
    SET_VAR Hint Applies No
    Type Integer
    Default Value 104857600
    Minimum Value 8388608
    Maximum Value 549755813888
    Unit 字节

    定义了redo日志文件占用的磁盘空间。

    innodb_redo_log_capacity 取代了innodb_log_files_in_groupinnodb_log_file_size变量,如果innodb_redo_log_capacity被定义,那么这两个变量将被忽略。

    如果innodb_redo_log_capacity未定义,并且既没有定义innodb_log_file_size也没有定义innodb_log_files_in_group,那么将使用默认的innodb_redo_log_capacity值。

    如果innodb_redo_log_capacity未定义,并且定义了innodb_log_file_size和/或innodb_log_files_in_group,那么InnoDB redo log capacity将被计算为(innodb_log_files_in_group * innodb_log_file_size)。这次计算不会修改未使用的innodb_redo_log_capacity设置的值。

    服务器状态变量Innodb_redo_log_capacity_resized表示所有redo log文件的总redo log capacity。

    如果启用了innodb_dedicated_server,则innodb_redo_log_capacity值将自动配置,如果未明确定义。更多信息,请见第17.8.12节,“Enabling Automatic Configuration for a Dedicated MySQL Server”

    更多信息,请见第17.6.5节,“Redo Log”

  • innodb_redo_log_encrypt

    Command-Line Format --innodb-redo-log-encrypt[={OFF|ON}]
    System Variable innodb_redo_log_encrypt
    Scope Global
    Dynamic Yes
    SET_VAR Hint Applies No
    Type Boolean
    Default Value OFF

    控制使用InnoDB数据在休眠状态加密特性对redo log数据进行加密。默认情况下,redo log数据的加密是禁用的。更多信息,请见Redo Log Encryption

  • innodb_replication_delay

    Command-Line Format --innodb-replication-delay=#
    System Variable innodb_ replication_delay
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 0
    Minimum Value 0
    Maximum Value 4294967295
    Unit 毫秒

    如果innodb_thread_concurrency达到,则在副本服务器上延迟复制线程的毫秒数。

  • innodb_rollback_on_timeout

    Command-Line Format --innodb-rollback-on-timeout[={OFF|ON}]
    System Variable innodb_rollback_on_timeout
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 布尔值
    Default Value OFF

    默认情况下,InnoDB在事务超时时只回滚最后一个语句。如果指定了--innodb-rollback-on-timeoutInnoDB中止并回滚整个事务。

    更多信息,请见第17.20.5节,“InnoDB错误处理”

  • innodb_rollback_segments

    Command-Line Format --innodb-rollback-segments=#
    System Variable innodb_rollback_segments
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 128
    Minimum Value 1
    Maximum Value 128

    innodb_rollback_segments 定义了每个回滚表空间和全局临时表空间为事务生成undo记录所分配的 rollback segments 数量。每个回滚段支持的事务数量取决于 InnoDB 页大小和每个事务分配的undo日志数量。更多信息,请见第17.6.6节,“Undo Logs”

    相关信息,请见第17.3节,“InnoDB Multi-Versioning”。关于undo表空间的信息,请见第17.6.3.4节,“Undo Tablespaces”

  • innodb_saved_page_number_debug

    Command-Line Format --innodb-saved-page-number-debug=#
    System Variable innodb_saved_page_number_debug
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 0
    Minimum Value 0
    Maximum Value 2^32-1

    保存页面号码。将innodb_fil_make_page_dirty_debug选项设置为脏页面,定义在innodb_saved_page_number_debug的页面。只有在使用WITH_DEBUGCMake选项编译debug支持时,innodb_saved_page_number_debug选项才可用。

  • innodb_segment_reserve_factor

    Command-Line Format --innodb-segment-reserve-factor=#
    System Variable innodb_segment_reserve_factor
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 数字
    Default Value 12.5
    Minimum Value 0.03
    Maximum Value 40

    定义了表空间文件段页的空页百分比。该设置适用于每个表和通用表空间。innodb_segment_reserve_factor 的默认设置为 12.5%,与之前的 MySQL 发布版本中保留的页面百分比相同。

    更多信息,请参见Configuring the Percentage of Reserved File Segment Pages

  • innodb_sort_buffer_size

    Command-Line Format --innodb-sort-buffer-size=#
    System Variable innodb_sort_buffer_size
    Scope Global
    Dynamic No
    SET_VAR Hint Applies No
    Type Integer
    Default Value 1048576
    Minimum Value 65536
    Maximum Value 67108864
    Unit bytes

    该变量定义了在执行在线 DDL操作时,记录并发 DML 的临时日志文件的扩展大小,以及读取缓冲区和写入缓冲区的大小。

    更多信息,请参见Section 17.12.3, “Online DDL Space Requirements”

  • innodb_spin_wait_delay

    Command-Line Format --innodb-spin-wait-delay=#
    System Variable innodb_spin_wait_delay
    Scope Global
    Dynamic Yes
    SET_VAR Hint Applies No
    Type Integer
    Default Value 6
    Minimum Value 0
    Maximum Value 1000

    最大 spin 锁之间的等待时间。该机制的低级实现因硬件和操作系统的组合而异,因此延迟不对应于固定的时间间隔。

    可以与innodb_spin_wait_pause_multiplier变量结合使用,以获取更好的控制 spin-锁轮询延迟的能力。

    更多信息,请见第17.8.8节,“配置spin锁轮询”

  • innodb_spin_wait_pause_multiplier

    Command-Line Format --innodb-spin-wait-pause-multiplier=#
    System Variable innodb_spin_wait_pause_multiplier
    Scope Global
    Dynamic Yes
    SET_VAR Hint Applies No
    Type 整数
    Default Value 50
    Minimum Value 0
    Maximum Value 100

    定义了在等待获取互斥锁或读写锁时,spin-wait循环中PAUSE指令的数量倍数值。

    更多信息,请参见第17.8.8节,“配置 spin 锁 轮询”

  • innodb_stats_auto_recalc

    Command-Line Format --innodb-stats-auto-recalc[={OFF|ON}]
    System Variable innodb_stats_auto_recalc
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 布尔值
    Default Value ON

    使InnoDB自动重新计算持久统计,当表中的数据发生了substantially的变化。阈值是表中的10%行数。这项设置适用于在innodb_stats_persistent选项启用时创建的表。自动统计重新计算也可以通过在CREATE TABLEALTER TABLE语句中指定STATS_AUTO_RECALC=1来配置。统计数据的采样数量由innodb_stats_persistent_sample_pages变量控制。

    更多信息,请见第17.8.10.1节,“配置持久优化器统计参数”

  • innodb_stats_include_delete_marked

    Command-Line Format --innodb-stats-include-delete-marked[={OFF|ON}]
    System Variable innodb_stats_include_delete_marked
    Scope Global
    Dynamic Yes
    SET_VAR Hint Applies No
    Type Boolean
    Default Value OFF

    默认情况下,InnoDB 在计算统计信息时读取未提交的事务数据。在删除表中记录的未提交事务的情况下,InnoDB 在计算行估算和索引统计信息时排除已经标记为删除的记录,这可能会导致其他事务在使用不同隔离级别(除了READ UNCOMMITTED)操作表时产生非优化的执行计划。为了避免这种情况,可以启用innodb_stats_include_delete_marked以确保InnoDB 在计算持久优化器统计信息时包括已经标记为删除的记录。

    innodb_stats_include_delete_marked启用时,ANALYZE TABLE 在重新计算统计信息时考虑已经标记为删除的记录。

    innodb_stats_include_delete_marked 是一个全局设置,影响所有InnoDB 表。它只适用于持久优化器统计信息。

    相关信息,请见第17.8.10.1节,“配置持久优化器统计信息参数”

  • innodb_stats_method

    Command-Line Format --innodb-stats-method=value
    System Variable innodb_stats_method
    Scope Global
    Dynamic Yes
    SET_VAR Hint Applies No
    Type Enumeration
    Default Value nulls_equal
    Valid Values

    nulls_equal

    nulls_unequal

    nulls_ignored

    服务器在收集统计信息关于InnoDB表的索引值分布时对NULL值的处理方式。允许的值是nulls_equalnulls_unequalnulls_ignored。对于nulls_equal,所有NULL索引值被认为是等价的,并且形成一个大小为NULL值数量的单个值组。对于nulls_unequalNULL值被认为是不等价的,每个NULL形成一个大小为1的值组。对于nulls_ignoredNULL值被忽略。

    生成表统计信息的方法影响了优化器在执行查询时选择索引的方式,详见第10.3.8节,“InnoDB和MyISAM索引统计信息收集”

  • innodb_stats_on_metadata

    Command-Line Format --innodb-stats-on-metadata[={OFF|ON}]
    System Variable innodb_stats_on_metadata
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 布尔值
    Default Value OFF

    这个选项仅在优化器统计信息配置为非持久时生效。优化器统计信息不会被 persisted 到磁盘中,当innodb_stats_persistent被禁用或在单个表创建或更改时使用STATS_PERSISTENT=0。更多信息,请见第17.8.10.2节,“配置非持久优化器统计参数”

    innodb_stats_on_metadata启用时,InnoDB在元数据语句,如SHOW TABLE STATUS,或访问信息_schema中的TABLESSTATISTICS表时更新非持久的统计信息。(这些更新类似于ANALYZE TABLE的操作。)当禁用时,InnoDB在这些操作中不更新统计信息。将设置留空可以提高对包含大量表或索引的架构的访问速度,也可以提高执行计划的稳定性,对于涉及到InnoDB表的查询。

    要更改设置,请执行语句SET GLOBAL innodb_stats_on_metadata=modemodeONOFF(或10)。更改设置需要具有足够的权限来设置全局系统变量(见第7.1.9.1节,“系统变量权限”),并且立即影响所有连接的操作。

  • innodb_stats_persistent

    Command-Line Format --innodb-stats-persistent[={OFF|ON}]
    System Variable innodb_stats_persistent
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 布尔值
    Default Value ON

    指定是否将InnoDB索引统计信息持久化到磁盘上。否则,统计信息可能会频繁重新计算,这可能导致查询执行计划的变化。这一设置与每个表创建时一起存储。你可以在全局级别设置innodb_stats_persistent,或者使用STATS_PERSISTENT子句在CREATE TABLEALTER TABLE语句中 Override系统级别设置,配置单个表的持久统计信息。

    更多信息,请见第17.8.10.1节,“配置持久优化器统计参数”

  • innodb_stats_persistent_sample_pages

    Command-Line Format --innodb-stats-persistent-sample-pages=#
    System Variable innodb_stats_persistent_sample_pages
    Scope Global
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 20
    Minimum Value 1
    Maximum Value 18446744073709551615

    当估算索引页面卡drodal和其他统计信息,例如由ANALYZE TABLE计算的索引列统计信息时,可以指定该值。增加该值可以提高索引统计信息的准确性,从而改善查询执行计划,但是在执行ANALYZE TABLE语句时增加了I/O操作的开销。对于更多信息,请见第17.8.10.1节,“persistent Optimizer Statistics Parameters”

    Note

    innodb_stats_persistent_sample_pages设置为高值可能会导致ANALYZE TABLE执行时间过长。要估算数据库页面被ANALYZE TABLE访问的数量,请见第17.8.10.3节,“Estimating ANALYZE TABLE Complexity for InnoDB Tables”

    innodb_stats_persistent_sample_pages 只在表的innodb_stats_persistent启用时生效;当innodb_stats_persistent禁用时,innodb_stats_transient_sample_pages生效。

  • innodb_stats_transient_sample_pages

    Command-Line Format --innodb-stats-transient-sample-pages=#
    System Variable innodb_stats_transient_sample_pages
    Scope Global
    Dynamic Yes
    SET_VAR Hint Applies No
    Type Integer
    Default Value 8
    Minimum Value 1
    Maximum Value 18446744073709551615

    当估算索引页面卡drodal和其他统计信息,例如由ANALYZE TABLE计算的索引列统计信息时,可以指定要采样多少个索引页面。默认值为8。增加该值可以提高索引统计信息的准确性,从而改善查询执行计划,但是在打开InnoDB表或重新计算统计信息时将增加I/O操作。更多信息,请见Section 17.8.10.2, “Configuring Non-Persistent Optimizer Statistics Parameters”

    Note

    innodb_stats_transient_sample_pages设置为高值可能会导致ANALYZE TABLE执行时间过长。要估算ANALYZE TABLE访问数据库页面的数量,请见Section 17.8.10.3, “Estimating ANALYZE TABLE Complexity for InnoDB Tables”

    innodb_stats_transient_sample_pages 只在表的innodb_stats_persistent被禁用时生效;当innodb_stats_persistent启用时,innodb_stats_persistent_sample_pages生效แทน。取代了在 MySQL 8.0 中删除的innodb_stats_sample_pages。更多信息,请见第17.8.10.2节,“Configuring Non-Persistent Optimizer Statistics Parameters”

  • innodb_status_output

    Command-Line Format --innodb-status-output[={OFF|ON}]
    System Variable innodb_status_output
    Scope Global
    Dynamic Yes
    SET_VAR Hint Applies No
    Type Boolean
    Default Value OFF

    启用或禁用标准 InnoDB 监控的周期性输出。也可以与innodb_status_output_locks 结合使用,以启用或禁用 InnoDB 锁监控的周期性输出。更多信息,请见第17.17.2节,“Enabling InnoDB Monitors”

  • innodb_status_output_locks

    Command-Line Format --innodb-status-output-locks[={OFF|ON}]
    System Variable innodb_status_output_locks
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 布尔值
    Default Value OFF

    启用或禁用 InnoDB 锁监控。当启用时,InnoDB 锁监控将在 SHOW ENGINE INNODB STATUS 输出和 MySQL 错误日志中的周期性输出中打印额外的锁定信息。InnoDB 锁监控的周期性输出将作为标准 InnoDB 监控输出的一部分打印到 MySQL 错误日志中。因此,必须启用标准 InnoDB 监控,以便 InnoDB 锁监控可以周期性地将数据打印到 MySQL 错误日志中。更多信息,请见第17.17.2节,“Enabling InnoDB Monitors”

  • innodb_strict_mode

    Command-Line Format --innodb-strict-mode[={OFF|ON}]
    System Variable innodb_strict_mode
    Scope Global, Session
    Dynamic Yes
    SET_VAR Hint Applies No
    Type Boolean
    Default Value ON

    innodb_strict_mode启用时,InnoDB在检查无效或不兼容的表选项时返回错误,而不是警告。

    它检查KEY_BLOCK_SIZE、ROW_FORMAT、DATA DIRECTORY、TEMPORARY和TABLESPACE选项是否相互兼容,并且与其他设置兼容。

    innodb_strict_mode=ON还启用了在创建或更改表时对行大小的检查,以防止INSERT或UPDATE操作因记录太大而失败,导致选择的页面大小无法存储该记录。

    您可以在启动 mysqld 时或在 MySQL 配置文件中启用或禁用innodb_strict_mode。您还可以使用语句SET [GLOBAL|SESSION] innodb_strict_mode=mode在运行时启用或禁用innodb_strict_mode,其中mode是 either ONOFF。更改GLOBAL设置需要具有足够的权限以设置全局系统变量(见第7.1.9.1节,“系统变量权限”),对所有连接的客户端产生影响。任何客户端都可以更改innodb_strict_modeSESSION设置,该设置仅对该客户端生效。

    设置会话值的系统变量是一个受限制的操作。会话用户必须具有足够的权限以设置受限制的会话变量。见第7.1.9.1节,“系统变量权限”

  • innodb_sync_array_size

    Command-Line Format --innodb-sync-array-size=#
    System Variable innodb_ sync_array_size
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 1
    Minimum Value 1
    Maximum Value 1024

    定义了互斥锁/锁等待数组的大小。增加值将拆分内部用于协调线程的数据结构,以提高工作负载中大量等待线程的并发性。这设置在 MySQL 实例启动时配置,不能在实例运行后更改。在生产环境中,通常需要根据实际情况进行调整。

  • innodb_sync_spin_loops

    Command-Line Format --innodb-sync-spin-loops=#
    System Variable innodb_sync_spin_loops
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 30
    Minimum Value 0
    Maximum Value 4294967295

    线程等待 InnoDB 互斥锁被释放的次数,超过这个次数后线程将被挂起。

  • innodb_sync_debug

    Command-Line Format --innodb-sync-debug[={OFF|ON}]
    System Variable innodb_sync_debug
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 布尔值
    Default Value OFF

    启用InnoDB存储引擎的同步调试检查。这选项仅在使用WITH_ DEBUGCMake选项编译debug支持时可用。

  • innodb_table_locks

    Command-Line Format --innodb-table-locks[={OFF|ON}]
    System Variable innodb_table_locks
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 布尔值
    Default Value ON

    如果autocommit = 0InnoDB会尊重LOCK TABLES;MySQL直到所有其他线程释放了对该表的所有锁定后才会返回LOCK TABLES ... WRITEinnodb_表锁定的默认值是1,这意味着LOCK TABLES会导致InnoDB对该表进行内部锁定,如果autocommit = 0

    innodb_表锁定 = 0对使用LOCK TABLES ... WRITE显式锁定的表无效。但是,对于通过触发器或LOCK TABLES ... READ隐式锁定的表,它将生效。

    有关相关信息,请参见第17.7节,“InnoDB Locking and Transaction Model”

  • innodb_ temp_数据文件路径

    Command-Line Format --innodb-temp-数据文件路径=file_name
    System Variable innodb_temp_数据文件路径
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 字符串
    Default Value ibtmp1:12M:autoextend

    定义了全局临时表空间数据文件的相对路径、名称、大小和属性。全局临时表空间存储用户创建的临时表的回滚段。

    如果未指定innodb_temp_数据文件路径的值,缺省行为是创建一个名为ibtmp1的自动扩展数据文件,在innodb_data_home_dir目录下。初始文件大小略大于12MB。

    全局临时表空间数据文件的语法包括文件名、文件大小和autoextendmax属性:

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

    全局临时表空间数据文件不能与其他InnoDB数据文件具有相同的名称。创建全局临时表空间数据文件失败或错误将被视为致命错误,服务器启动将被拒绝。

    文件大小以KB、MB或GB形式指定,通过在大小值后添加KMG来实现。文件大小之和必须略大于12MB。

    操作系统确定单个文件的大小限制。在支持大文件的操作系统上,文件大小可以超过4GB。对全局临时表空间数据文件使用原始磁盘分区不受支持。

    只能在innodb_temp_data_file_path设置中指定的最后一个数据文件上使用autoextendmax属性。例如:

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

    autoextend选项用于自动增加数据文件大小,当它运行出自由空间时。默认情况下,autoextend增量为64MB。要修改增量,请更改innodb_autoextend_increment变量设置。

    全局临时表空间数据文件目录路径由innodb_data_home_dirinnodb_temp_data_file_path定义的路径组成。

    在读取模式下运行InnoDB之前,请将innodb_temp_data_file_path设置为数据目录外的位置。路径必须相对于数据目录。例如:

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

    更多信息,请见全局临时表空间

  • innodb_temp_tablespaces_dir

    Command-Line Format --innodb-temp-tablespaces-dir=dir_name
    System Variable innodb_temp_tablespaces_dir
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 目录名称
    Default Value #innodb_temp

    定义了 InnoDB 在启动时创建会话临时表空间池的位置。默认位置是数据目录中的 #innodb_temp 目录。可以使用完全限定路径或相对数据目录的路径。

    会话临时表空间总是存储用户创建的临时表和优化器使用 InnoDB 创建的内部临时表。 (之前,内部临时表的磁盘存储引擎由internal_tmp_disk_storage_engine 系统变量确定,已经不再支持。请见磁盘内部临时表存储引擎。)

    更多信息,请见会话临时表空间

  • innodb_thread_concurrency

    Command-Line Format --innodb-thread-concurrency=#
    System Variable innodb_thread_concurrency
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 0
    Minimum Value 0
    Maximum Value 1000

    定义了在InnoDB内部允许的最大线程数。值为0(默认)被解释为无限并发(没有限制)。该变量旨在对高并发系统进行性能调整。

    InnoDB尝试将InnoDB内部的线程数保持在或以下于innodb_thread_concurrency限制内。等待锁定的线程不计入正在执行的线程数量。

    正确的设置取决于工作负载和计算环境。考虑将该变量设置为您的 MySQL 实例共享 CPU 资源或工作负载或并发用户数量增长。如果您想要确定提供最佳性能的设置,可以测试一系列值。innodb_thread_concurrency 是一个动态变量,可以在实时测试系统上实验不同的设置。如果某个设置性能不佳,您可以快速将innodb_thread_concurrency 设置回 0。

    以下指南可以帮助您找到和维护合适的设置:

    • 如果工作负载的并发用户线程数量始终小且不影响性能,请将innodb_thread_concurrency=0(无限制)。

    • 如果您的工作负载始终很重或偶尔会突然增加,请设置一个innodb_thread_concurrency值,并调整它直到您找到提供最佳性能的线程数量。例如,假设您的系统通常有 40 到 50 个用户,但时期性地增加到 60、70 或更多。通过测试,您发现性能保持稳定状态直到并发用户数量达到 80。因此,请将innodb_thread_concurrency 设置为 80。

    • 如果您不想InnoDB为用户线程使用超过一定数量的虚拟CPU(例如20个虚拟CPU),请将innodb_thread_concurrency设置为这个数字(或可能更低,取决于性能测试)。如果您的目标是隔离MySQL其他应用程序,可以将mysqld进程绑定到虚拟CPU上。但请注意,独占绑定可能会导致非最佳硬件使用,如果mysqld进程不总是忙碌。在这种情况下,您可以将mysqld进程绑定到虚拟CPU上,但允许其他应用程序使用一些或所有虚拟CPU。

      Note

      从操作系统角度来看,使用资源管理解决方案来管理CPU时间的分配可能比绑定mysqld进程更好。例如,您可以将90%的虚拟CPU时间分配给某个应用程序,而在其他关键进程不运行时缩小该值到40%,当其他关键进程运行时恢复该值。

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

    • 如果innodb_thread_concurrency值太高,可以导致性能下降,因为系统内部和资源的竞争增加。

    • 定期监控和分析系统。工作负载、用户数量或计算环境的变化可能需要调整innodb_thread_concurrency设置。

    值为0将禁用queries inside InnoDBqueries in queue 计数器在SHOW ENGINE INNODB STATUS输出的ROW OPERATIONS部分。

    相关信息,请参见第17.8.4节,“InnoDB线程并发配置”

  • innodb_thread_sleep_delay

    Command-Line Format --innodb-thread-sleep-delay=#
    System Variable innodb_thread_sleep_delay
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 10000
    Minimum Value 0
    Maximum Value 1000000
    Unit 微秒

    InnoDB线程睡眠前在队列中等待的时间,单位微秒。默认值为10000。值为0将禁用睡眠。你可以将innodb_adaptive_max_sleep_delay设置为你允许的最高值,并将innodb_thread_sleep_delay自动调整,以便在系统轻载或近满负荷时使线程调度机制工作顺滑。

    更多信息,请见第17.8.4节,“InnoDB线程并发配置”

  • innodb_tmpdir

    Command-Line Format --innodb-tmpdir=dir_name
    System Variable innodb_tmpdir
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 目录名称
    Default Value NULL

    用于定义在线ALTER TABLE操作重建表时创建的临时排序文件的Alternate目录。

    在线ALTER TABLE操作重建表时,也会在原始表目录中创建一个临时表文件。innodb_ tmpdir选项不适用于临时表文件。

    有效的值是 MySQL 数据目录路径以外的任何目录路径。如果值为 NULL(默认),临时文件将被创建在 MySQL 临时目录 ($TMPDIR 在 Unix 上,%TEMP% 在 Windows 上,或者由 --tmpdir 配置选项指定的目录)。如果指定了目录,目录存在性和权限只在使用 innodb_ tmpdir 配置语句时进行检查。如果提供了符号链接在目录字符串中,符号链接将被解析并存储为绝对路径。路径不应超过 512 字节。在线 ALTER TABLE 操作如果 innodb_ tmpdir 设置为无效目录,将报告错误。innodb_ tmpdir 将覆盖 MySQL tmpdir 设置,但仅限于在线 ALTER TABLE 操作。

    配置 innodb_ tmpdir 需要 FILE 特权权限。

    引入了innodb_tmpdir选项,以避免在 tmpfs 文件系统上的临时文件目录溢出。这种溢出可能是由于在线ALTER TABLE操作创建了大量临时排序文件的结果。

    在复制环境中,只有在所有服务器具有相同的操作系统环境时,才考虑复制innodb_tmpdir设置。否则,复制innodb_tmpdir设置可能会导致在线ALTER TABLE操作失败。如果服务器操作环境不同,建议在每个服务器上单独配置innodb_tmpdir

    更多信息,请见第17.12.3节,“在线DDL空间要求”。关于在线ALTER TABLE操作,请见第17.12节,“InnoDB和在线DDL”

  • innodb_trx_purge_view_update_only_debug

    Command-Line Format --innodb-trx-purge-view-update-only-debug[={OFF|ON}]
    System Variable innodb_trx_purge_view_update_only_debug
    Scope Global
    Dynamic
    SET_VAR Hint Applies
    Type 布尔值
    Default Value OFF

    暂停删除标记记录的 purging,允许 purge 视图被更新。这选项人为地创建了 purge 视图可以被更新,但purges还没有执行的情况。这选项仅在使用 WITH_DEBUG CMake 选项编译 debugging 支持时可用。

  • innodb_trx_rseg_n_slots_debug

    Command-Line Format --innodb-trx-rseg-n-slots-debug=#
    System Variable innodb_trx_rseg_n_slots_debug
    Scope Global
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 0
    Minimum Value 0
    Maximum Value 1024

    设置一个调试标志,限制TRX_ RSEG_N_SLOTS的值为给定的值,以便在trx_rsegf_undo_find_free函数中查找undo日志段中的空槽。这选项仅在使用WITH_DEBUGCMake选项编译debug支持时可用。

  • innodb_undo_directory

    Command-Line Format --innodb-undo-directory=dir_name
    System Variable innodb_undo_directory
    Scope Global
    Dynamic No
    SET_VAR Hint Applies No
    Type Directory name

    InnoDB 创建undo表空间的路径。通常用于将undo表空间置于不同的存储设备上。

    没有默认值(它是NULL)。如果innodb_undo_directory变量未定义,undo表空间将在数据目录中创建。

    MySQL实例初始化时创建的默认undo表空间(innodb_undo_001innodb_undo_002)总是位于定义innodb_undo_directory变量的目录中。

    使用CREATE UNDO TABLESPACE语法创建的undo tablespaces将在由innodb_undo_目录变量定义的目录中创建,如果没有指定不同的路径。

    更多信息,请见第17.6.3.4节,“Undo Tablespaces”

  • innodb_undo_log_encrypt

    Command-Line Format --innodb-undo-log-encrypt[={OFF|ON}]
    System Variable innodb_undo_log_encrypt
    Scope Global
    Dynamic Yes
    SET_VAR Hint Applies No
    Type Boolean
    Default Value OFF

    控制使用InnoDB数据在休眠状态加密特性对undo日志数据进行加密。仅适用于存储在单独的undo tablespaces中的undo日志数据。见第17.6.3.4节,“Undo Tablespaces”。对系统表空间中的undo日志数据不支持加密。更多信息,请见Undo Log Encryption

  • innodb_undo_log_truncate

    Command-Line Format --innodb-undo-log-truncate[={OFF|ON}]
    System Variable innodb_undo_log_truncate
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 布尔值
    Default Value ON

    启用时,undo 表空间超过由innodb_max_undo_log_size定义的阈值将被标记为截断。只能截断 undo 表空间,不支持截断系统表空间中的undo日志。为了截断,至少需要有两个undo 表空间。

    可以使用innodb_purge_rseg_truncate_frequency变量来加速截断undo 表空间。

    更多信息,请见截断Undo表空间

  • innodb_undo_tablespaces

    Command-Line Format --innodb-undo-tablespaces=#
    Deprecated
    System Variable innodb_undo_tablespaces
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 2
    Minimum Value 2
    Maximum Value 127

    定义了undo 表空间的数量,用于InnoDB。默认值和最小值为 2。

    Note

    innodb_undo_表空间变量已弃用;设置它无效。你应该预期在未来 MySQL 发布中将其删除。

    更多信息,请见第17.6.3.4节,“Undo 表空间”

  • innodb_用_fdatasync

    Command-Line Format --innodb-用-fdatasync[={OFF|ON}]
    System Variable innodb_用_fdatasync
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 布尔值
    Default Value ON

    在支持fdatasync()系统调用平台上,启用innodb_用_fdatasync允许使用fdatasync()而不是fsync()系统调用来执行操作系统刷新。一个fdatasync()调用不会将更改写入文件元数据,除非在后续数据检索时需要提供潜在的性能优势。

    innodb_flush_method 设置的子集,如fsyncO_DSYNCO_DIRECT,使用fsync()系统调用。变量innodb_use_fdatasync适用于使用这些设置时。

    在MySQL 8.4之前,这个选项默认禁用。

  • innodb_use_native_aio

    Command-Line Format --innodb-use-native-aio[={OFF|ON}]
    System Variable innodb_use_native_aio
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 布尔值
    Default Value ON

    指定是否使用异步I/O子系统。这变量不能在服务器运行时更改。通常,您不需要配置这个选项,因为它默认启用。

    这特性可以提高高度I/O绑定的系统的可扩展性,这些系统通常在SHOW ENGINE INNODB STATUS输出中显示许多pending reads/writes。

    使用大量InnoDB I/O线程,并且特别是在同一服务器机器上运行多个这样的实例,可以超出Linux系统的容量限制。在这种情况下,您可能会收到以下错误:

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

    通常可以通过将/proc/sys/fs/aio-max-nr的限制值设置更高来解决这个错误。

    然而,如果操作系统中的异步I/O子系统问题阻止了InnoDB启动,您可以使用innodb_use_native_aio=0来启动服务器。这选项也可能在启动时自动禁用,如果InnoDB检测到潜在的问题,例如tmpdir位置、tmpfs文件系统和Linux内核不支持AIO的tmpfs组合。

    更多信息,请见第17.8.6节,“使用 Linux 上的异步 I/O”

  • innodb_validate_tablespace_paths

    Command-Line Format --innodb-validate-tablespace-paths[={OFF|ON}]
    System Variable innodb_validate_tablespace_paths
    Scope Global
    Dynamic No
    SET_VAR Hint Applies No
    Type Boolean
    Default Value ON

    控制表空间文件路径验证。在启动时,InnoDB 将已知的表空间文件路径与数据字典中存储的表空间文件路径进行比较,以便在表空间文件被移动到不同的位置时验证。变量innodb_validate_tablespace_paths 允许禁用表空间路径验证。这一特性旨在为环境提供,环境中不需要移动表空间文件。禁用路径验证可以提高系统启动时间,但是在系统中有大量表空间文件时。

    Warning

    在启用了表空间路径验证的服务器上移动表空间文件可能会导致未定义的行为。

    更多信息,请见第17.6.3.7节,“Disabling Tablespace Path Validation”

  • innodb_version

    InnoDB 版本号。这是一个遗留变量,值与 MySQL 服务器version相同。

  • innodb_write_io_threads

    Command-Line Format --innodb-write-io-threads=#
    System Variable innodb_write_io_threads
    Scope Global
    Dynamic No
    SET_VAR Hint Applies No
    Type Integer
    Default Value 4
    Minimum Value 1
    Maximum Value 64

    InnoDB 写操作的I/O线程数量。默认值为4。与之对应的读线程数量是innodb_read_io_threads。更多信息,请参见第17.8.5节,“配置背景InnoDB I/O线程数量”。对于一般I/O调整建议,请参见第10.5.8节,“优化InnoDB磁盘I/O”

    Note

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

    同时,考虑sync_binlog的值,该变量控制二进制日志与磁盘同步。

    对于一般I/O调整建议,请参见第10.5.8节,“优化InnoDB磁盘I/O”