【基础原理】MySQL 数据库 InnoDB 启动选项和系统变量

表 15.24 InnoDB 选项和变量参考

变量名称 命令行 选项文件 系统变量 状态变量 变量范围 动态的
daemon_memcached_enable_binlog 是的 是的 是的 全局的
daemon_memcached_engine_lib_name 是的 是的 是的 全局的
daemon_memcached_engine_lib_path 是的 是的 是的 全局的
daemon_memcached_option 是的 是的 是的 全局的
daemon_memcached_r_batch_size 是的 是的 是的 全局的
daemon_memcached_w_batch_size 是的 是的 是的 全局的
foreign_key_checks 是的 两个都 是的
innodb 是的 是的
innodb_adaptive_flushing 是的 是的 是的 全局的 是的
innodb_adaptive_flushing_lwm 是的 是的 是的 全局的 是的
innodb_adaptive_hash_index 是的 是的 是的 全局的 是的
innodb_adaptive_hash_index_parts 是的 是的 是的 全局的
innodb_adaptive_max_sleep_delay 是的 是的 是的 全局的 是的
innodb_api_bk_commit_interval 是的 是的 是的 全局的 是的
innodb_api_disable_rowlock 是的 是的 是的 全局的
innodb_api_enable_binlog 是的 是的 是的 全局的
innodb_api_enable_mdl 是的 是的 是的 全局的
innodb_api_trx_level 是的 是的 是的 全局的 是的
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_enabled 是的 全局的
innodb_redo_log_encrypt 是的 是的 是的 全局的 是的
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 状态文件 是的 是的
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_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 命令选项

  • --innodb[=*value*\]
    命令行格式 --innodb[=value]
    已弃用 是的
    类型 枚举
    默认值 ON
    有效值 OFF``ON``FORCE

    如果服务器是在支持InnoDB下编译的,则 控制存储引擎的加载。InnoDB此选项具有三态格式,可能值为OFFONFORCE。请参阅 第 5.6.1 节,“安装和卸载插件”

    要禁用InnoDB,请使用 --innodb=OFF--skip-innodb。在这种情况下,因为默认存储引擎是 ,除非您还使用和 将默认存储引擎设置为永久和表 的其他引擎, InnoDB否则服务器不会启动 。--default-storage-engine--default-tmp-storage-engineTEMPORARY

    InnoDB存储引擎不能再被禁用, and--innodb=OFF 选项 --skip-innodb 已被弃用且无效。它们的使用会导致警告。期望在未来的 MySQL 版本中删除这些选项。

  • --innodb-status-file
    命令行格式 --innodb-status-file[={OFF|ON}]
    类型 布尔值
    默认值 OFF

    --innodb-status-file启动选项控制是否 在数据目录中 InnoDB创建一个名为的文件 ,并大约每 15 秒将输出写入它。 innodb_status.*pid*SHOW ENGINE INNODB STATUS

    默认情况下不创建 该 文件。要创建它, 请使用该 选项 启动mysqld 。当服务器正常关闭时删除文件。如果出现异常关机,可能需要手动删除状态文件。 innodb_status.*pid*``--innodb-status-file``InnoDB

    --innodb-status-file选项仅供临时使用,因为 SHOW ENGINE INNODB STATUS输出生成会影响性能,并且 文件会随着时间的推移变得非常大。 innodb_status.*pid*

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

  • --skip-innodb

    禁用InnoDB存储引擎。参见 的描述--innodb

InnoDB 系统变量

  • daemon_memcached_enable_binlog
    命令行格式 --daemon-memcached-enable-binlog[={OFF|ON}]
    系统变量 daemon_memcached_enable_binlog
    范围 全局的
    动态的
    SET_VAR提示适用
    类型 布尔值
    默认值 OFF

    在源服务器上启用此选项以将 InnoDB memcached插件 ( daemon_memcached) 与 MySQL 二进制日志一起使用。此选项只能在服务器启动时设置。--log-bin您还必须使用该选项 在源服务器上启用 MySQL 二进制日志 。

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

  • daemon_memcached_engine_lib_name
    命令行格式 --daemon-memcached-engine-lib-name=file_name
    系统变量 daemon_memcached_engine_lib_name
    范围 全局的
    动态的
    SET_VAR提示适用
    类型 文件名
    默认值 innodb_engine.so

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

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

  • daemon_memcached_engine_lib_path
    命令行格式 --daemon-memcached-engine-lib-path=dir_name
    系统变量 daemon_memcached_engine_lib_path
    范围 全局的
    动态的
    SET_VAR提示适用
    类型 目录名称
    默认值 NULL

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

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

  • daemon_memcached_option
    命令行格式 --daemon-memcached-option=options
    系统变量 daemon_memcached_option
    范围 全局的
    动态的
    SET_VAR提示适用
    类型 细绳
    默认值

    用于在启动时将空格分隔的 memcached 选项传递给底层的memcached内存对象缓存守护进程。例如,您可以更改 memcached侦听的端口、减少最大同时连接数、更改键值对的最大内存大小或启用错误日志的调试消息。

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

  • daemon_memcached_r_batch_size
    命令行格式 --daemon-memcached-r-batch-size=#
    系统变量 daemon_memcached_r_batch_size
    范围 全局的
    动态的
    SET_VAR提示适用
    类型 整数
    默认值 1
    最小值 1
    最大值 1073741824

    指定在执行 a以启动新事务之前要执行 多少个memcached读取操作(操作)。的对应方 。 getCOMMITdaemon_memcached_w_batch_size

    该值默认设置为 1,因此通过 SQL 语句对表所做的任何更改都对 memcached操作立即可见。您可能会增加它以减少在仅通过 memcached接口访问基础表的系统上频繁提交的开销。如果您将值设置得太大,撤消或重做数据的数量可能会产生一些存储开销,就像任何长时间运行的事务一样。

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

  • daemon_memcached_w_batch_size
    命令行格式 --daemon-memcached-w-batch-size=#
    系统变量 daemon_memcached_w_batch_size
    范围 全局的
    动态的
    SET_VAR提示适用
    类型 整数
    默认值 1
    最小值 1
    最大值 1048576

    指定在执行 a以启动新事务之前要执行 多少个memcached写操作,例如addset和。的对应方 。 incrCOMMITdaemon_memcached_r_batch_size

    默认情况下,此值设置为 1,假设存储的数据对于在中断时保留很重要并且应立即提交。存储非关键数据时,您可能会增加此值以减少频繁提交的开销;*N*但是如果发生意外退出 ,最后一个 -1 未提交的写操作可能会丢失。

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

  • innodb_adaptive_flushing
    命令行格式 --innodb-adaptive-flushing[={OFF|ON}]
    系统变量 innodb_adaptive_flushing
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 布尔值
    默认值 ON

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

  • innodb_adaptive_flushing_lwm
    命令行格式 --innodb-adaptive-flushing-lwm=#
    系统变量 innodb_adaptive_flushing_lwm
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 10
    最小值 0
    最大值 70

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

  • innodb_adaptive_hash_index
    命令行格式 --innodb-adaptive-hash-index[={OFF|ON}]
    系统变量 innodb_adaptive_hash_index
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 布尔值
    默认值 ON

    InnoDB 自适应哈希索引是启用还是禁用 。根据您的工作负载,可能需要动态启用或禁用 自适应哈希索引以提高查询性能。由于自适应哈希索引可能并非对所有工作负载都有用,因此请使用实际工作负载在启用和禁用它的情况下进行基准测试。有关详细信息,请参阅 第 15.5.3 节,“自适应哈希索引”

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

    禁用自适应哈希索引会立即清空哈希表。当哈希表被清空时,正常操作可以继续,并且执行使用哈希表的查询直接访问索引 B 树。当自适应哈希索引重新启用时,哈希表会在正常操作期间再次填充。

  • innodb_adaptive_hash_index_parts
    命令行格式 --innodb-adaptive-hash-index-parts=#
    系统变量 innodb_adaptive_hash_index_parts
    范围 全局的
    动态的
    SET_VAR提示适用
    类型 数字
    默认值 8
    最小值 1
    最大值 512

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

    自适应哈希索引搜索系统默认分为 8 个部分。最大设置为 512。

    有关相关信息,请参阅 第 15.5.3 节,“自适应哈希索引”

  • innodb_adaptive_max_sleep_delay
    命令行格式 --innodb-adaptive-max-sleep-delay=#
    系统变量 innodb_adaptive_max_sleep_delay
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 150000
    最小值 0
    最大值 1000000
    单元 微秒

    允许根据当前工作量InnoDB自动调整 up 或 down 的值 。innodb_thread_sleep_delay任何非零值都可以自动、动态地调整 innodb_thread_sleep_delay 值,直至选项中指定的最大值 innodb_adaptive_max_sleep_delay 。该值表示微秒数。InnoDB此选项在线程数超过 16 的繁忙系统中很有用 。(实际上,它对于具有成百上千个同时连接的 MySQL 系统最有价值。)

    有关更多信息,请参阅 第 15.8.4 节,“为 InnoDB 配置线程并发”

  • innodb_api_bk_commit_interval
    命令行格式 --innodb-api-bk-commit-interval=#
    系统变量 innodb_api_bk_commit_interval
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 5
    最小值 1
    最大值 1073741824
    单元

    以秒 为单位自动提交使用 InnoDB **memcached接口的空闲连接的频率。**有关更多信息,请参阅 第 15.20.6.4 节,“控制 InnoDB memcached 插件的事务行为”

  • innodb_api_disable_rowlock
    命令行格式 --innodb-api-disable-rowlock[={OFF|ON}]
    系统变量 innodb_api_disable_rowlock
    范围 全局的
    动态的
    SET_VAR提示适用
    类型 布尔值
    默认值 OFF

    InnoDB 当memcached 执行 DML 操作 时,使用此选项禁用行锁 。默认情况下, innodb_api_disable_rowlock禁用,这意味着memcachedget为和 set操作 请求行锁。innodb_api_disable_rowlock启用后,memcached 会请求 锁而不是行锁。

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

    有关更多信息,请参阅 第 15.20.6.4 节,“控制 InnoDB memcached 插件的事务行为”

  • innodb_api_enable_binlog
    命令行格式 --innodb-api-enable-binlog[={OFF|ON}]
    系统变量 innodb_api_enable_binlog
    范围 全局的
    动态的
    SET_VAR提示适用
    类型 布尔值
    默认值 OFF

    允许您将InnoDB memcached插件与 MySQL 二进制日志一起使用。有关更多信息,请参阅 启用 InnoDB memcached 二进制日志

  • innodb_api_enable_mdl
    命令行格式 --innodb-api-enable-mdl[={OFF|ON}]
    系统变量 innodb_api_enable_mdl
    范围 全局的
    动态的
    SET_VAR提示适用
    类型 布尔值
    默认值 OFF

    InnoDB 锁定memcached插件 使用的表,使其不能被DDL 通过 SQL 接口删除或更改。有关更多信息,请参阅 第 15.20.6.4 节,“控制 InnoDB memcached 插件的事务行为”

  • innodb_api_trx_level
    命令行格式 --innodb-api-trx-level=#
    系统变量 innodb_api_trx_level
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 0
    最小值 0
    最大值 3

    控制由memcached 接口处理的查询 的事务 隔离级别。熟悉的名字对应的常量有:

    有关更多信息,请参阅 第 15.20.6.4 节,“控制 InnoDB memcached 插件的事务行为”

  • innodb_autoextend_increment
    命令行格式 --innodb-autoextend-increment=#
    系统变量 innodb_autoextend_increment
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 64
    最小值 1
    最大值 1000
    单元 兆字节

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

    innodb_autoextend_increment 设置不影响 file-per-table 表 空间文件或 一般表空间文件。无论设置如何,这些文件都会自动扩展 innodb_autoextend_increment 。初始扩展是少量的,之后扩展以 4MB 为增量。

  • innodb_autoinc_lock_mode
    命令行格式 --innodb-autoinc-lock-mode=#
    系统变量 innodb_autoinc_lock_mode
    范围 全局的
    动态的
    SET_VAR提示适用
    类型 整数
    默认值 2
    有效值 0``1``2

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

    从 MySQL 8.0 开始,默认设置为 2(交错),在此之前为 1(连续)。将交错锁模式更改为默认设置反映了从基于语句的复制到基于行的复制作为默认复制类型的更改,这发生在 MySQL 5.7 中。基于语句的复制需要连续的自增锁模式,以确保给定的SQL语句序列以可预测和可重复的顺序分配自增值,而基于行的复制对SQL语句的执行顺序不敏感.

    有关每种锁定模式的特征,请参阅 InnoDB AUTO_INCREMENT 锁定模式

  • innodb_background_drop_list_empty
    命令行格式 --innodb-background-drop-list-empty[={OFF|ON}]
    系统变量 innodb_background_drop_list_empty
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 布尔值
    默认值 OFF

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

  • innodb_buffer_pool_chunk_size
    命令行格式 --innodb-buffer-pool-chunk-size=#
    系统变量 innodb_buffer_pool_chunk_size
    范围 全局的
    动态的
    SET_VAR提示适用
    类型 整数
    默认值 134217728
    最小值 1048576
    最大值 innodb_buffer_pool_size / innodb_buffer_pool_instances
    单元 字节

    innodb_buffer_pool_chunk_size 定义InnoDB缓冲池大小调整操作的块大小。

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

    innodb_buffer_pool_chunk_size 更改值 时适用以下条件 :

    重要的

    更改时应小心 innodb_buffer_pool_chunk_size,因为更改此值会自动增加缓冲池的大小。在更改之前 innodb_buffer_pool_chunk_size,计算其影响 innodb_buffer_pool_size以确保生成的缓冲池大小是可接受的。

    为避免潜在的性能问题,块 ( innodb_buffer_pool_size/ innodb_buffer_pool_chunk_size) 的数量不应超过 1000。

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

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

  • innodb_buffer_pool_debug
    命令行格式 --innodb-buffer-pool-debug[={OFF|ON}]
    系统变量 innodb_buffer_pool_debug
    范围 全局的
    动态的
    SET_VAR提示适用
    类型 布尔值
    默认值 OFF

    当缓冲池大小小于 1GB 时,启用此选项允许多个缓冲池实例,忽略强加于 innodb_buffer_pool_instances. 该innodb_buffer_pool_debug 选项仅在使用CMake选项编译调试支持时可用。 WITH_DEBUG

  • innodb_buffer_pool_dump_at_shutdown
    命令行格式 --innodb-buffer-pool-dump-at-shutdown[={OFF|ON}]
    系统变量 innodb_buffer_pool_dump_at_shutdown
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 布尔值
    默认值 ON

    指定是否在 MySQL 服务器关闭时 记录缓存在 InnoDB 缓冲池中的页面,以缩短下次重启时的预热过程。通常与 结合使用 innodb_buffer_pool_load_at_startup。该 innodb_buffer_pool_dump_pct 选项定义要转储的最近使用的缓冲池页面的百分比。

    两者 innodb_buffer_pool_dump_at_shutdowninnodb_buffer_pool_load_at_startup 默认启用。

    有关更多信息,请参阅 第 15.8.3.6 节,“保存和恢复缓冲池状态”

  • innodb_buffer_pool_dump_now
    命令行格式 --innodb-buffer-pool-dump-now[={OFF|ON}]
    系统变量 innodb_buffer_pool_dump_now
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 布尔值
    默认值 OFF

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

    有关更多信息,请参阅 第 15.8.3.6 节,“保存和恢复缓冲池状态”

  • innodb_buffer_pool_dump_pct
    命令行格式 --innodb-buffer-pool-dump-pct=#
    系统变量 innodb_buffer_pool_dump_pct
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 25
    最小值 1
    最大值 100

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

  • innodb_buffer_pool_filename
    命令行格式 --innodb-buffer-pool-filename=file_name
    系统变量 innodb_buffer_pool_filename
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 文件名
    默认值 ib_buffer_pool

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

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

    'file_name';

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

    有关更多信息,请参阅 第 15.8.3.6 节,“保存和恢复缓冲池状态”

  • innodb_buffer_pool_in_core_file
    命令行格式 --innodb-buffer-pool-in-core-file[={OFF|ON}]
    介绍 8.0.14
    系统变量 innodb_buffer_pool_in_core_file
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 布尔值
    默认值 ON

    禁用该 变量会通过排除缓冲池页面innodb_buffer_pool_in_core_file 来减小核心文件的大小 。InnoDB要使用此变量,core_file 必须启用该变量,并且操作系统必须支持MADV_DONTDUMP非 POSIX 扩展 madvise(),Linux 3.4 及更高版本支持该扩展。有关更多信息,请参阅 第 15.8.3.7 节,“从核心文件中排除缓冲池页面”

  • innodb_buffer_pool_instances
    命令行格式 --innodb-buffer-pool-instances=#
    系统变量 innodb_buffer_pool_instances
    范围 全局的
    动态的
    SET_VAR提示适用
    类型 整数
    默认值(Windows、32 位平台) (autosized)
    默认值(其他) 8 (or 1 if innodb_buffer_pool_size < 1GB)
    最小值 1
    最大值 64

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

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

    32 位 Windows 系统上的默认值取决于 的值 innodb_buffer_pool_size,如下所述:

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

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

  • innodb_buffer_pool_load_abort
    命令行格式 --innodb-buffer-pool-load-abort[={OFF|ON}]
    系统变量 innodb_buffer_pool_load_abort
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 布尔值
    默认值 OFF

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

    有关更多信息,请参阅 第 15.8.3.6 节,“保存和恢复缓冲池状态”

  • innodb_buffer_pool_load_at_startup
    命令行格式 --innodb-buffer-pool-load-at-startup[={OFF|ON}]
    系统变量 innodb_buffer_pool_load_at_startup
    范围 全局的
    动态的
    SET_VAR提示适用
    类型 布尔值
    默认值 ON

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

    两者 innodb_buffer_pool_dump_at_shutdowninnodb_buffer_pool_load_at_startup 默认启用。

    有关更多信息,请参阅 第 15.8.3.6 节,“保存和恢复缓冲池状态”

  • innodb_buffer_pool_load_now
    命令行格式 --innodb-buffer-pool-load-now[={OFF|ON}]
    系统变量 innodb_buffer_pool_load_now
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 布尔值
    默认值 OFF

    通过 加载一组数据页面 立即预热InnoDB 缓冲池,无需等待服务器重新启动。在基准测试期间将缓存内存恢复到已知状态或在运行查询以进行报告或维护后准备好 MySQL 服务器以恢复其正常工作负载可能很有用。

    有关更多信息,请参阅 第 15.8.3.6 节,“保存和恢复缓冲池状态”

  • innodb_buffer_pool_size
    命令行格式 --innodb-buffer-pool-size=#
    系统变量 innodb_buffer_pool_size
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 134217728
    最小值 5242880
    最大值(64 位平台) 2**64-1
    最大值(32 位平台) 2**32-1
    单元 字节

    缓冲池 的大小(以字节为单位) ,InnoDB缓存表和索引数据的内存区域。默认值为 134217728 字节 (128MB)。最大值取决于 CPU 架构;在 32 位系统上最大值为 4294967295 (2 32 -1),在 64 位系统上最大值为 18446744073709551615 (2 64 -1)。在 32 位系统上,CPU 体系结构和操作系统可能会施加比规定的最大值更低的实际最大大小。当缓冲池的大小大于 1GB 时,设置 innodb_buffer_pool_instances 为大于 1 的值可以提高繁忙服务器上的可伸缩性。

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

    • 物理内存的竞争可能导致操作系统中的分页。
    • InnoDB为缓冲区和控制结构保留额外的内存,因此分配的总空间大约比指定的缓冲池大小大 10%。
    • 缓冲池的地址空间必须是连续的,这在具有在特定地址加载的 DLL 的 Windows 系统上可能是一个问题。
    • 初始化缓冲池的时间大致与其大小成正比。在具有大型缓冲池的实例上,初始化时间可能很长。为了减少初始化时间,您可以在服务器关闭时保存缓冲池状态并在服务器启动时恢复它。请参阅第 15.8.3.6 节,“保存和恢复缓冲池状态”

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

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

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

    如果innodb_dedicated_server启用,则 innodb_buffer_pool_size如果未明确定义,则会自动配置该值。有关更多信息,请参阅 第 15.8.12 节,“为专用 MySQL 服务器启用自动配置”

  • innodb_change_buffer_max_size
    命令行格式 --innodb-change-buffer-max-size=#
    系统变量 innodb_change_buffer_max_size
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 25
    最小值 0
    最大值 50

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

  • innodb_change_buffering
    命令行格式 --innodb-change-buffering=value
    系统变量 innodb_change_buffering
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 枚举
    默认值 all
    有效值 none``inserts``deletes``changes``purges``all

    是否InnoDB执行 change buffering,一种延迟写入操作到二级索引的优化,以便 I/O 操作可以按顺序执行。下表描述了允许的值。值也可以用数字指定。

    表 15.25 innodb_change_buffering 的允许值

    价值 数值 描述
    none 0 不要缓冲任何操作。
    inserts 1 缓冲区插入操作。
    deletes 2 缓冲区删除标记操作;严格来说,在清除操作期间标记索引记录以供以后删除的写入。
    changes 3 缓冲区插入和删除标记操作。
    purges 4 缓冲后台发生的物理删除操作。
    all 5 默认。缓冲区插入、删除标记操作和清除。

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

  • innodb_change_buffering_debug
    命令行格式 --innodb-change-buffering-debug=#
    系统变量 innodb_change_buffering_debug
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 0
    最小值 0
    最大值 2

    InnoDB为更改缓冲 设置调试标志。值 1 强制对更改缓冲区进行所有更改。值 2 会导致合并时意外退出。默认值 0 表示未设置更改缓冲调试标志。此选项仅在使用 CMake选项编译调试支持时可用。 WITH_DEBUG

  • innodb_checkpoint_disabled
    命令行格式 --innodb-checkpoint-disabled[={OFF|ON}]
    系统变量 innodb_checkpoint_disabled
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 布尔值
    默认值 OFF

    这是一个调试选项,仅供专家调试使用。它禁用检查点,以便故意退出服务器始终启动InnoDB 恢复。它应该只在很短的时间间隔内启用,通常在运行 DML 操作之前,这些操作写入需要在服务器退出后恢复的重做日志条目。仅当使用CMake选项编译调试支持时,此选项才可用。 WITH_DEBUG

  • innodb_checksum_algorithm
    命令行格式 --innodb-checksum-algorithm=value
    系统变量 innodb_checksum_algorithm
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 枚举
    默认值 crc32
    有效值 crc32``strict_crc32``innodb``strict_innodb``none``strict_none

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

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

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

    如果在表空间中遇到有效但不匹配的校验和值,则校验和算法的严格形式会报告错误。建议您仅在新实例中使用严格设置,以便首次设置表空间。严格设置稍微快一些,因为它们不需要在磁盘读取期间计算所有校验和值。

    none下表显示了、innodbcrc32选项值及其严格对应项 之间的区别 。none, innodb, 并将crc32指定类型的校验和值写入每个数据块,但为了兼容性,在读取操作期间验证块时接受其他校验和值。严格设置也接受有效的校验和值,但在遇到有效的不匹配校验和值时会打印错误消息。InnoDB如果实例中的所有数据文件都是在相同的 innodb_checksum_algorithm 值 下创建的,则使用严格形式可以加快验证速度 。

    表 15.26 允许的 innodb_checksum_algorithm 值

    价值 生成的校验和(写入时) 允许的校验和(读取时)
    没有任何 一个常数。 none由、 innodb或生成的任何校验和crc32
    innodb 在软件中计算的校验和,使用来自 InnoDB. none由、 innodb或生成的任何校验和crc32
    CRC32 使用crc32算法计算的校验和,可能通过硬件辅助完成。 none由、 innodb或生成的任何校验和crc32
    严格无 一个常数 none由、 innodb或生成的任何校验和crc32InnoDB如果遇到有效但不匹配的校验和,则打印错误消息。
    strict_innodb 在软件中计算的校验和,使用来自 InnoDB. none由、 innodb或生成的任何校验和crc32InnoDB如果遇到有效但不匹配的校验和,则打印错误消息。
    strict_crc32 使用crc32算法计算的校验和,可能通过硬件辅助完成。 none由、 innodb或生成的任何校验和crc32InnoDB如果遇到有效但不匹配的校验和,则打印错误消息。
  • innodb_cmp_per_index_enabled
    命令行格式 --innodb-cmp-per-index-enabled[={OFF|ON}]
    系统变量 innodb_cmp_per_index_enabled
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 布尔值
    默认值 OFF

    在表中启用与每个索引压缩相关的统计信息 INFORMATION_SCHEMA.INNODB_CMP_PER_INDEX 。由于收集这些统计信息的成本可能很高,因此仅在与 InnoDB 压缩表相关的性能调整期间对开发、测试或副本实例启用此选项。

    有关更多信息,请参阅 第 26.4.8 节,“INFORMATION_SCHEMA INNODB_CMP_PER_INDEX 和 INNODB_CMP_PER_INDEX_RESET 表”第 15.9.1.4 节,“在运行时监控 InnoDB 表压缩”

  • innodb_commit_concurrency
    命令行格式 --innodb-commit-concurrency=#
    系统变量 innodb_commit_concurrency
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 0
    最小值 0
    最大值 1000

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

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

  • innodb_compress_debug
    命令行格式 --innodb-compress-debug=value
    系统变量 innodb_compress_debug
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 枚举
    默认值 none
    有效值 none``zlib``lz4``lz4hc

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

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

  • innodb_compression_failure_threshold_pct
    命令行格式 --innodb-compression-failure-threshold-pct=#
    系统变量 innodb_compression_failure_threshold_pct
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 5
    最小值 0
    最大值 100

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

    有关详细信息,请参阅 第 15.9.1.6 节,“OLTP 工作负载的压缩”

  • innodb_compression_level
    命令行格式 --innodb-compression-level=#
    系统变量 innodb_compression_level
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 6
    最小值 0
    最大值 9

    指定用于 InnoDB 压缩表和索引的 zlib 压缩级别。较高的值可让您将更多数据放入存储设备,但压缩期间会增加 CPU 开销。当存储空间不重要或您期望数据不是特别可压缩时,较低的值可让您减少 CPU 开销。

    有关详细信息,请参阅 第 15.9.1.6 节,“OLTP 工作负载的压缩”

  • innodb_compression_pad_pct_max
    命令行格式 --innodb-compression-pad-pct-max=#
    系统变量 innodb_compression_pad_pct_max
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 50
    最小值 0
    最大值 75

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

    有关详细信息,请参阅 第 15.9.1.6 节,“OLTP 工作负载的压缩”

  • innodb_concurrency_tickets
    命令行格式 --innodb-concurrency-tickets=#
    系统变量 innodb_concurrency_tickets
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 5000
    最小值 1
    最大值 4294967295

    确定 可以同时进入 的线程InnoDB数。InnoDB如果线程数已经达到并发限制,则线程在尝试进入时被放入队列中。当一个线程被允许进入 InnoDB时,它会被赋予一个数量等于 的“ 票”innodb_concurrency_tickets,并且该线程可以自由地进出,InnoDB 直到它的票用完为止。在那之后,线程在下次尝试进入时再次受到并发检查(以及可能的排队) InnoDB。默认值为 5000。

    对于较小的 innodb_concurrency_tickets 值,只需要处理几行的小型事务与处理许多行的大型事务公平竞争。小 innodb_concurrency_tickets 值的缺点是大型事务必须在队列中循环多次才能完成,这延长了完成任务所需的时间。

    值越大,大型 innodb_concurrency_tickets 事务等待队列末尾位置(由 控制 innodb_thread_concurrency)的时间越少,检索行的时间越多。大型事务还需要更少的通过队列来完成他们的任务。大 innodb_concurrency_tickets 值的缺点是同时运行的大事务过多会使较小的事务在执行前等待更长的时间,从而使它们饿死。

    对于非零 innodb_thread_concurrency 值,您可能需要 innodb_concurrency_tickets 向上或向下调整该值以在较大和较小交易之间找到最佳平衡。该SHOW ENGINE INNODB STATUS报告显示当前通过队列的执行事务的剩余票证数量。该数据也可以从表格的 TRX_CONCURRENCY_TICKETS列中 获得INFORMATION_SCHEMA.INNODB_TRX

    有关更多信息,请参阅 第 15.8.4 节,“为 InnoDB 配置线程并发”

  • innodb_data_file_path
    命令行格式 --innodb-data-file-path=file_name
    系统变量 innodb_data_file_path
    范围 全局的
    动态的
    SET_VAR提示适用
    类型 细绳
    默认值 ibdata1:12M:autoextend

    InnoDB定义系统表空间数据文件 的名称、大小和属性 。如果不为 指定值 innodb_data_file_path,则默认行为是创建一个略大于 12MB 的自动扩展数据文件,名为 ibdata1.

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

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

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

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

  • innodb_data_home_dir
    命令行格式 --innodb-data-home-dir=dir_name
    系统变量 innodb_data_home_dir
    范围 全局的
    动态的
    SET_VAR提示适用
    类型 目录名称

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

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

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

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

    有关相关信息,请参阅 第 15.8.1 节,“InnoDB 启动配置”

  • innodb_ddl_buffer_size
    命令行格式 --innodb-ddl-buffer-size=#
    介绍 8.0.27
    系统变量 innodb_ddl_buffer_size
    范围 全球, 会话
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 1048576
    最小值 65536
    最大值 4294967295
    单元 字节

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

  • innodb_ddl_log_crash_reset_debug
    命令行格式 --innodb-ddl-log-crash-reset-debug[={OFF|ON}]
    系统变量 innodb_ddl_log_crash_reset_debug
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 布尔值
    默认值 OFF

    启用此调试选项可将 DDL 日志崩溃注入计数器重置为 1。此选项仅在使用 CMake选项编译调试支持时可用。 WITH_DEBUG

  • innodb_ddl_threads
    命令行格式 --innodb-ddl-threads=#
    介绍 8.0.27
    系统变量 innodb_ddl_threads
    范围 全球, 会话
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 4
    最小值 1
    最大值 64

    定义索引创建的排序和构建阶段的最大并行线程数。适用于创建或重建二级索引的在线 DDL 操作。有关相关信息,请参阅 第 15.12.5 节,“为在线 DDL 操作配置并行线程”第 15.12.4 节,“在线 DDL 内存管理”

  • innodb_deadlock_detect
    命令行格式 --innodb-deadlock-detect[={OFF|ON}]
    系统变量 innodb_deadlock_detect
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 布尔值
    默认值 ON

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

    有关相关信息,请参阅 第 15.7.5.2 节,“死锁检测”

  • innodb_dedicated_server
    命令行格式 --innodb-dedicated-server[={OFF|ON}]
    系统变量 innodb_dedicated_server
    范围 全局的
    动态的
    SET_VAR提示适用
    类型 布尔值
    默认值 OFF

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

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

    有关更多信息,请参阅 第 15.8.12 节,“为专用 MySQL 服务器启用自动配置”

  • innodb_default_row_format
    命令行格式 --innodb-default-row-format=value
    系统变量 innodb_default_row_format
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 枚举
    默认值 DYNAMIC
    有效值 REDUNDANT``COMPACT``DYNAMIC

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

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

    ROW_FORMAT未显式指定选项或ROW_FORMAT=DEFAULT使用时,任何重建表的操作也会默默地将表的行格式更改为 innodb_default_row_format. 有关详细信息,请参阅 定义表的行格式

    服务器为处理查询而创建的内部InnoDB临时表使用 DYNAMIC行格式,而不管 innodb_default_row_format 设置如何。

  • innodb_directories
    命令行格式 --innodb-directories=dir_name
    系统变量 innodb_directories
    范围 全局的
    动态的
    SET_VAR提示适用
    类型 目录名称
    默认值 NULL

    定义在启动时扫描表空间文件的目录。在服务器脱机时将表空间文件移动或恢复到新位置时使用此选项。它还用于指定使用绝对路径创建的或位于数据目录之外的表空间文件的目录。

    崩溃恢复期间的表空间发现依赖于 innodb_directories设置来识别重做日志中引用的表空间。有关详细信息,请参阅 崩溃恢复期间的表空间发现

    默认值为 NULL,但由 innodb_data_home_dirinnodb_undo_directory和 定义的目录在构建启动时要扫描的目录列表时datadir始终附加到innodb_directories 参数值。InnoDB无论是否 innodb_directories明确指定设置,都会附加这些目录。

    innodb_directories可以在启动命令或 MySQL 选项文件中指定为选项。引号将参数值括起来,因为否则某些命令解释器会将分号 ( ;) 解释为特殊字符。(例如,Unix shell 将其视为命令终止符。)

    启动命令:

    MySQL 选项文件:

    [mysqld]

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

    扫描还遍历指定目录的innodb_directories子目录。从要扫描的目录列表中丢弃重复的目录和子目录。

    有关更多信息,请参阅 第 15.6.3.6 节,“在服务器脱机时移动表空间文件”

  • innodb_disable_sort_file_cache
    命令行格式 --innodb-disable-sort-file-cache[={OFF|ON}]
    系统变量 innodb_disable_sort_file_cache
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 布尔值
    默认值 OFF

    禁用合并排序临时文件的操作系统文件系统缓存。效果是用O_DIRECT.

  • innodb_doublewrite
    命令行格式 --innodb-doublewrite[={OFF|ON}]
    系统变量 innodb_doublewrite
    范围 全局的
    动态的
    SET_VAR提示适用
    类型 布尔值
    默认值 ON

    innodb_doublewrite 变量控制是否启用双写缓冲区。在大多数情况下,它默认启用。要禁用双写缓冲区,请设置 innodb_doublewrite为 0 或使用 --skip-innodb-doublewrite. 如果您更关心性能而不是数据完整性,您可能会考虑禁用双写缓冲区,例如执行基准测试时可能就是这种情况。

    如果双写缓冲区位于支持原子写入的 Fusion-io 设备上,则会自动禁用双写缓冲区,并使用 Fusion-io 原子写入执行数据文件写入。但是,请注意该innodb_doublewrite 设置是全局的。当双写缓冲区被禁用时,所有数据文件都被禁用,包括那些不驻留在 Fusion-io 硬件上的文件。此功能仅在 Fusion-io 硬件上受支持,并且仅在 Linux 上为 Fusion-io NVMFS 启用。要充分利用此功能, 建议innodb_flush_method设置O_DIRECT

    有关相关信息,请参阅 第 15.6.4 节,“双写缓冲区”

  • innodb_doublewrite_batch_size
    命令行格式 --innodb-doublewrite-batch-size=#
    介绍 8.0.20
    系统变量 innodb_doublewrite_batch_size
    范围 全局的
    动态的
    SET_VAR提示适用
    类型 整数
    默认值 0
    最小值 0
    最大值 256

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

    有关更多信息,请参阅 第 15.6.4 节,“双写缓冲区”

  • innodb_doublewrite_dir
    命令行格式 --innodb-doublewrite-dir=dir_name
    介绍 8.0.20
    系统变量 innodb_doublewrite_dir
    范围 全局的
    动态的
    SET_VAR提示适用
    类型 目录名称

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

    有关更多信息,请参阅 第 15.6.4 节,“双写缓冲区”

  • innodb_doublewrite_files
    命令行格式 --innodb-doublewrite-files=#
    介绍 8.0.20
    系统变量 innodb_doublewrite_files
    范围 全局的
    动态的
    SET_VAR提示适用
    类型 整数
    默认值 innodb_buffer_pool_instances * 2
    最小值 2
    最大值 256

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

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

    有关更多信息,请参阅 第 15.6.4 节,“双写缓冲区”

  • innodb_doublewrite_pages
    命令行格式 --innodb-doublewrite-pages=#
    介绍 8.0.20
    系统变量 innodb_doublewrite_pages
    范围 全局的
    动态的
    SET_VAR提示适用
    类型 整数
    默认值 innodb_write_io_threads value
    最小值 innodb_write_io_threads value
    最大值 512

    为批量写入定义每个线程的最大双写页数。如果未指定值, innodb_doublewrite_pages则设置为该 innodb_write_io_threads 值。

    有关更多信息,请参阅 第 15.6.4 节,“双写缓冲区”

  • innodb_extend_and_initialize
    命令行格式 --innodb=extend-and-initialize[={OFF|ON}]
    介绍 8.0.22
    系统变量 innodb_extend_and_initialize
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 布尔值
    默认值 ON

    控制如何将空间分配给 Linux 系统上的 file-per-table 和通用表空间。

    启用后,InnoDB将 NULL 写入新分配的页面。禁用时,使用 posix_fallocate()调用分配空间,该调用保留空间而无需物理写入 NULL。

    有关更多信息,请参阅 第 15.6.3.8 节,“优化 Linux 上的表空间空间分配”

  • innodb_fast_shutdown
    命令行格式 --innodb-fast-shutdown=#
    系统变量 innodb_fast_shutdown
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 1
    有效值 0``1``2

    InnoDB 关机模式 。如果值为 0,InnoDB则在关闭之前会进行 慢速关闭、完全清除和更改缓冲区合并。如果值为 1(默认值),则InnoDB在关机时跳过这些操作,该过程称为 快速关机。如果值为 2,则InnoDB刷新其日志并冷关机,就好像 MySQL 崩溃了;没有提交的事务丢失,但是 崩溃恢复 操作使下次启动需要更长的时间。

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

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

  • innodb_fil_make_page_dirty_debug
    命令行格式 --innodb-fil-make-page-dirty-debug=#
    系统变量 innodb_fil_make_page_dirty_debug
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 0
    最小值 0
    最大值 2**32-1

    默认情况下,设置 innodb_fil_make_page_dirty_debug 为表空间的 ID 会立即弄脏表空间的第一页。如果 innodb_saved_page_number_debug 设置为非默认值, innodb_fil_make_page_dirty_debug 则设置会弄脏指定页面。该 innodb_fil_make_page_dirty_debug 选项仅在使用CMake选项编译调试支持时可用。 WITH_DEBUG

  • innodb_file_per_table
    命令行格式 --innodb-file-per-table[={OFF|ON}]
    系统变量 innodb_file_per_table
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 布尔值
    默认值 ON

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

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

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

    innodb_file_per-table 设置不影响临时表的创建。从 MySQL 8.0.14 开始,临时表是在会话临时表空间中创建的,在此之前是在全局临时表空间中创建的。请参阅 第 15.6.3.5 节,“临时表空间”

  • innodb_fill_factor
    命令行格式 --innodb-fill-factor=#
    系统变量 innodb_fill_factor
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 100
    最小值 10
    最大值 100

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

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

    innodb_fill_factor设置为 100 会保留聚集索引页中 1/16 的空间以供将来索引增长使用 。

    innodb_fill_factor适用于 B 树的叶子和非叶子页面。它不适用于用于TEXTBLOB条目的外部页面。

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

  • innodb_flush_log_at_timeout
    命令行格式 --innodb-flush-log-at-timeout=#
    系统变量 innodb_flush_log_at_timeout
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 1
    最小值 1
    最大值 2700
    单元

    每秒写入和刷新日志*N* 。 innodb_flush_log_at_timeout 允许增加刷新之间的超时时间,以减少刷新并避免影响二进制日志组提交的性能。默认设置为 innodb_flush_log_at_timeout 每秒一次。

  • innodb_flush_log_at_trx_commit
    命令行格式 --innodb-flush-log-at-trx-commit=#
    系统变量 innodb_flush_log_at_trx_commit
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 枚举
    默认值 1
    有效值 0``1``2

    控制提交操作的严格ACID合规性 与重新安排提交相关的 I/O 操作并分批完成时可能实现的更高性能 之间的平衡 。您可以通过更改默认值来获得更好的性能,但是您可能会在崩溃中丢失事务。

    • 完全符合 ACID 要求默认设置 1。日志在每次事务提交时写入并刷新到磁盘。
    • 设置为 0 时,日志每秒写入一次并刷新到磁盘。未刷新日志的事务可能会在崩溃中丢失。
    • 如果设置为 2,则在每次事务提交后写入日志,并每秒刷新一次到磁盘。未刷新日志的事务可能会在崩溃中丢失。
    • 对于设置 0 和 2,不能 100% 保证每秒冲洗一次。由于 DDL 更改和其他InnoDB 导致独立于 innodb_flush_log_at_trx_commit 设置刷新日志的内部活动,刷新可能会更频繁地发生,有时由于调度问题而不太频繁。如果日志每秒刷新一次,那么在崩溃中最多可能会丢失一秒钟的事务。如果刷新日志的频率高于或低于每秒一次,则可能丢失的事务量会相应变化。
    • 日志刷新频率由 控制 innodb_flush_log_at_timeout,它允许您将日志刷新频率设置为 *N*秒(其中 *N1 ... 2700,默认值为 1)。但是,任何意外的mysqld进程退出都可以擦除长达N*几秒钟的事务。
    • DDL 更改和其他内部InnoDB 活动独立于设置刷新日志 innodb_flush_log_at_trx_commit
    • InnoDB 无论 设置如何,崩溃恢复innodb_flush_log_at_trx_commit都有效 。事务要么完全应用,要么完全删除。

    对于InnoDB与事务一起使用的复制设置的持久性和一致性:

    有关对意外停止最具弹性的副本上的设置组合的信息,请参阅 第 17.4.2 节,“处理副本的意外停止”

    警告

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

  • innodb_flush_method
    命令行格式 --innodb-flush-method=value
    系统变量 innodb_flush_method
    范围 全局的
    动态的
    SET_VAR提示适用
    类型 细绳
    默认值 (Unix) fsync
    默认值 (Windows) unbuffered
    有效值 (Unix) fsync``O_DSYNC``littlesync``nosync``O_DIRECT``O_DIRECT_NO_FSYNC
    有效值 (Windows) unbuffered``normal

    定义用于将 数据刷新InnoDB 数据文件日志文件的方法,这会影响 I/O 吞吐量。

    在类 Unix 系统上,默认值为 fsync. 在 Windows 上,默认值为 unbuffered.

    笔记

    在 MySQL 8.0 中, innodb_flush_method可以用数字指定选项。

    innodb_flush_method 类 Unix 系统 的选项包括:

    • fsyncor 0: InnoDB使用 fsync()系统调用刷新数据和日志文件。fsync是默认设置。
    • O_DSYNC1InnoDB用于O_SYNC 打开和刷新日志文件,以及 fsync()刷新数据文件。 InnoDBO_DSYNC直接使用,因为在许多 Unix 上都存在问题。
    • littlesyncor 2:此选项用于内部性能测试,目前不支持。使用风险自负。
    • nosyncor 3:此选项用于内部性能测试,目前不支持。使用风险自负。
    • O_DIRECTor 4InnoDB使用O_DIRECT (或directio()在 Solaris 上)打开数据文件,并用于fsync()刷新数据和日志文件。此选项在某些 GNU/Linux 版本、FreeBSD 和 Solaris 上可用。
    • O_DIRECT_NO_FSYNC: 在刷新 I/O 期间InnoDB使用,但在每次写入操作后 O_DIRECT 跳过 系统调用。fsync()

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

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

      如果重做日志文件和数据文件位于不同的存储设备上,则可能会丢失数据,并且在数据文件写入从没有电池支持的设备缓存中刷新之前发生意外退出。如果您使用或打算使用不同的存储设备来存储重做日志文件和数据文件,并且您的数据文件驻留在没有电池供电的缓存的设备上,请 O_DIRECT改用。

    在支持fdatasync() 系统调用的 平台上innodb_use_fdatasync ,MySQL 8.0.26 中引入的变量允许 使用的innodb_flush_method选项fsync()来代替使用 fdatasync()。除非 fdatasync()后续数据检索需要,否则系统调用不会刷新对文件元数据的更改,从而提供潜在的性能优势。

    Windows 系统的innodb_flush_method 选项包括:

    • unbufferedor 0: InnoDB使用模拟异步 I/O 和非缓冲 I/O。
    • normal1InnoDB使用模拟异步 I/O 和缓冲 I/O。

    每个设置如何影响性能取决于硬件配置和工作负载。对您的特定配置进行基准测试,以决定使用哪个设置,或者是否保留默认设置。检查 Innodb_data_fsyncs状态变量以查看每个设置的调用总数 fsync()(或 fdatasync()调用,如果 innodb_use_fdatasync启用)。工作负载中读取和写入操作的混合会影响设置的执行方式。例如,在具有硬件 RAID 控制器和电池支持的写缓存的系统上,O_DIRECT可以帮助避免在 InnoDB缓冲池和操作系统文件系统缓存。在 InnoDB数据和日志文件位于 SAN 上的某些系统上,默认值或对于以语句O_DSYNC为主的读取繁重工作负载可能更快 。SELECT始终使用反映您的生产环境的硬件和工作负载测试此参数。有关一般 I/O 调整建议,请参阅 第 8.5.8 节,“优化 InnoDB 磁盘 I/O”

    如果innodb_dedicated_server启用,则 innodb_flush_method如果未明确定义,则会自动配置该值。有关更多信息,请参阅 第 15.8.12 节,“为专用 MySQL 服务器启用自动配置”

  • innodb_flush_neighbors
    命令行格式 --innodb-flush-neighbors=#
    系统变量 innodb_flush_neighbors
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 枚举
    默认值 0
    有效值 0``1``2

    指定从缓冲池中刷新页面是否也会刷新相同 范围内的其他脏页面InnoDB

    • 设置为 0 禁用 innodb_flush_neighbors. 相同范围内的脏页不会被刷新。
    • 设置为 1 会刷新相同范围内的连续脏页。
    • 设置为 2 会刷新相同范围内的脏页。

    当表数据存储在传统 HDD存储设备上时, 与在不同时间刷新单个页面相比,在一次操作中刷新此类相邻页面可减少 I/O 开销(主要用于磁盘寻道操作)。对于存储在 SSD上的表数据,寻道时间不是一个重要因素,您可以将此选项设置为 0 以分散写入操作。有关相关信息,请参阅 第 15.8.3.5 节,“配置缓冲池刷新”

  • innodb_flush_sync
    命令行格式 --innodb-flush-sync[={OFF|ON}]
    系统变量 innodb_flush_sync
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 布尔值
    默认值 ON

    innodb_flush_sync 默认情况下启用 的变量会导致在检查点innodb_io_capacity发生的 I/O 活动突发期间忽略该设置 。要遵守 设置定义的 I/O 速率,请禁用. innodb_io_capacityinnodb_flush_sync

    有关配置 innodb_flush_sync变量的信息,请参阅第 15.8.7 节,“配置 InnoDB I/O 容量”

  • innodb_flushing_avg_loops
    命令行格式 --innodb-flushing-avg-loops=#
    系统变量 innodb_flushing_avg_loops
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 30
    最小值 1
    最大值 1000

    保留先前计算的刷新状态快照的迭代次数InnoDB,控制 自适应刷新对不断变化的 工作负载的响应速度。增加该值会使 刷新操作的速率随着工作负载的变化而平滑而逐渐地变化。减小该值会使自适应刷新快速适应工作负载的变化,如果工作负载突然增加和减少,这可能会导致刷新活动的峰值。

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

  • innodb_force_load_corrupted
    命令行格式 --innodb-force-load-corrupted[={OFF|ON}]
    系统变量 innodb_force_load_corrupted
    范围 全局的
    动态的
    SET_VAR提示适用
    类型 布尔值
    默认值 OFF

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

  • innodb_force_recovery
    命令行格式 --innodb-force-recovery=#
    系统变量 innodb_force_recovery
    范围 全局的
    动态的
    SET_VAR提示适用
    类型 整数
    默认值 0
    最小值 0
    最大值 6

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

    警告

    仅在紧急情况下将此变量设置为大于 0 的值,以便您可以启动 InnoDB和转储表。作为安全措施,InnoDB防止 INSERTUPDATE、 或 大于 0 DELETE时的操作 。 设置 4 个或更多位置 为只读模式。 innodb_force_recoveryinnodb_force_recoveryInnoDB

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

  • innodb_fsync_threshold
    命令行格式 --innodb-fsync-threshold=#
    介绍 8.0.13
    系统变量 innodb_fsync_threshold
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 0
    最小值 0
    最大值 2**64-1

    默认情况下,当InnoDB创建新的数据文件时,例如新的日志文件或表空间文件,该文件在刷新到磁盘之前会完全写入操作系统缓存,这可能会导致大量磁盘写入活动发生在一次。要强制从操作系统缓存中定期刷新较小的数据,您可以使用该 innodb_fsync_threshold 变量来定义阈值(以字节为单位)。当达到字节阈值时,操作系统缓存的内容被刷新到磁盘。默认值 0 强制执行默认行为,即仅在文件完全写入缓存后才将数据刷新到磁盘。

    在多个 MySQL 实例使用相同的存储设备的情况下,指定阈值以强制进行较小的定期刷新可能是有益的。例如,创建新的 MySQL 实例及其关联的数据文件可能会导致磁盘写入活动激增,从而阻碍使用相同存储设备的其他 MySQL 实例的性能。配置阈值有助于避免写入活动的此类激增。

  • innodb_ft_aux_table
    系统变量 innodb_ft_aux_table
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 细绳

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

    'test/t1';

    将此变量设置为格式中的名称后 ,表 、 、 、 和 显示有关指定表的搜索索引的信息。 *db_name*/*table_name*``INFORMATION_SCHEMAINNODB_FT_INDEX_TABLEINNODB_FT_INDEX_CACHEINNODB_FT_CONFIGINNODB_FT_DELETEDINNODB_FT_BEING_DELETED

    有关更多信息,请参阅 第 15.15.4 节,“InnoDB INFORMATION_SCHEMA FULLTEXT 索引表”

  • innodb_ft_cache_size
    命令行格式 --innodb-ft-cache-size=#
    系统变量 innodb_ft_cache_size
    范围 全局的
    动态的
    SET_VAR提示适用
    类型 整数
    默认值 8000000
    最小值 1600000
    最大值 80000000
    单元 字节

    为搜索索引缓存分配的内存(以字节为单位) InnoDB FULLTEXT,它在创建InnoDB FULLTEXT索引时将已解析的文档保存在内存中。索引插入和更新仅在 innodb_ft_cache_size达到大小限制时提交到磁盘。 innodb_ft_cache_size基于每个表定义缓存大小。要为所有表设置全局限制,请参阅 innodb_ft_total_cache_size

    有关更多信息,请参阅 InnoDB 全文索引缓存

  • innodb_ft_enable_diag_print
    命令行格式 --innodb-ft-enable-diag-print[={OFF|ON}]
    系统变量 innodb_ft_enable_diag_print
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 布尔值
    默认值 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
    命令行格式 --innodb-ft-enable-stopword[={OFF|ON}]
    系统变量 innodb_ft_enable_stopword
    范围 全球, 会话
    动态的 是的
    SET_VAR提示适用
    类型 布尔值
    默认值 ON

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

    有关更多信息,请参阅 第 12.10.4 节,“全文停用词”

  • innodb_ft_max_token_size
    命令行格式 --innodb-ft-max-token-size=#
    系统变量 innodb_ft_max_token_size
    范围 全局的
    动态的
    SET_VAR提示适用
    类型 整数
    默认值 84
    最小值 10
    最大值 84

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

    有关更多信息,请参阅 第 12.10.6 节,“微调 MySQL 全文搜索”

  • innodb_ft_min_token_size
    命令行格式 --innodb-ft-min-token-size=#
    系统变量 innodb_ft_min_token_size
    范围 全局的
    动态的
    SET_VAR提示适用
    类型 整数
    默认值 3
    最小值 0
    最大值 16

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

    有关更多信息,请参阅 第 12.10.6 节,“微调 MySQL 全文搜索”

  • innodb_ft_num_word_optimize
    命令行格式 --innodb-ft-num-word-optimize=#
    系统变量 innodb_ft_num_word_optimize
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 2000
    最小值 1000
    最大值 10000

    在对索引的每次OPTIMIZE TABLE操作 期间要处理的字数 。InnoDB FULLTEXT因为对包含全文搜索索引的表的批量插入或更新操作可能需要大量索引维护以合并所有更改,所以您可能会执行一系列OPTIMIZE TABLE 语句,每个语句都从最后一个停止的地方开始。

    有关更多信息,请参阅 第 12.10.6 节,“微调 MySQL 全文搜索”

  • innodb_ft_result_cache_limit
    命令行格式 --innodb-ft-result-cache-limit=#
    系统变量 innodb_ft_result_cache_limit
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 2000000000
    最小值 1000000
    最大值 2**32-1
    单元 字节

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

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

  • innodb_ft_server_stopword_table
    命令行格式 --innodb-ft-server-stopword-table=db_name/table_name
    系统变量 innodb_ft_server_stopword_table
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 细绳
    默认值 NULL

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

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

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

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

    有关更多信息,请参阅 第 12.10.4 节,“全文停用词”

  • innodb_ft_sort_pll_degree
    命令行格式 --innodb-ft-sort-pll-degree=#
    系统变量 innodb_ft_sort_pll_degree
    范围 全局的
    动态的
    SET_VAR提示适用
    类型 整数
    默认值 2
    最小值 1
    最大值 32

    InnoDB FULLTEXT 构建搜索索引时 并行用于索引和标记索引中的文本的线程数。

    有关相关信息,请参阅 第 15.6.2.4 节,“InnoDB 全文索引”innodb_sort_buffer_size.

  • innodb_ft_total_cache_size
    命令行格式 --innodb-ft-total-cache-size=#
    系统变量 innodb_ft_total_cache_size
    范围 全局的
    动态的
    SET_VAR提示适用
    类型 整数
    默认值 640000000
    最小值 32000000
    最大值 1600000000
    单元 字节

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

    有关更多信息,请参阅 InnoDB 全文索引缓存

  • innodb_ft_user_stopword_table
    命令行格式 --innodb-ft-user-stopword-table=db_name/table_name
    系统变量 innodb_ft_user_stopword_table
    范围 全球, 会话
    动态的 是的
    SET_VAR提示适用
    类型 细绳
    默认值 NULL

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

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

    配置前必须存在停用词表 innodb_ft_user_stopword_tableinnodb_ft_enable_stopword 必须启用并且 innodb_ft_user_stopword_table 必须在创建 FULLTEXT索引之前进行配置。

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

    有关更多信息,请参阅 第 12.10.4 节,“全文停用词”

  • innodb_idle_flush_pct
    命令行格式 --innodb-idle-flush-pct=#
    介绍 8.0.18
    系统变量 innodb_idle_flush_pct
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 100
    最小值 0
    最大值 100

    InnoDB在空闲 时限制页面刷新。该innodb_idle_flush_pct 值是 innodb_io_capacity设置的百分比,它定义每秒可用的 I/O 操作数InnoDB。有关更多信息,请参阅在空闲期间限制缓冲区刷新

  • innodb_io_capacity
    命令行格式 --innodb-io-capacity=#
    系统变量 innodb_io_capacity
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 200
    最小值 100
    最大值(64 位平台) 2**64-1
    最大值(32 位平台) 2**32-1

    innodb_io_capacity 变量定义每秒可用于InnoDB后台任务的 I/O 操作数 (IOPS),例如从缓冲池刷新 页面和合并来自 更改缓冲区的数据。

    有关配置 innodb_io_capacity变量的信息,请参阅第 15.8.7 节,“配置 InnoDB I/O 容量”

  • innodb_io_capacity_max
    命令行格式 --innodb-io-capacity-max=#
    系统变量 innodb_io_capacity_max
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 see description
    最小值 100
    最大值(32 位平台) 2**32-1
    最大值(Unix,64 位平台) 2**64-1
    最大值(Windows、64 位平台) 2**32-1

    如果刷新活动落后,则可以以比变量InnoDB 定义的更高的每秒 I/O 操作 (IOPS) 速率更积极地刷新 。innodb_io_capacity该变量定义了在这种情况下后台任务 innodb_io_capacity_max 执行的最大 IOPS 数 。InnoDB

    有关配置 innodb_io_capacity_max 变量的信息,请参阅 第 15.8.7 节,“配置 InnoDB I/O 容量”

  • innodb_limit_optimistic_insert_debug
    命令行格式 --innodb-limit-optimistic-insert-debug=#
    系统变量 innodb_limit_optimistic_insert_debug
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 0
    最小值 0
    最大值 2**32-1

    限制每个 B 树页面的记录数。默认值 0 表示不施加限制。仅当使用 CMake选项编译调试支持时,此选项才可用。 WITH_DEBUG

  • innodb_lock_wait_timeout
    命令行格式 --innodb-lock-wait-timeout=#
    系统变量 innodb_lock_wait_timeout
    范围 全球, 会话
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 50
    最小值 1
    最大值 1073741824
    单元

    InnoDB 事务在放弃之前等待行锁 的时间长度(以秒为单位)。默认值为 50 秒。尝试访问被另一个 InnoDB事务锁定的行的事务在发出以下错误之前最多等待这么多秒以对该行进行写访问:

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

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

    对于高度交互的应用程序或OLTP系统, 您可能会降低此值,以快速显示用户反馈或将更新放入队列以供稍后处理。您可以为长时间运行的后端操作增加此值,例如数据仓库中等待其他大型插入或更新操作完成的转换步骤。

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

    锁定等待超时值在启用(默认值)时 不适用于 死锁,因为 会立即检测死锁并回滚其中一个死锁事务。禁用时,发生 死锁时依赖于 事务回滚。请参见 第 15.7.5.2 节,“死锁检测”innodb_deadlock_detectInnoDBinnodb_deadlock_detectInnoDBinnodb_lock_wait_timeout

    innodb_lock_wait_timeout可以在运行时使用SET GLOBALor SET SESSION语句设置。更改 GLOBAL设置需要足够的权限来设置全局系统变量(请参阅 第 5.1.9.1 节,“系统变量权限”)并影响随后连接的所有客户端的操作。任何客户端都可以更改 的SESSION设置 innodb_lock_wait_timeout,这仅影响该客户端。

  • innodb_log_buffer_size
    命令行格式 --innodb-log-buffer-size=#
    系统变量 innodb_log_buffer_size
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 16777216
    最小值 1048576
    最大值 4294967295

    InnoDB 用于写入磁盘上日志文件 的缓冲区大小(以字节为单位) 。默认值为 16MB。大型 日志缓冲区使大型事务无需在事务提交之前将日志写入磁盘即可运行。因此,如果您有更新、插入或删除许多行的事务,则使日志缓冲区更大可以节省磁盘 I/O。有关相关信息,请参阅 内存配置第 8.5.4 节,“优化 InnoDB 重做日志”。有关一般 I/O 调整建议,请参阅第 8.5.8 节,“优化 InnoDB 磁盘 I/O”.

  • innodb_log_checkpoint_fuzzy_now
    命令行格式 --innodb-log-checkpoint-fuzzy-now[={OFF|ON}]
    介绍 8.0.13
    系统变量 innodb_log_checkpoint_fuzzy_now
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 布尔值
    默认值 OFF

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

  • innodb_log_checkpoint_now
    命令行格式 --innodb-log-checkpoint-now[={OFF|ON}]
    系统变量 innodb_log_checkpoint_now
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 布尔值
    默认值 OFF

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

  • innodb_log_checksums
    命令行格式 --innodb-log-checksums[={OFF|ON}]
    系统变量 innodb_log_checksums
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 布尔值
    默认值 ON

    启用或禁用重做日志页面的校验和。

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

    重做日志标题页和重做日志检查点页面上的校验和永远不会被禁用。

  • innodb_log_compressed_pages
    命令行格式 --innodb-log-compressed-pages[={OFF|ON}]
    系统变量 innodb_log_compressed_pages
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 布尔值
    默认值 ON

    指定是否将 重新压缩 页面的图像写入 重做日志。当对压缩数据进行更改时,可能会发生重新压缩。

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

    要衡量启用或禁用的效果 innodb_log_compressed_pages,请比较相同工作负载下两种设置的重做日志生成。测量重做日志生成的选项包括观察输出部分中 的Log sequence number(LSN) ,或监视 写入重做日志文件的字节数的状态。 LOGSHOW ENGINE INNODB STATUSInnodb_os_log_written

    有关相关信息,请参阅 第 15.9.1.6 节,“OLTP 工作负载的压缩”

  • innodb_log_file_size
    命令行格式 --innodb-log-file-size=#
    系统变量 innodb_log_file_size
    范围 全局的
    动态的
    SET_VAR提示适用
    类型 整数
    默认值 50331648
    最小值 4194304
    最大值 512GB / innodb_log_files_in_group
    单元 字节

    日志组中每个日志文件的 大小(以字节为单位)。日志文件 ( * ) 的总大小不能超过略小于 512GB 的最大值。例如,一对 255 GB 的日志文件接近限制但没有超过限制。默认值为 48MB。 innodb_log_file_sizeinnodb_log_files_in_group

    通常,日志文件的组合大小应该足够大,以便服务器可以消除工作负载活动的高峰和低谷,这通常意味着有足够的重做日志空间来处理超过一个小时的写入活动。该值越大,缓冲池中需要的检查点刷新活动就越少,从而节省磁盘 I/O。较大的日志文件也会使崩溃恢复更慢。

    最小 innodb_log_file_size为 4MB。

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

    如果innodb_dedicated_server启用,则 innodb_log_file_size如果未明确定义,则会自动配置该值。有关更多信息,请参阅 第 15.8.12 节,“为专用 MySQL 服务器启用自动配置”

  • innodb_log_files_in_group
    命令行格式 --innodb-log-files-in-group=#
    系统变量 innodb_log_files_in_group
    范围 全局的
    动态的
    SET_VAR提示适用
    类型 整数
    默认值 2
    最小值 2
    最大值 100

    日志组 中 的日志文件数。 以循环方式写入文件。默认(和推荐)值为 2。文件的位置由 指定 。日志文件 ( * )的组合大小最高可达 512GB。 InnoDBinnodb_log_group_home_dirinnodb_log_file_sizeinnodb_log_files_in_group

    有关相关信息,请参阅 重做日志文件配置

    如果innodb_dedicated_server启用, innodb_log_files_in_group则在未明确定义时自动配置。有关更多信息,请参阅 第 15.8.12 节,“为专用 MySQL 服务器启用自动配置”

  • innodb_log_group_home_dir
    命令行格式 --innodb-log-group-home-dir=dir_name
    系统变量 innodb_log_group_home_dir
    范围 全局的
    动态的
    SET_VAR提示适用
    类型 目录名称

    InnoDB 重做日志文件 的目录路径,其编号由 指定 innodb_log_files_in_group。如果不指定任何InnoDB日志变量,则默认 在 MySQL 数据目录中创建名为ib_logfile0和 的两个文件。ib_logfile1日志文件大小由 innodb_log_file_size系统变量给出。

    有关相关信息,请参阅 重做日志文件配置

  • innodb_log_spin_cpu_abs_lwm
    命令行格式 --innodb-log-spin-cpu-abs-lwm=#
    系统变量 innodb_log_spin_cpu_abs_lwm
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 80
    最小值 0
    最大值 4294967295

    定义用户线程在等待刷新重做时不再旋转的最小 CPU 使用量。该值表示为 CPU 内核使用率的总和。例如,默认值 80 是单个 CPU 内核的 80%。在具有多核处理器的系统上,值 150 表示一个 CPU 内核的 100% 使用率加上第二个 CPU 内核的 50% 使用率。

    有关相关信息,请参阅 第 8.5.4 节,“优化 InnoDB 重做日志记录”

  • innodb_log_spin_cpu_pct_hwm
    命令行格式 --innodb-log-spin-cpu-pct-hwm=#
    系统变量 innodb_log_spin_cpu_pct_hwm
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 50
    最小值 0
    最大值 100

    定义用户线程在等待刷新重做时不再旋转的最大 CPU 使用量。该值表示为所有 CPU 内核的总处理能力的百分比。默认值为 50%。例如,两个 CPU 内核的 100% 使用率是具有四个 CPU 内核的服务器上综合 CPU 处理能力的 50%。

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

    有关相关信息,请参阅 第 8.5.4 节,“优化 InnoDB 重做日志记录”

  • innodb_log_wait_for_flush_spin_hwm
    命令行格式 --innodb-log-wait-for-flush-spin-hwm=#
    系统变量 innodb_log_wait_for_flush_spin_hwm
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 400
    最小值 0
    最大值(64 位平台) 2**64-1
    最大值(32 位平台) 2**32-1
    单元 微秒

    定义最大平均日志刷新时间,超过该时间用户线程在等待刷新重做时不再旋转。默认值为 400 微秒。

    有关相关信息,请参阅 第 8.5.4 节,“优化 InnoDB 重做日志记录”

  • innodb_log_write_ahead_size
    命令行格式 --innodb-log-write-ahead-size=#
    系统变量 innodb_log_write_ahead_size
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 8192
    最小值 512 (log file block size)
    最大值 Equal to innodb_page_size
    单元 字节

    定义重做日志的预写块大小,以字节为单位。为避免“ read-on-write ”,设置 innodb_log_write_ahead_size 为匹配操作系统或文件系统的缓存块大小。默认设置为 8192 字节。当重做日志块由于重做日志的预写块大小与操作系统或文件系统缓存块大小不匹配而未完全缓存到操作系统或文件系统时,就会发生写时读取。

    的有效值 是日志文件块大小 (2 n )innodb_log_write_ahead_size 的倍数。最小值是 日志文件块大小 (512)。指定最小值时不会发生预写。最大值等于该 值。如果您指定的值 大于该 值,则 设置将被截断为该 值。 InnoDB``InnoDBinnodb_page_sizeinnodb_log_write_ahead_sizeinnodb_page_sizeinnodb_log_write_ahead_sizeinnodb_page_size

    innodb_log_write_ahead_size 相对于操作系统或文件系统缓存块大小 将该值设置 得太低会导致“ read-on-write ”。fsync由于一次写入多个块, 将值设置得太高可能会对日志文件写入的性能产生轻微影响。

    有关相关信息,请参阅 第 8.5.4 节,“优化 InnoDB 重做日志记录”

  • innodb_log_writer_threads
    命令行格式 --innodb-log-writer-threads[={OFF|ON}]
    介绍 8.0.22
    系统变量 innodb_log_writer_threads
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 布尔值
    默认值 ON

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

    有关更多信息,请参阅 第 8.5.4 节,“优化 InnoDB 重做日志”

  • innodb_lru_scan_depth
    命令行格式 --innodb-lru-scan-depth=#
    系统变量 innodb_lru_scan_depth
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 1024
    最小值 100
    最大值(64 位平台) 2**64-1
    最大值(32 位平台) 2**32-1

    影响缓冲池刷新操作 的算法和启发式的参数。性能专家主要对调整 I/O 密集型工作负载感兴趣。它指定每个缓冲池实例,页面清理线程扫描的缓冲池 LRU 页面列表向下多远,以查找要刷新的脏页。这是每秒执行一次的后台操作。 InnoDB

    小于默认值的设置通常适用于大多数工作负载。远高于必要的值可能会影响性能。只有在典型工作负载下有备用 I/O 容量时才考虑增加该值。相反,如果写入密集型工作负载使您的 I/O 容量饱和,请减小该值,尤其是在缓冲池较大的情况下。

    调整时 innodb_lru_scan_depth,从低值开始并向上配置设置,目标是很少看到零空闲页面。此外,在更改缓冲池实例的数量时考虑调整 innodb_lru_scan_depth,因为 innodb_lru_scan_depth* innodb_buffer_pool_instances 定义了页面清理线程每秒执行的工作量。

    有关相关信息,请参阅 第 15.8.3.5 节,“配置缓冲池刷新”。有关一般 I/O 调整建议,请参阅第 8.5.8 节,“优化 InnoDB 磁盘 I/O”

  • innodb_max_dirty_pages_pct
    命令行格式 --innodb-max-dirty-pages-pct=#
    系统变量 innodb_max_dirty_pages_pct
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 数字
    默认值 90
    最小值 0
    最大值 99.99

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

    innodb_max_dirty_pages_pct 设置建立了刷新活动的目标。它不影响冲洗速度。有关管理刷新速率的信息,请参阅 第 15.8.3.5 节,“配置缓冲池刷新”

    有关相关信息,请参阅 第 15.8.3.5 节,“配置缓冲池刷新”。有关一般 I/O 调整建议,请参阅第 8.5.8 节,“优化 InnoDB 磁盘 I/O”

  • innodb_max_dirty_pages_pct_lwm
    命令行格式 --innodb-max-dirty-pages-pct-lwm=#
    系统变量 innodb_max_dirty_pages_pct_lwm
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 数字
    默认值 10
    最小值 0
    最大值 99.99

    定义一个低水位标记,表示 启用预刷新以控制脏页比率的脏页百分比。值 0 将完全禁用预刷新行为。配置的值应始终低于该 innodb_max_dirty_pages_pct 值。有关更多信息,请参阅 第 15.8.3.5 节,“配置缓冲池刷新”

  • innodb_max_purge_lag
    命令行格式 --innodb-max-purge-lag=#
    系统变量 innodb_max_purge_lag
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 0
    最小值 0
    最大值 4294967295

    定义所需的最大吹扫滞后。如果超过此值,则会对 、 和 操作施加延迟 INSERTUPDATE以便 DELETE有时间赶上清除。默认值为 0,这意味着没有最大清除延迟和延迟。

    有关详细信息,请参阅 第 15.8.9 节,“清除配置”

  • innodb_max_purge_lag_delay
    命令行格式 --innodb-max-purge-lag-delay=#
    系统变量 innodb_max_purge_lag_delay
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 0
    最小值 0
    最大值 10000000
    单元 毫秒

    innodb_max_purge_lag 指定超过阈值 时施加的延迟的最大延迟(以微秒为单位 )。指定 innodb_max_purge_lag_delay 值是公式计算的延迟时间的上限 innodb_max_purge_lag

    有关详细信息,请参阅 第 15.8.9 节,“清除配置”

  • innodb_max_undo_log_size
    命令行格式 --innodb-max-undo-log-size=#
    系统变量 innodb_max_undo_log_size
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 1073741824
    最小值 10485760
    最大值 2**64-1
    单元 字节

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

    有关详细信息,请参阅 截断撤消表空间

  • innodb_merge_threshold_set_all_debug
    命令行格式 --innodb-merge-threshold-set-all-debug=#
    系统变量 innodb_merge_threshold_set_all_debug
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 50
    最小值 1
    最大值 50

    定义索引页面的页面满百分比值,该值覆盖MERGE_THRESHOLD 当前位于字典缓存中的所有索引的当前设置。仅当使用CMake选项编译调试支持时,此选项才可用。有关相关信息,请参阅 第 15.8.11 节,“配置索引页面的合并阈值”WITH_DEBUG

  • innodb_monitor_disable
    命令行格式 --innodb-monitor-disable={counter|module|pattern|all}
    系统变量 innodb_monitor_disable
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 细绳

    禁用InnoDB 指标计数器。可以使用 INFORMATION_SCHEMA.INNODB_METRICS 表格查询计数器数据。有关使用信息,请参阅 第 15.15.6 节,“InnoDB INFORMATION_SCHEMA Metrics Table”

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

  • innodb_monitor_enable
    命令行格式 --innodb-monitor-enable={counter|module|pattern|all}
    系统变量 innodb_monitor_enable
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 细绳

    启用InnoDB 指标计数器。可以使用 INFORMATION_SCHEMA.INNODB_METRICS 表格查询计数器数据。有关使用信息,请参阅 第 15.15.6 节,“InnoDB INFORMATION_SCHEMA Metrics Table”

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

  • innodb_monitor_reset
    命令行格式 --innodb-monitor-reset={counter|module|pattern|all}
    系统变量 innodb_monitor_reset
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 枚举
    默认值 NULL
    有效值 counter``module``pattern``all

    InnoDB 将度量计数器 的计数值重置 为零。可以使用 INFORMATION_SCHEMA.INNODB_METRICS 表格查询计数器数据。有关使用信息,请参阅 第 15.15.6 节,“InnoDB INFORMATION_SCHEMA Metrics Table”

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

  • innodb_monitor_reset_all
    命令行格式 --innodb-monitor-reset-all={counter|module|pattern|all}
    系统变量 innodb_monitor_reset_all
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 枚举
    默认值 NULL
    有效值 counter``module``pattern``all

    InnoDB 重置度量计数器 的所有值(最小值、最大值等) 。可以使用 INFORMATION_SCHEMA.INNODB_METRICS 表格查询计数器数据。有关使用信息,请参阅 第 15.15.6 节,“InnoDB INFORMATION_SCHEMA Metrics Table”

  • innodb_numa_interleave
    命令行格式 --innodb-numa-interleave[={OFF|ON}]
    系统变量 innodb_numa_interleave
    范围 全局的
    动态的
    SET_VAR提示适用
    类型 布尔值
    默认值 OFF

    启用 NUMA 交错内存策略以分配InnoDB缓冲池。启用后 ,将为 mysqld进程innodb_numa_interleave设置 NUMA 内存策略 。分配缓冲池后 ,NUMA 内存策略设置回. 要使该 选项可用,MySQL 必须在支持 NUMA 的 Linux 系统上编译。 MPOL_INTERLEAVE``InnoDB``MPOL_DEFAULTinnodb_numa_interleave

    CMakeWITH_NUMA根据当前平台是否NUMA支持设置默认 有关更多信息,请参阅 第 2.9.7 节,“MySQL 源配置选项”

  • innodb_old_blocks_pct
    命令行格式 --innodb-old-blocks-pct=#
    系统变量 innodb_old_blocks_pct
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 37
    最小值 5
    最大值 95

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

    有关更多信息,请参阅 第 15.8.3.3 节,“使缓冲池扫描抗性”。有关缓冲池管理、 LRU算法和 驱逐策略的信息,请参阅 第 15.5.1 节,“缓冲池”

  • innodb_old_blocks_time
    命令行格式 --innodb-old-blocks-time=#
    系统变量 innodb_old_blocks_time
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 1000
    最小值 0
    最大值 2**32-1
    单元 毫秒

    非零值可防止 缓冲池被仅在短时间内引用的数据填充,例如在全表扫描期间。增加此值可以更好地防止全表扫描干扰缓冲池中缓存的数据。

    指定插入旧子列表的块在第一次访问后必须停留多长时间,然后才能移动到新子列表。如果值为 0,则插入旧子列表的块在第一次访问时立即移动到新子列表,无论插入后多久访问。如果该值大于 0,则块将保留在旧子列表中,直到在第一次访问后至少那么多毫秒发生访问。例如,值 1000 会导致块在第一次访问后在旧子列表中停留 1 秒钟,然后才可以移动到新子列表。

    默认值为 1000。

    此变量通常与 结合使用 innodb_old_blocks_pct。有关更多信息,请参阅 第 15.8.3.3 节,“使缓冲池扫描抗性”。有关缓冲池管理、 LRU算法和 驱逐策略的信息,请参阅 第 15.5.1 节,“缓冲池”

  • innodb_online_alter_log_max_size
    命令行格式 --innodb-online-alter-log-max-size=#
    系统变量 innodb_online_alter_log_max_size
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 134217728
    最小值 65536
    最大值 2**64-1
    单元 字节

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

  • innodb_open_files
    命令行格式 --innodb-open-files=#
    系统变量 innodb_open_files
    范围 全局的
    动态(≥ 8.0.28) 是的
    动态 (≤ 8.0.27)
    SET_VAR提示适用
    类型 整数
    默认值 -1(表示自动调整大小;不要分配此文字值)
    最小值 10
    最大值 2147483647

    指定 InnoDB一次可以打开的最大文件数。最小值为 10。如果 innodb_file_per_table禁用,则默认值为 300;如果禁用,则默认值为 300;否则,默认值为 300 或 table_open_cache设置,以较高者为准。

    从 MySQL 8.0.28 开始, innodb_open_files可以在运行时使用 语句设置限制,其中是所需的 限制;例如: SELECT innodb_set_open_files_limit(*N*)Ninnodb_open_files

    1000);

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

    不允许 innodb_open_files使用 SET 语句进行设置。要 innodb_open_files在运行时设置,请使用上述 语句。 SELECT innodb_set_open_files_limit(*N*)

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

    从 MySQL 8.0.28 开始,为了防止非 LRU 托管文件消耗整个 innodb_open_files限制,非 LRU 托管文件被限制为限制的 90% innodb_open_files,这为 LRU 托管文件保留了 10% 的 innodb_open_files限制。

    innodb_open_files从 MySQL 8.0.24 到 MySQL 8.0.27, 临时表空间文件不计入 限制。

  • innodb_optimize_fulltext_only
    命令行格式 --innodb-optimize-fulltext-only[={OFF|ON}]
    系统变量 innodb_optimize_fulltext_only
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 布尔值
    默认值 OFF

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

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

  • innodb_page_cleaners
    命令行格式 --innodb-page-cleaners=#
    系统变量 innodb_page_cleaners
    范围 全局的
    动态的
    SET_VAR提示适用
    类型 整数
    默认值 4
    最小值 1
    最大值 64

    从缓冲池实例中刷新脏页的页面清理线程数。页面清理线程执行刷新列表和 LRU 刷新。当有多个页面清理线程时,每个缓冲池实例的缓冲池刷新任务被分派给空闲的页面清理线程。innodb_page_cleaners默认值为 4。如果页面清理线程的数量超过缓冲池实例的数量, 则 innodb_page_cleaners自动设置为与 相同的值 innodb_buffer_pool_instances

    如果您的工作负载在将脏页从缓冲池实例刷新到数据文件时受写入 IO 限制,并且如果您的系统硬件具有可用容量,则增加页面清理线程的数量可能有助于提高写入 IO 吞吐量。

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

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

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

    对于服务器启动和关闭不由 systemd 管理的系统,可以/etc/security/limits.conf. 例如,如果mysqld在用户下运行 ,您可以通过将这些行添加到来 mysql授权 用户: mysql``/etc/security/limits.conf

    mysql hard nice -20 mysql soft nice -20

    对于 systemd 托管系统,同样可以通过LimitNICE=-20在本地化的 systemd 配置文件中指定来实现。例如,创建一个名为 override.confin 的文件/etc/systemd/system/mysqld.service.d/override.conf 并添加以下条目:

    [Service] 20

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

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

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

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

    
    
    
    

    gt; cat /proc/mysqld_pid/limits | grep nice
    Max nice priority 18446744073709551596 18446744073709551596

  • innodb_page_size
    命令行格式 --innodb-page-size=#
    系统变量 innodb_page_size
    范围 全局的
    动态的
    SET_VAR提示适用
    类型 枚举
    默认值 16384
    有效值 4096``8192``16384``32768``65536

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

    innodb_page_size只能在初始化 MySQL 实例之前配置,之后不能更改。如果未指定值,则使用默认页面大小初始化实例。请参阅 第 15.8.1 节,“InnoDB 启动配置”

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

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

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

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

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

  • innodb_parallel_read_threads
    命令行格式 --innodb-parallel-read-threads=#
    介绍 8.0.14
    系统变量 innodb_parallel_read_threads
    范围 会议
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 4
    最小值 1
    最大值 256

    定义可用于并行聚集索引读取的线程数。从 MySQL 8.0.17 开始支持分区的并行扫描。并行读取线程可以提高CHECK TABLE 性能。InnoDB在操作期间读取聚集索引两次CHECK TABLE。第二次读取可以并行执行。此功能不适用于二级索引扫描。innodb_parallel_read_threads 会话变量必须设置为大于 1 的值才能进行并行聚集索引读取。 用于执行并行聚集索引读取的实际线程数由 innodb_parallel_read_threads 设置或要扫描的索引子树的数量,以较小者为准。扫描过程中读入缓冲池的页面保存在缓冲池LRU列表的尾部,以便在需要空闲缓冲池页面时可以快速丢弃。

    从 MySQL 8.0.17 开始,最大并行读取线程数 (256) 是所有客户端连接的线程总数。如果达到线程限制,则连接回退到使用单个线程。

  • innodb_print_all_deadlocks
    命令行格式 --innodb-print-all-deadlocks[={OFF|ON}]
    系统变量 innodb_print_all_deadlocks
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 布尔值
    默认值 OFF

    启用此选项后,有关用户事务中的所有 死锁的 信息都会InnoDB记录在 mysqld 错误日志中。SHOW ENGINE INNODB STATUS否则,您使用该命令只会看到有关最后一个死锁的信息。偶尔的 InnoDB死锁不一定是问题,因为InnoDB立即检测到条件并自动回滚其中一个事务。如果应用程序没有适当的错误处理逻辑来检测回滚并重试其操作,您可以使用此选项来解决为什么会发生死锁。大量死锁可能表明需要对发出 DML的事务或SELECT ... FOR UPDATE对多个表的语句进行重组,以便每个事务以相同的顺序访问表,从而避免死锁情况。

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

  • innodb_print_ddl_logs
    命令行格式 --innodb-print-ddl-logs[={OFF|ON}]
    系统变量 innodb_print_ddl_logs
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 布尔值
    默认值 OFF

    启用此选项会导致 MySQL 将 DDL 日志写入 stderr. 有关更多信息,请参阅 查看 DDL 日志

  • innodb_purge_batch_size
    命令行格式 --innodb-purge-batch-size=#
    系统变量 innodb_purge_batch_size
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 300
    最小值 1
    最大值 5000

    定义从历史列表 中清除一批解析和处理的撤消日志页数 。在多线程清除配置中,协调器清除线程除以 innodb_purge_batch_sizeinnodb_purge_threads页数并将其分配给每个清除线程。该 innodb_purge_batch_size 变量还定义了在每 128 次通过撤消日志迭代后清除释放的撤消日志页面的数量。

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

    有关相关信息,请参阅 第 15.8.9 节,“清除配置”

  • innodb_purge_threads
    命令行格式 --innodb-purge-threads=#
    系统变量 innodb_purge_threads
    范围 全局的
    动态的
    SET_VAR提示适用
    类型 整数
    默认值 4
    最小值 1
    最大值 32

    InnoDB 专门用于清除操作 的后台线程数 。增加该值会创建额外的清除线程,这可以提高 对多个表执行 DML操作的系统的效率。

    有关相关信息,请参阅 第 15.8.9 节,“清除配置”

  • innodb_purge_rseg_truncate_frequency
    命令行格式 --innodb-purge-rseg-truncate-frequency=#
    系统变量 innodb_purge_rseg_truncate_frequency
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 128
    最小值 1
    最大值 128

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

    innodb_purge_rseg_truncate_frequency 旨在与 innodb_undo_log_truncate. 有关详细信息,请参阅 截断撤消表空间

  • innodb_random_read_ahead
    命令行格式 --innodb-random-read-ahead[={OFF|ON}]
    系统变量 innodb_random_read_ahead
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 布尔值
    默认值 OFF

    启用随机 预读技术以优化InnoDBI/O。

    有关不同类型预读请求的性能注意事项的详细信息,请参阅 第 15.8.3.4 节,“配置 InnoDB 缓冲池预取(预读)”。有关一般 I/O 调整建议,请参阅 第 8.5.8 节,“优化 InnoDB 磁盘 I/O”

  • innodb_read_ahead_threshold
    命令行格式 --innodb-read-ahead-threshold=#
    系统变量 innodb_read_ahead_threshold
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 56
    最小值 0
    最大值 64

    控制用于将页面预取到 缓冲 池中 的线性 预的灵敏度。如果 从一个扩展区(64 页)中 顺序 读取至少 页,它会为整个后续扩展区启动异步读取。允许的值范围是 0 到 64。值 0 将禁用预读。对于默认值 56, 必须从一个扩展区按顺序读取至少 56 个页面才能启动对下一个扩展区的异步读取。 InnoDB``InnoDBinnodb_read_ahead_thresholdInnoDB

    了解通过预读机制读取了多少页面,以及这些页面中有多少被从缓冲池中逐出而从未被访问过,这在微调 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并显示在输出BUFFER POOL AND MEMORY部分中SHOW ENGINE INNODB STATUS

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

  • innodb_read_io_threads
    命令行格式 --innodb-read-io-threads=#
    系统变量 innodb_read_io_threads
    范围 全局的
    动态的
    SET_VAR提示适用
    类型 整数
    默认值 4
    最小值 1
    最大值 64

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

    笔记

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

  • innodb_read_only
    命令行格式 --innodb-read-only[={OFF|ON}]
    系统变量 innodb_read_only
    范围 全局的
    动态的
    SET_VAR提示适用
    类型 布尔值
    默认值 OFF

    InnoDB以只读模式 启动。用于在只读介质上分发数据库应用程序或数据集。也可以在数据仓库中使用,在多个实例之间共享同一个数据目录。有关更多信息,请参阅第 15.8.2 节,“将 InnoDB 配置为只读操作”

    以前,启用 系统变量会阻止仅为存储引擎innodb_read_only创建和删除表 。InnoDB从 MySQL 8.0 开始,启用会 innodb_read_only阻止所有存储引擎的这些操作。任何存储引擎的表创建和删除操作都会修改mysql系统数据库中的数据字典表,但这些表使用存储引擎并且在启用InnoDB时无法修改 。innodb_read_only同样的原则也适用于其他需要修改数据字典表的表操作。例子:

    此外,mysql 系统数据库中的其他表使用InnoDBMySQL 8.0 中的存储引擎。将这些表设为只读会限制修改它们的操作。例子:

  • innodb_redo_log_archive_dirs
    命令行格式 --innodb-redo-log-archive-dirs
    介绍 8.0.17
    系统变量 innodb_redo_log_archive_dirs
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 细绳
    默认值 NULL

    定义可以在其中创建重做日志归档文件的标记目录。您可以在分号分隔的列表中定义多个带标签的目录。例如:

    'label1:/backups1;label2:/backups2'

    标签可以是任何字符串,但不允许使用冒号 (?。也允许使用空标签,但在这种情况下仍需要冒号 (?。

    必须指定路径,并且目录必须存在。路径可以包含冒号 (’:’),但不允许使用分号 (?。

  • innodb_redo_log_encrypt
    命令行格式 --innodb-redo-log-encrypt[={OFF|ON}]
    系统变量 innodb_redo_log_encrypt
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 布尔值
    默认值 OFF

    InnoDB 控制使用静态数据加密功能 加密的表的重做日志数据的加密。重做日志数据的加密默认是禁用的。有关详细信息,请参阅 重做日志加密

  • innodb_replication_delay
    命令行格式 --innodb-replication-delay=#
    系统变量 innodb_replication_delay
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 0
    最小值 0
    最大值 4294967295
    单元 毫秒

    innodb_thread_concurrency如果达到 了副本服务器上的复制线程延迟(以毫秒为单位 )。

  • innodb_rollback_on_timeout
    命令行格式 --innodb-rollback-on-timeout[={OFF|ON}]
    系统变量 innodb_rollback_on_timeout
    范围 全局的
    动态的
    SET_VAR提示适用
    类型 布尔值
    默认值 OFF

    InnoDB 默认情况下仅回滚事务超时的最后一条语句。如果 --innodb-rollback-on-timeout指定,事务超时会导致 InnoDB中止并回滚整个事务。

    有关更多信息,请参阅 第 15.21.5 节,“InnoDB 错误处理”

  • innodb_rollback_segments
    命令行格式 --innodb-rollback-segments=#
    系统变量 innodb_rollback_segments
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 128
    最小值 1
    最大值 128

    innodb_rollback_segments 定义分配给每个撤消表空间的 回滚段数 以及生成撤消记录的事务的全局临时表空间。每个回滚段支持的事务数取决于InnoDB页面大小和分配给每个事务的撤消日志数。有关更多信息,请参阅第 15.6.6 节,“撤消日志”

    有关相关信息,请参阅 第 15.3 节,“InnoDB 多版本”。有关撤消表空间的信息,请参阅 第 15.6.3.4 节,“撤消表空间”

  • innodb_saved_page_number_debug
    命令行格式 --innodb-saved-page-number-debug=#
    系统变量 innodb_saved_page_number_debug
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 0
    最小值 0
    最大值 2**23-1

    保存页码。设置该 innodb_fil_make_page_dirty_debug 选项会弄脏由 定义的页面 innodb_saved_page_number_debug。该 innodb_saved_page_number_debug 选项仅在使用CMake选项编译调试支持时可用。 WITH_DEBUG

  • innodb_segment_reserve_factor
    命令行格式 --innodb-segment-reserve-factor=#
    介绍 8.0.26
    系统变量 innodb_segment_reserve_factor
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 数字
    默认值 12.5
    最小值 0.03
    最大值 40

    定义保留为空页的表空间文件段页的百分比。该设置适用于 file-per-table 和通用表空间。默认设置为 12.5%,这 innodb_segment_reserve_factor 与以前的 MySQL 版本中保留的页面百分比相同。

    有关更多信息,请参阅 配置保留文件段页面的百分比

  • innodb_sort_buffer_size
    命令行格式 --innodb-sort-buffer-size=#
    系统变量 innodb_sort_buffer_size
    范围 全局的
    动态的
    SET_VAR提示适用
    类型 整数
    默认值 1048576
    最小值 65536
    最大值 67108864
    单元 字节

    该变量定义:

    • 创建或重建二级索引的联机 DDL 操作的排序缓冲区大小。然而,从 MySQL 8.0.27 开始,这个责任被 innodb_ddl_buffer_size 变量所包含。
    • 在线 DDL操作 期间记录并发 DML 时临时日志文件的扩展量 ,以及临时日志文件读取缓冲区和写入缓冲区的大小。

    有关相关信息,请参阅 第 15.12.3 节,“在线 DDL 空间要求”

  • innodb_spin_wait_delay
    命令行格式 --innodb-spin-wait-delay=#
    系统变量 innodb_spin_wait_delay
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 6
    最小值 0
    最大值(64 位平台,≤ 8.0.13) 2**64-1
    最大值(32 位平台,≤ 8.0.13) 2**32-1
    最大值(≥ 8.0.14) 1000

    自旋锁 轮询之间的最大延迟 。该机制的底层实现因硬件和操作系统的组合而异,因此延迟不对应于固定的时间间隔。

    可以与 innodb_spin_wait_pause_multiplier 变量结合使用,以更好地控制自旋锁轮询延迟的持续时间。

    有关更多信息,请参阅 第 15.8.8 节,“配置自旋锁轮询”

  • innodb_spin_wait_pause_multiplier
    命令行格式 --innodb-spin-wait-pause-multiplier=#
    介绍 8.0.16
    系统变量 innodb_spin_wait_pause_multiplier
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 50
    最小值 1
    最大值 100

    定义一个乘数值,用于确定当线程等待获取互斥锁或 rw-lock 时发生的自旋等待循环中 PAUSE 指令的数量。

    有关更多信息,请参阅 第 15.8.8 节,“配置自旋锁轮询”

  • innodb_stats_auto_recalc
    命令行格式 --innodb-stats-auto-recalc[={OFF|ON}]
    系统变量 innodb_stats_auto_recalc
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 布尔值
    默认值 ON

    导致在表中的数据发生重大更改后InnoDB自动重新计算 持久统计信息。阈值为表中行数的 10%。此设置适用于 innodb_stats_persistent 启用该选项时创建的表。也可以通过 STATS_PERSISTENT=1CREATE TABLEor ALTER TABLE语句中指定来配置自动统计重新计算。为生成统计数据而采样的数据量由 innodb_stats_persistent_sample_pages 变量控制。

    有关更多信息,请参阅 第 15.8.10.1 节,“配置持久优化器统计参数”

  • innodb_stats_include_delete_marked
    命令行格式 --innodb-stats-include-delete-marked[={OFF|ON}]
    系统变量 innodb_stats_include_delete_marked
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 布尔值
    默认值 OFF

    默认情况下,InnoDB在计算统计信息时读取未提交的数据。对于从表中删除行的未提交事务, InnoDB在计算行估计和索引统计信息时排除被删除标记的记录,这可能会导致在表上同时使用以外的事务隔离级别 READ UNCOMMITTED。为了避免这种情况, innodb_stats_include_delete_marked 可以启用以确保InnoDB 在计算持久优化器统计信息时包括删除标记的记录。

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

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

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

  • innodb_stats_method
    命令行格式 --innodb-stats-method=value
    系统变量 innodb_stats_method
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 枚举
    默认值 nulls_equal
    有效值 nulls_equal``nulls_unequal``nulls_ignored

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

    用于生成表统计信息的方法会影响优化器如何为查询执行选择索引,如第 8.3.8 节,“InnoDB 和 MyISAM 索引统计信息收集”中所述。

  • innodb_stats_on_metadata
    命令行格式 --innodb-stats-on-metadata[={OFF|ON}]
    系统变量 innodb_stats_on_metadata
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 布尔值
    默认值 OFF

    此选项仅适用于将优化器 统计信息配置为非持久性的情况。禁用优化器统计信息 innodb_stats_persistent或使用 STATS_PERSISTENT=0. 有关更多信息,请参阅第 15.8.10.2 节,“配置非持久优化器统计参数”

    innodb_stats_on_metadata 启用时, 在元数据语句(例如或访问 或 表时)InnoDB更新非持久 统计信息。(这些更新类似于 发生的情况 。)禁用时, 在这些操作期间不更新统计信息。禁用该设置可以提高具有大量表或索引的模式的访问速度。它还可以提高 涉及 表 的查询的执行计划的稳定性。SHOW TABLE STATUSINFORMATION_SCHEMA.TABLESINFORMATION_SCHEMA.STATISTICSANALYZE TABLEInnoDB``InnoDB

    要更改设置,请发出语句,其中是or (or or )。更改设置需要足够的权限来设置全局系统变量(请参阅第 5.1.9.1 节,“系统变量权限”)并立即影响所有连接的操作。 SET GLOBAL innodb_stats_on_metadata=*mode*``*mode*``ON``OFF``1``0

  • innodb_stats_persistent
    命令行格式 --innodb-stats-persistent[={OFF|ON}]
    系统变量 innodb_stats_persistent
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 布尔值
    默认值 ON

    指定是否InnoDB将索引统计信息持久化到磁盘。否则,可能会频繁重新计算统计信息,从而导致 查询执行计划发生变化。此设置在创建表时与每个表一起存储。您可以 innodb_stats_persistent在创建表之前在全局级别进行设置,或者使用 and 语句的STATS_PERSISTENT子句 覆盖系统范围的设置并为单个表配置持久统计信息。 CREATE TABLEALTER TABLE

    有关更多信息,请参阅 第 15.8.10.1 节,“配置持久优化器统计参数”

  • innodb_stats_persistent_sample_pages
    命令行格式 --innodb-stats-persistent-sample-pages=#
    系统变量 innodb_stats_persistent_sample_pages
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 20
    最小值 1
    最大值 18446744073709551615

    估计索引列的基数和其他 统计信息时要采样 的索引页数,例如由 . 增加该值可以提高索引统计的准确性,从而可以改进查询执行计划,但代价是增加了 对表执行期间的 I/O。有关更多信息,请参阅第 15.8.10.1 节,“配置持久优化器统计参数”ANALYZE TABLEANALYZE TABLEInnoDB

    笔记

    设置较高的值 innodb_stats_persistent_sample_pages 可能会导致ANALYZE TABLE执行时间过长。要估计 访问的数据库页数ANALYZE TABLE,请参阅 第 15.8.10.3 节,“估计 InnoDB 表的 ANALYZE TABLE 复杂性”

    innodb_stats_persistent_sample_pages 仅在 innodb_stats_persistent为表启用时适用;当 innodb_stats_persistent被禁用时, innodb_stats_transient_sample_pages 改为应用。

  • innodb_stats_transient_sample_pages
    命令行格式 --innodb-stats-transient-sample-pages=#
    系统变量 innodb_stats_transient_sample_pages
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 8
    最小值 1
    最大值 18446744073709551615

    估计索引列的基数和其他 统计信息时要采样 的索引页数,例如由 . 默认值为8。增加该值可以提高索引统计的准确性,从而可以改进 查询执行计划,但代价是增加了打开 表或重新计算统计时的I/O。有关更多信息,请参阅 第 15.8.10.2 节,“配置非持久优化器统计参数”ANALYZE TABLEInnoDB

    笔记

    设置较高的值 innodb_stats_transient_sample_pages 可能会导致ANALYZE TABLE执行时间过长。要估计 访问的数据库页数ANALYZE TABLE,请参阅 第 15.8.10.3 节,“估计 InnoDB 表的 ANALYZE TABLE 复杂性”

    innodb_stats_transient_sample_pages 仅适用 innodb_stats_persistent于对表禁用时;当 innodb_stats_persistent启用时, innodb_stats_persistent_sample_pages 改为应用。取而代之 innodb_stats_sample_pages。有关更多信息,请参阅 第 15.8.10.2 节,“配置非持久优化器统计参数”

  • innodb_status_output
    命令行格式 --innodb-status-output[={OFF|ON}]
    系统变量 innodb_status_output
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 布尔值
    默认值 OFF

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

  • innodb_status_output_locks
    命令行格式 --innodb-status-output-locks[={OFF|ON}]
    系统变量 innodb_status_output_locks
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 布尔值
    默认值 OFF

    启用或禁用InnoDB锁定监视器。启用后,InnoDB锁定监视器会在 SHOW ENGINE INNODB STATUS输出中打印有关锁定的附加信息,并在定期输出中打印到 MySQL 错误日志。InnoDB锁定监视器的定期输出作为标准InnoDB 监视器输出的一部分打印。InnoDB因此,必须启用标准监视器才能使InnoDB Lock Monitor 定期将数据打印到 MySQL 错误日志。有关更多信息,请参阅 第 15.17.2 节,“启用 InnoDB 监视器”

  • innodb_strict_mode
    命令行格式 --innodb-strict-mode[={OFF|ON}]
    系统变量 innodb_strict_mode
    范围 全球, 会话
    动态的 是的
    SET_VAR提示适用
    类型 布尔值
    默认值 ON

    innodb_strict_mode启用 时,InnoDB在某些情况下返回错误而不是警告。

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

    innodb_strict_mode 设置会影响对 、 、 和 语句的语法 CREATE TABLE错误 ALTER TABLECREATE INDEX处理 OPTIMIZE TABLEinnodb_strict_mode还启用记录大小检查,以便 由于记录对于所选页面大小而言太大而导致 INSERT或永远不会失败。UPDATE

    Oracle 建议 在、 和 语句中innodb_strict_mode使用 ROW_FORMATand KEY_BLOCK_SIZE子句 时启用。禁用时 ,忽略冲突的子句并创建表或索引,在消息日志中只显示警告。生成的表可能具有与预期不同的特征,例如在尝试创建压缩表时缺少压缩支持。启用时 ,此类问题会立即生成错误,并且不会创建表或索引。 CREATE TABLEALTER TABLECREATE INDEXinnodb_strict_modeInnoDBinnodb_strict_mode

    innodb_strict_mode您可以在启动时在命令行上mysqld或在 MySQL配置文件 中启用或禁用 。您还可以 innodb_strict_mode在运行时使用语句启用或禁用,其中is或。更改设置需要足够的权限来设置全局系统变量(请参阅 第 5.1.9.1 节,“系统变量权限”)并影响随后连接的所有客户端的操作。任何客户端都可以更改 的设置 ,并且该设置仅影响该客户端。 SET [GLOBAL|SESSION] innodb_strict_mode=*mode*``*mode*``ON``OFF``GLOBAL``SESSIONinnodb_strict_mode

    innodb_strict_mode不适用于一般表空间。通用表空间的表空间管理规则独立于 innodb_strict_mode. 有关更多信息,请参阅第 13.1.21 节,“CREATE TABLESPACE 语句”

    从 MySQL 8.0.26 开始,设置这个系统变量的 session 值是一个受限操作。会话用户必须具有足以设置受限会话变量的权限。请参见 第 5.1.9.1 节,“系统变量权限”

  • innodb_sync_array_size
    命令行格式 --innodb-sync-array-size=#
    系统变量 innodb_sync_array_size
    范围 全局的
    动态的
    SET_VAR提示适用
    类型 整数
    默认值 1
    最小值 1
    最大值 1024

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

  • innodb_sync_spin_loops
    命令行格式 --innodb-sync-spin-loops=#
    系统变量 innodb_sync_spin_loops
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 30
    最小值 0
    最大值 4294967295

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

  • innodb_sync_debug
    命令行格式 --innodb-sync-debug[={OFF|ON}]
    系统变量 innodb_sync_debug
    范围 全局的
    动态的
    SET_VAR提示适用
    类型 布尔值
    默认值 OFF

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

  • innodb_table_locks
    命令行格式 --innodb-table-locks[={OFF|ON}]
    系统变量 innodb_table_locks
    范围 全球, 会话
    动态的 是的
    SET_VAR提示适用
    类型 布尔值
    默认值 ON

    如果autocommit = 0InnoDB荣誉LOCK TABLESLOCK TABLES ... WRITE直到所有其他线程都释放了对表的所有锁,MySQL 才会返回。默认值为 innodb_table_locks1,这意味着LOCK TABLES 如果 autocommit = 0.

    innodb_table_locks = 0对于用 . 显式锁定的表无效 LOCK TABLES ... WRITE。它确实对通过 LOCK TABLES ... WRITE隐式(例如,通过触发器)或通过LOCK TABLES ... READ.

    有关相关信息,请参阅 第 15.7 节,“InnoDB 锁定和事务模型”

  • innodb_temp_data_file_path
    命令行格式 --innodb-temp-data-file-path=file_name
    系统变量 innodb_temp_data_file_path
    范围 全局的
    动态的
    SET_VAR提示适用
    类型 细绳
    默认值 ibtmp1:12M:autoextend

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

    如果没有为 指定值 ,则默认行为是创建目录中命名的 innodb_temp_data_file_path单个自动扩展数据文件 。初始文件大小略大于 12MB。 ibtmp1innodb_data_home_dir

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

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

    全局临时表空间数据文件不能与另一个InnoDB数据文件同名。任何创建全局临时表空间数据文件的无能或错误都被视为致命并且服务器启动被拒绝。

    文件大小以 KB、MB 或 GB 为单位,通过附加 KMG大小值。文件大小总和必须略大于 12MB。

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

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

    [mysqld] ;ibtmp2:12M:autoextend:max:500M

    autoextend选项会导致数据文件在可用空间不足时自动增加大小。autoextend默认增量为 64MB 。要修改增量,请更改 innodb_autoextend_increment 变量设置。

    全局临时表空间数据文件的目录路径由 innodb_data_home_dir和 定义的路径连接而成innodb_temp_data_file_path

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

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

    有关详细信息,请参阅 全局临时表空间

  • innodb_temp_tablespaces_dir
    命令行格式 --innodb-temp-tablespaces-dir=dir_name
    介绍 8.0.13
    系统变量 innodb_temp_tablespaces_dir
    范围 全局的
    动态的
    SET_VAR提示适用
    类型 目录名称
    默认值 #innodb_temp

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

    从 MySQL 8.0.16 开始,会话临时表空间始终存储用户创建的临时表和优化器使用InnoDB. (以前,内部临时表的磁盘存储引擎由 internal_tmp_disk_storage_engine 系统变量确定,不再支持。请参阅 磁盘内部临时表的存储引擎。)

    有关更多信息,请参阅 会话临时表空间

  • innodb_thread_concurrency
    命令行格式 --innodb-thread-concurrency=#
    系统变量 innodb_thread_concurrency
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 0
    最小值 0
    最大值 1000

    定义允许的最大线程数 InnoDB。值 0(默认值)被解释为无限并发(无限制)。此变量用于在高并发系统上进行性能调优。

    InnoDB试图保持内部的线程数InnoDB小于或等于 innodb_thread_concurrency 限制。一旦达到限制,额外的线程将被放入“先进先出”(FIFO)队列中等待线程。等待锁的线程不计入并发执行的线程数。

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

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

    • 如果工作负载的并发用户线程数一直很小并且不影响性能,请设置 innodb_thread_concurrency=0 (无限制)。
    • 如果您的工作负载一直很重或偶尔出现峰值,请设置一个 innodb_thread_concurrency 值并对其进行调整,直到找到提供最佳性能的线程数。例如,假设您的系统通常有 40 到 50 个用户,但这个数字会定期增加到 60、70 或更多。通过测试,您发现在 80 个并发用户的限制下,性能基本保持稳定。在这种情况下,设置 innodb_thread_concurrency 为 80。
    • 如果您不想InnoDB为用户线程使用超过一定数量的虚拟 CPU(例如 20 个虚拟 CPU),请设置 innodb_thread_concurrency 为此数量(或可能更低,具体取决于性能测试)。如果您的目标是将 MySQL 与其他应用程序隔离,请考虑将 mysqld进程专门绑定到虚拟 CPU。mysqld但是请注意,如果进程不是一直很忙,则独占绑定可能会导致非最佳硬件使用 。在这种情况下,您可以将 mysqld进程绑定到虚拟 CPU,但允许其他应用程序使用部分或全部虚拟 CPU。

      笔记

      从操作系统的角度来看,使用资源管理解决方案来管理应用程序之间如何共享 CPU 时间可能比绑定 mysqld进程更可取。例如,您可以在其他关键进程未运行时将 90% 的虚拟 CPU 时间分配给给定的应用程序*,并在其他关键进程**正在*运行时将该值缩小到 40% 。

    • 在某些情况下,最佳 innodb_thread_concurrency 设置可能小于虚拟 CPU 的数量。
    • innodb_thread_concurrency 由于对系统内部和资源的争用增加,过高 的 值会导致性能下降。
    • 定期监控和分析您的系统。对工作负载、用户数量或计算环境的更改可能需要您调整 innodb_thread_concurrency 设置。

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

    有关相关信息,请参阅 第 15.8.4 节,“为 InnoDB 配置线程并发”

  • innodb_thread_sleep_delay
    命令行格式 --innodb-thread-sleep-delay=#
    系统变量 innodb_thread_sleep_delay
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 10000
    最小值 0
    最大值 1000000
    单元 微秒

    InnoDB线程在加入InnoDB队列之前休眠 多长时间,以微秒为单位。默认值为 10000。值为 0 将禁用睡眠。您可以设置 innodb_adaptive_max_sleep_delay 为允许的最大值 innodb_thread_sleep_delay,并根据当前线程调度活动InnoDB自动向上或向下调整 。innodb_thread_sleep_delay这种动态调整有助于线程调度机制在系统负载较轻或接近满负荷运行时平稳运行。

    有关更多信息,请参阅 第 15.8.4 节,“为 InnoDB 配置线程并发”

  • innodb_tmpdir
    命令行格式 --innodb-tmpdir=dir_name
    系统变量 innodb_tmpdir
    范围 全球, 会话
    动态的 是的
    SET_VAR提示适用
    类型 目录名称
    默认值 NULL

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

    重建表的在线ALTER TABLE操作也会 在与原始表相同的目录中创建一个*中间表文件。*该 innodb_tmpdir选项不适用于中间表文件。

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

    需要该FILE权限才能配置 innodb_tmpdir

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

    在复制环境中,仅 innodb_tmpdir当所有服务器具有相同的操作系统环境时才考虑复制设置。否则,在运行重建表的innodb_tmpdir 联机操作时,复制设置可能会导致复制失败。ALTER TABLE如果服务器运行环境不同,建议您 innodb_tmpdir在每台服务器上单独配置。

    有关详细信息,请参阅 第 15.12.3 节,“在线 DDL 空间要求”。有关在线ALTER TABLE操作的信息,请参阅 第 15.12 节,“InnoDB 和在线 DDL”

  • innodb_trx_purge_view_update_only_debug
    命令行格式 --innodb-trx-purge-view-update-only-debug[={OFF|ON}]
    系统变量 innodb_trx_purge_view_update_only_debug
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 布尔值
    默认值 OFF

    暂停清除已删除标记的记录,同时允许更新清除视图。此选项会人为地创建清除视图已更新但尚未执行清除的情况。仅当使用 CMake选项编译调试支持时,此选项才可用。 WITH_DEBUG

  • innodb_trx_rseg_n_slots_debug
    命令行格式 --innodb-trx-rseg-n-slots-debug=#
    系统变量 innodb_trx_rseg_n_slots_debug
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 0
    最小值 0
    最大值 1024

    为查找撤消日志段的空闲槽的函数 设置一个调试标志,该标志限制 TRX_RSEG_N_SLOTS为给定值 。trx_rsegf_undo_find_free仅当使用 CMake选项编译调试支持时,此选项才可用。 WITH_DEBUG

  • innodb_undo_directory
    命令行格式 --innodb-undo-directory=dir_name
    系统变量 innodb_undo_directory
    范围 全局的
    动态的
    SET_VAR提示适用
    类型 目录名称

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

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

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

    如果未指定不同的路径,则 使用CREATE UNDO TABLESPACE语法创建的 撤消表空间将 在变量定义的目录中创建。innodb_undo_directory

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

  • innodb_undo_log_encrypt
    命令行格式 --innodb-undo-log-encrypt[={OFF|ON}]
    系统变量 innodb_undo_log_encrypt
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 布尔值
    默认值 OFF

    InnoDB 控制使用静态数据加密功能 加密的表的撤消日志数据的加密。仅适用于驻留在单独的撤消表空间中的撤消日志。请参阅 第 15.6.3.4 节,“撤消表空间”。驻留在系统表空间中的撤消日志数据不支持加密。有关详细信息,请参阅 撤消日志加密

  • innodb_undo_log_truncate
    命令行格式 --innodb-undo-log-truncate[={OFF|ON}]
    系统变量 innodb_undo_log_truncate
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 布尔值
    默认值 ON

    启用后,超过定义的阈值的撤消表空间将 innodb_max_undo_log_size被标记为截断。只有撤消表空间可以被截断。不支持截断驻留在系统表空间中的撤消日志。要发生截断,必须至少有两个撤消表空间。

    innodb_purge_rseg_truncate_frequency 变量可用于加快撤消表空间的截断。

    有关详细信息,请参阅 截断撤消表空间

  • innodb_undo_tablespaces
    命令行格式 --innodb-undo-tablespaces=#
    已弃用 是的
    系统变量 innodb_undo_tablespaces
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 2
    最小值 2
    最大值 127

    定义使用的 撤消表空间InnoDB的数量。默认值和最小值为 2。

    笔记

    从 MySQL 8.0.14 开始,该innodb_undo_tablespaces 变量已弃用并且不再可配置。预计它会在未来的版本中被删除。

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

  • innodb_use_fdatasync
    命令行格式 --innodb-use-fdatasync[={OFF|ON}]
    介绍 8.0.26
    系统变量 innodb_use_fdatasync
    范围 全局的
    动态的 是的
    SET_VAR提示适用
    类型 布尔值
    默认值 OFF

    在支持fdatasync() 系统调用的平台上,启用该 innodb_use_fdatasync变量允许使用fdatasync()而不是 fsync()系统调用来进行操作系统刷新。除非fdatasync()后续数据检索需要,否则调用不会刷新对文件元数据的更改,从而提供潜在的性能优势。

    设置的子集, innodb_flush_method例如fsyncO_DSYNCO_DIRECTusefsync() 系统调用。该 innodb_use_fdatasync变量在使用这些设置时适用。

  • innodb_use_native_aio
    命令行格式 --innodb-use-native-aio[={OFF|ON}]
    系统变量 innodb_use_native_aio
    范围 全局的
    动态的
    SET_VAR提示适用
    类型 布尔值
    默认值 ON

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

    Windows 系统上的异步 I/O功能InnoDB在 Linux 系统上可用。(其他类 Unix 系统继续使用同步 I/O 调用。)此功能提高了严重 I/O 绑定系统的可伸缩性,这些系统通常在 SHOW ENGINE INNODB STATUS\G输出中显示许多挂起的读/写。

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

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

    您通常可以通过将更高的限制写入/proc/sys/fs/aio-max-nr.

    但是,如果操作系统中的异步 I/O 子系统出现问题而无法InnoDB启动,您可以使用 innodb_use_native_aio=0. InnoDB如果检测到潜在问题(例如tmpdir位置、 tmpfs文件系统和不支持 AIO on 的 Linux 内核的组合),也可能会在启动期间自动禁用此选项 tmpfs

    有关更多信息,请参阅 第 15.8.6 节,“在 Linux 上使用异步 I/O”

  • innodb_validate_tablespace_paths
    命令行格式 --innodb-validate-tablespace-paths[={OFF|ON}]
    介绍 8.0.21
    系统变量 innodb_validate_tablespace_paths
    范围 全局的
    动态的
    SET_VAR提示适用
    类型 布尔值
    默认值 ON

    控制表空间文件路径验证。在启动时, InnoDB根据存储在数据字典中的表空间文件路径验证已知表空间文件的路径,以防表空间文件已移动到不同的位置。该 innodb_validate_tablespace_paths 变量允许禁用表空间路径验证。此功能适用于不移动表空间文件的环境。禁用路径验证可以缩短具有大量表空间文件的系统的启动时间。

    警告

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

    有关更多信息,请参阅 第 15.6.3.7 节,“禁用表空间路径验证”

  • innodb_version

    InnoDB版本号 。在 MySQL 8.0 中, InnoDB不适用单独的版本编号,此值与version服务器的编号相同。

  • innodb_write_io_threads
    命令行格式 --innodb-write-io-threads=#
    系统变量 innodb_write_io_threads
    范围 全局的
    动态的
    SET_VAR提示适用
    类型 整数
    默认值 4
    最小值 1
    最大值 64

    中写入操作的 I/O 线程数 InnoDB。默认值为 4。其对应的读取线程是 innodb_read_io_threads. 有关更多信息,请参阅 第 15.8.5 节,“配置后台 InnoDB I/O 线程的数量”。有关一般 I/O 调整建议,请参阅 第 8.5.8 节,“优化 InnoDB 磁盘 I/O”

    笔记

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

    还要考虑 的值 sync_binlog,它控制二进制日志到磁盘的同步。

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


数据运维技术 » 【基础原理】MySQL 数据库 InnoDB 启动选项和系统变量