innodb_adaptive_flushing
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | boolean | on | on/off |
是否启用innodb根据负载动态刷出脏页的功能。
一般情况下,5.7.5开始,innodb会在实例脏页比例到达innodb_max_dirty_pages_pct之后,刷出脏页。
除此之外,当redo切换的时候,也会造成刷出脏页,如果redo生产速度过快,会导致redo频繁切换导致数据库性能问题,这个参数可以根据redo的写出速度决定合适的脏页刷出速度,避免redo切换造成的性能损失。
innodb_adaptive_flushing_lwm
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | int | 10 | 0-70 |
innodb动态刷出脏页特性启用的redo使用比例的低水位线。
innodb_adaptive_hash_index
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | boolean | on | on/off |
是否弃用innodb自适应hash索引。
为了加快数据的访问速度,innodb可以维护一个hash表,key是数据索引键的部分前缀,hash的value是对应的数据页的位置。
innodb_adaptive_hash_index_parts
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
No | int | 8 | 1-512 |
从 5.7.8 开始,AHI使用的索引开始支持分区,避免之前单个索引导致的锁争用问题。
innodb_adaptive_max_sleep_delay
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | int | 150000 | 0-1000000 |
让innodb根据负载自己决定innodb_thread_sleep_delay的数值。这个数字值单位为ms,在多于16个innodb线程的繁忙系统中,这个值可能能起到更大的作用。
innodb_additional_mem_pool_size
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
No | int | 8388608 | 2097152-4294967295 |
innodb存储数据字典以及其他一些内部数据结构使用的内存。如果使用超过了,innodb会继续分配内存,但会在errorlog里面报错。
innodb_api_bk_commit_interval
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | int | 5 | 1-1073741824 |
使用memcached插件的时候,每多少秒自动提交空闲的会话。
innodb_api_disable_rowlock
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
No | boolean | off | on/off |
当使用memcached插件的时候,对于dml操作,是否使用行锁,如果启用这个选项,会导致innodb采用表锁而不是行锁来锁定数据。
innodb_api_enable_binlog
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
No | boolean | off | on/off |
让memcached插件可以写入binlog,写入直接写为row格式,与binlog_format参数设置无关。
innodb_api_enable_mdl
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
No | boolean | off | on/off |
对memcached使用的表加上锁,避免通过SQL方式的DDL语句导致的表变更或者drop。
innodb_api_trx_level
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | int | 0 | 0/1/2/3 |
设置采用memcached插件时候,使用的数据库隔离级别。
- 0 读未提及交
- 1 读已提交
- 2 可重复读
- 3 序列化
innodb_autoextend_increment
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | int | 64 | 1-1000 |
innodb系统表空间满了之后,每次扩容的步长(MB)。这个参数对使用innodb_file_per_table=1独立出来的idb文件无效。
innodb_autoinc_lock_mode
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
No | int | 1 | 0/1/2 |
innodb自增主键生成的锁模式。
- 0 传统的 每次自增都会锁表
- 1 连续的 根据所需行数,每次先获取id,对insert select语法友好
- 2 交叉的 不锁表,每次处理一个,statement模式下不安全
innodb_background_drop_list_empty
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | boolean | off | on/off |
避免测试的时候,使用相同表的多个测试用例需要等待对应表在drop队列中执行完成。
innodb_buffer_pool_chunk_size
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
No | int | 134217728 | 1048576-innodb_buffer_pool_size/innodb_buffer_pool_instances |
innodb在线buffer pool调整的桶大小。调整必须被1048576(1MB)整除。
- 如果innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances 大于当前的buffer pool大小的话,innodb_buffer_pool_chunk_size值会自动变成innodb_buffer_pool_size / innodb_buffer_pool_instances.
- buffer size必须是 innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances的倍数,如果修改了innodb_buffer_pool_chunk_size,buffer pool会自动调整为innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances 的倍数。
为了避免对性能的影响,innodb_buffer_pool_size / innodb_buffer_pool_chunk_size不应该超过1000。
innodb_buffer_pool_dump_at_shutdown
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | boolean | on(>=5.7.7) | on/off |
是否在实例关闭的时候保存buffer pool的内容,避免加热buffer导致的性能问题。一般会与 innodb_buffer_pool_load_at_startup共用。
innodb_buffer_pool_dump_now
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | boolean | off | on/off |
马上导出innodb的pool里面的page。
innodb_buffer_pool_dump_pct
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | int | 100 <=5.7.6 25 | 1-100 |
对每个pool来说,应该导出的数据的百分比,从最热的数据开始导出。
innodb_buffer_pool_filename
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | string | ib_buffer_pool | 字符串 |
innodb pool导出的文件名。
innodb_buffer_pool_instances
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
No | int | 8 | 1-64 |
innodb buffer pool的数量,对于超大内存的实例来说,单个大的pool在并发情况下可能会导致性能损失。
innodb_buffer_pool_load_abort
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | boolean | off | on/off |
打断buffer pool的load。
innodb_buffer_pool_load_at_startup
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
No | boolean | off <=5.7.6 on | on/off |
mysql启动的时候。自动加载之前保存的buffer pool。
innodb_buffer_pool_load_now
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | boolean | off | on/off |
马上加载之前保存的buffer pool文件。
innodb_buffer_pool_size
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | int | 134217728 | 5242880-(2**64-1) |
buffer pool的总大小。
innodb_change_buffer_max_size
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | int | 25 | 0-50 |
change buffer占用buffer pool的比例。对于热写入应用来说,这个值调大,有利于写入性能。
innodb_change_buffering
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | enumeration | all | none/inserts/deletes/changes/purges/all |
当innodb使用change buffer的时候,对二级索引的变更会延后,避免io损失,这个选项决定对哪些操作启用change buffer。
- none 不使用change buffer
- inserts 对insert操作启用change buffer。
- deletes 明确定义为:对标记值可以被purge的过程使用change buffer。
- changes 对insert操作以及删除标记的操作使用change buffer。
- purges 当后台物理删除记录的时候,使用change buffer。
- all 对以上所有操作使用change buffer。
innodb_change_buffering_debug
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | int | 0 | 2 |
对innodb设置debug标记。
- 1 强制所有操作使用change buffer
- 2 当merge的时候,crash掉实例。
- 0 取消标记。
innodb_checksum_algorithm
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | enumeration | innodb <=5.7.6 CRC32 | innodb/crc32/none/strict_innodb/strict_crc32/strict_none |
innodb块验证使用的算法。
innodb为早期默认算法,crc32每次验证32位,innodb每次验证8位。 strict模式下,会在验证到有效但不匹配的page的时候,输出错误信息。
innodb_checksums
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
No | boolean | on | on/off |
innodb使用checksum指定的算法确认从磁盘读取的数据的完整性,避免磁盘或者操作系统问题。在5.6.3开始,这个参数开始废弃。采用innodb_checksum_algorithm替换。
innodb_cmp_per_index_enabled
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | boolean | off | on/off |
是否在 INFORMATION_SCHEMA.INNODB_CMP_PER_INDEX中维护每个索引压缩相关的信息。维护代价较大,如果使用了innodb的压缩表的话,一般推荐在测试阶段或者从库上启用。
innodb_commit_concurrency
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | int | 0 | 0-1000 |
同时可以commit的事务线程数量。运行的时候,不能从0调整为别的值或者从别的值调整为0,但大于0的话,可以在线调整。0即不限制同时提交事务的数量。
innodb_compress_debug
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | enumeration | none | none/zlib/lz4/lz4hc |
使用指定的算法1压缩所有表。
innodb_compression_failure_threshold_pct
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | int | 5 | 0-100 |
innodb压缩的时候,对页的填充比例,设置这个参数很多情况下可以避免压缩失败。
innodb_compression_level
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | int | 6 | 0-9 |
指定zlib压缩级别。
innodb_compression_pad_pct_max
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | int | 50 | 0-75 |
指定被压缩page最大可以填充的比例。
innodb_concurrency_tickets
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | int | 5000 | 1-4294967295 |
指定同时并发工作的innodb线程的数量。
innodb_create_intrinsic
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | boolean | off | on/off |
废弃参数。
建立优化型临时表。
允许innodb readonly模式下,对表的写入。不支持undo,原子性支持到行级别而不是语句级别,元数据不会保存在 INFORMATION_SCHEMA.INNODB_TEMP_TABLE_INFO 。
innodb_data_file_path
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
No | string | ibdata1:12M:autoextend | 文件路径描述 |
文件大小描述允许K,M,G单位,可以使用裸设备。可以指定多个文件,但是autoextend只能设置到一个文件上。
- 16KB页大小,数据文件最小大小需要3MB。
- 32KB页大小,最小需要6MB。
- 64KB页大小,最小需要12MB。
innodb_data_home_dir
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
No | string | 无 | 文件目录 |
innodb默认数据目录。
innodb_default_row_format
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | enumeration | DYNAMIC | DYNAMIC/COMPACT/REDUNDANT |
innodb 默认行格式。
innodb_disable_resize_buffer_pool_debug
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | boolean | on | on/OFF |
禁用对innodb buffer pool调整的debug。
innodb_disable_sort_file_cache
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | boolean | off | on/off |
如果启用,innodb将不会在临时排序文件上使用系统文件cache,而是使用 O_DIRECT 操作。
innodb_doublewrite
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
No | boolean | on | on/off |
默认启用,所有的数据都会被写入两次,首先写入双写缓存,之后再写入数据文件。
innodb_fast_shutdown
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | int | 1 | 0/1/2 |
- 0 在关闭数据库前,会刷出所有page页,change buffer也会被合并。
- 1 不会刷出change buffer,也不会刷出所有的page页,提升实例关闭效率。
- 2 只会刷出log,然后直接关闭。
innodb_fil_make_page_dirty_debug
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | int | 0 | 0-2**32 |
马上弄脏指定表空间的第一个页。
innodb_file_format
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | string | Barracuda | Antelope/Barracuda |
innodb默认的文件格式。这个参数只会影响到使用 innodb_file_per_table参数的表。Barracuda对于压缩,大的索引前缀等特性来说是必须的。
这个参数已经过期,兼容的主要目的是为了可以降级到mysql 5.1。
innodb_file_format_check
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
No | boolean | on | on/OFF |
在启动的时候,检查当前启动的mysql版本是否支持所有的数据文件,如果不支持,直接crash。
innodb_file_format_max
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | string | Barracuda | Antelope/Barracuda |
当前设置允许最高的file_format,如果设置了更高值,则回退使用设置的最高值。
innodb_file_per_table
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | boolean | on | ON/OFF |
每个表都使用单独的数据文件存储,除非在建表以及表结构变更的时候使用 TABLESPACE=innodb_system ,可以通过TABLESPACE=innodb_file_per_table从系统表空间提取出表到独立表空间。
innodb_fill_factor
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | int | 100 | 10-100 |
从mysql 5.7.5开始,innodb通过批量load的方式建立或者重建索引。这个参数指定了,当页填充比例到多少之后认为是满了。
设置为100,会在页内留出1/16的空间用于未来的增长。
innodb_flush_log_at_timeout
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | int | 1 | 1-2700 |
每间隔多少秒刷出一次log。避免过快刷出频率对binlog组提交速度的影响。
innodb_flush_log_at_trx_commit
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | enumeration | 1 | 0/1/2 |
在ACID的强一致性与commit之间性能的妥协。
- 0 每秒刷出一次log,避免性能问题。
- 1 在事务提交的时候,强制必须刷出所有log才算提交成功。
2 在0和1之间自动调整。
innodb_flush_log_at_timeout可以控制刷出间隔多于1s。
DDL以及其他的一些innodb内部方法flush log不受这个参数影响。
innodb的崩溃恢复需要依赖日志文件,会受到这个参数的影响。
一般来说,如果设置为1,也会同时设置参数 sync_binlog=1.
innodb_flush_method
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
No | string | NULL | fsync/O_DSYNC/littlesync/nosync/O_DIRECT/O_DIRECT_NO_FSYNC |
INNODB flush时候,操作文件所用的方法。
- fsync 采用fsync系统调用写出文件。
- O_DSYNC innodb 采用O_SYNC刷出日志文件,采用fsync写出数据文件。
- littlesync 测试,不用于线上。
- nosync 测试,不用于线上。
- O_DIRECT 采用O_DIRECT打开文件,然后使用fsync写出数据文件以及日志文件,
- O_DIRECT_NO_FSYNC,采用 O_DIRECT 写出文件,但不会在之后调用fsync。
innodb_flush_neighbors
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | enumeration | 1 | 0/1/2 |
决策是否在刷出脏页的时候,一起刷出同一个段的其他页。
- 0 不会刷出别的脏页。
- 1 刷出邻近的同一个段的脏页。
- 2 刷出同一个段的脏页。
innodb_flush_sync
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | boolean | on | on/OFF |
在checkpoint的时候,不会受到innodb_io_capacity的影响。
innodb_flushing_avg_loops
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | int | 30 | 1-1000 |
计算flush状态的时候,innodb维护的计数,用于控制自适应刷出的速度。
innodb_force_load_corrupted
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
No | boolean | off | on/off |
强行加载标记为损坏的表,主要用于非常规的数据恢复。
innodb_force_recovery
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
No | int | 0 | 0-6 |
启用故障恢复模式。
- 1 即便发现损坏的页,实例也正常运行。
- 2 避免innodb master以及purge线程的运行。
- 3 不回滚事务。
- 4 避免insert buffer的合并。
- 5 不扫描undo日志。
- 6 不做redo前滚,会导致部分数据页数据错误。
当大于0的时候,innodb会拒绝insert,update,delete请求,大于3的话,innodb会进入readonly模式。
innodb_ft_aux_table
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | String | 无 | db_name/table_name |
指定包含全文索引的表的名称。设置之后,可以在information_schema里面看到 INNODB_FT_INDEX_TABLE, INNODB_FT_INDEX_CACHE, INNODB_FT_CONFIG, INNODB_FT_DELETED, INNODB_FT_BEING_DELETED 相关的信息展示。
innodb_ft_cache_size
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
No | int | 8000000 | 1600000-80000000 |
innodb为每个表的全文索引分配的内存,单位bytes,当到达大小的时候,innodb会直接写入索引到磁盘。
innodb_ft_enable_diag_print
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | boolean | off | ON/OFF |
打开全文索引的诊断信息输出。
innodb_ft_enable_stopword
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | boolean | on | ON/OFF |
创建全文索引的时候,启用stopword。
会优先使用innodb_ft_user_stopword_table ,如果不存在,使用 innodb_ft_server_stopword_table选项指定的值。
innodb_ft_max_token_size
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
No | int | 84 | 0-84 |
innodb全文索引运行存储的最长的词长度。
innodb_ft_min_token_size
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
No | int | 3 | 0-16 |
innodb全文索引运行存储的最短词长度。
innodb_ft_num_word_optimize
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | int | 2000 | 合法自然数 |
OPTIMIZE TABLE的时候,每次处理的全文索引的词的数量。
innodb_ft_result_cache_limit
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | int | 2000000000 | 1000000-(2**32-1) |
单次查询,innodb为其准备的结果缓冲区大小。
innodb_ft_server_stopword_table
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | string | null | db_name/table_name |
指定自定义的stopworld表。
innodb_ft_sort_pll_degree
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
No | int | 2 | 1-32 |
并发创建全文索引的线程数量。
innodb_ft_total_cache_size
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
No | int | 640000000 | 32000000-1600000000 |
innodb全文索引总可使用的缓存大小,使用达到限制之后,会触发fsync刷出缓存。
innodb_ft_user_stopword_table
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | string | null | db_name/table_name |
指定自定义的stopworld表,优先级高于innodb_ft_server_stopword_table。
innodb_io_capacity
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | int | 200 | 100-(2**64-1) |
限制innodb后台任务活跃io的使用数量,对应关系为每秒使用io数量。5.7.2开始,这个参数也限制了buffer pool 重新加载的速度。
innodb_io_capacity_max
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | int | 2000 | 100-(2**64-1) |
限制innodb后台任务活跃io的使用数量,对应关系为每秒使用io数量。5.7.2开始,这个参数也限制了buffer pool 重新加载的速度。
这个参数限制最大值,如果innodb_io_capacity超过innodb_io_capacity_max,以innodb_io_capacity_max为准。
innodb_large_prefix
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | boolean | OFF <5.7.7 on | ON/OFF |
过期参数,当使用DYNAMIC或者COMPRESS行格式的时候,允许innodb索引字段长度超过 767 bytes (最高到 3072 bytes)。
innodb_limit_optimistic_insert_debug
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | int | 0 | 0-(2**32-1) |
限制B树里面一页可以存储的数据。0代表没有限制。
innodb_lock_wait_timeout
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | int | 50 | 1-1073741824 |
一个事务等待一个innodb行锁超时的最大时间。
客户端会收到以下错误:
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
相关参数innodb_rollback_on_timeout ,如果打开,超时会导致整个事务回滚,而不只是失败的语句。
innodb_locks_unsafe_for_binlog
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
No | boolean | off | on/OFF |
这个参数决定innodb查询以及索引扫描的时候如何使用gap锁。
一般来说,innodb会通过一个叫下一键锁的算法,锁定行以及gap锁。当innodb查询或者扫描索引的时候,会通过这种方式加锁,innodb会在所有扫描的索引记录上加上共享或者排他锁,也就是说,行锁,其实就是索引记录锁,另外,一个索引记录的下一键锁,也会锁定这个记录前面的gap。这个主要是防止,当一个事务查询记录R之后,有另外一个事务要插入数据到R前。
默认情况下,innodb_locks_unsafe_for_binlog为0,除非只是查询以及索引扫描,不然一定会用上gap锁。
启用innodb_locks_unsafe_for_binlog不会禁用掉外间以及键冲突时候使用的gap锁。
如果确定要使用 innodb_locks_unsafe_for_binlog ,最好采用READ COMMITTED隔离级别。
启用innodb_locks_unsafe_for_binlog之后:
- 对于update,delete语句,innodb只会拿到所操作行的锁,对于不符合条件但扫描到的行,innodb会在之后释放其上的锁,这会很大程度上减少死锁,但并不能完全避免。
- 对于需要扫描的行已经被别人正在update的情况,innodb会执行一次“半一致性”读,读到该记录最后一次commit的数据,如果不符合条件,则跳过继续执行,否则开始等待行上的锁。
innodb_log_buffer_size
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
No | int | 16777216 | 1048576-4294967295 |
innodb 日志缓存大小。为了兼容innodb 64k大页,默认大小从8MB调整到16MB,大的缓冲区的好处是,对于大事务,不必在commit前写入日志文件。
innodb_log_checksum_algorithm
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | enumeration | innodb | innodb/crc32/none/strict_innodb/strict_crc32/strict_none |
已经废弃
指定日志文件的验证算法。之前只有innodb算法才支持redo日志的计算。strict_*算法只能用于全新的实例。
innodb_log_checksums
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | boolean | on | on/OFF |
对redo日志启用校验,默认使用crc32算法。
即使关闭选项,对于redo日志首页以及checkpoint时候的redo日志页都会被校验。
innodb_log_compressed_pages
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | boolean | on | on/OFF |
是否在redo日志中保存压缩后的页。
innodb_log_file_size
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
No | int | 50331648 | 4194304-512GB / innodb_log_files_in_group |
一组日志文件里面单个日志文件的大小。一般推荐值是buffer pool的1/N,N是一个组里面日志文件的数量。这个值越大,需要checkpoint的时候越少,大redo会导致崩溃恢复非常漫长。
innodb_log_files_in_group
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
No | int | 2 | 2-10 |
一个日志组里面,日志文件的数量。这些文件会被轮询使用。
innodb_log_group_home_dir
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
No | string | null | 目录 |
redo日志的目录位置,默认在data目录下。
innodb_log_write_ahead_size
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | int | 8192 | 512-数据页大小 |
为了避免写时读,设置这个值来匹配操作系统单次io的操作单位。合法的值必须是512的2**的倍数。
innodb_lru_scan_depth
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | int | 1024 | 100-(2**64-1) |
指定page_cleaner 线程每次扫描脏页时的深度,对于纯写入型应用来说,设大这个参数收益比较大,一般来说,如果有很大的buffer pool,可以设置小一点。
innodb_max_dirty_pages_pct
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | numeric | 75 | 0-99.99 |
innodb会刷出脏页来使innodb buffer pool里面的脏页比例小于这个参数。
innodb_max_dirty_pages_pct_lwm
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | numeric | 0 | 0-99.99 |
刷出脏页的低水位线。
innodb_max_purge_lag
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | int | 0 | 0-4294967295 |
这个参数决定innodb当purge滞后的时候如何延迟insert,update,delete。
Innodb事务系统会维护一个包含所有拥有delete,update导致的delete标记的事务的列表,当这个列表的长度超过innodb_max_purge_lag,则对新的dml语句,延后执行innodb_max_purge_lag_delay毫秒。
innodb_max_purge_lag_delay
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | int | 0 | 0-2**64 |
必须配合innodb_max_purge_lag一起使用,可以被延后执行的最长时间。
innodb_max_undo_log_size
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | int | 1073741824 | 10485760-(2**64-1) |
确定undo表空间的最大大小。如果超过临界值,当启用了 innodb_undo_log_truncate 的话,undo会被标记为可truncate。
innodb_merge_threshold_set_all_debug
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | int | 50 | 1-50 |
改掉当前MERGE_THRESHOLD的值,当索引页低于这个值的时候,就合并索引页。
innodb_monitor_disable
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | string | null | 合法innodb metric |
关闭一个或者多个innodb统计值(INFORMATION_SCHEMA.INNODB_METRICS)的计数。
innodb_monitor_enable
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | string | null | 合法innodb metric |
启用一个或者多个innodb统计值(INFORMATION_SCHEMA.INNODB_METRICS)的计数。
innodb_monitor_reset
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | string | null | 合法innodb metric |
重设指定的metric为0.
innodb_monitor_reset_all
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | string | null | 合法innodb metric |
重设所有metric的计数。
innodb_numa_interleave
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
No | boolean | off | ON/OFF |
允许使用numa的interleave内存分配算法,使用interleave分配innodb buffer pool,其他操作还是使用默认numa设置。
innodb_old_blocks_pct
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | int | 37 | 5-95 |
设置老数据块占用buffer pool的比例,经常与innodb_old_blocks_time联合使用。
innodb_old_blocks_time
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | int | 1000 | 0-(2**32-1) |
这个值指定一个块被认为是新块需要从老块列表移走之前,需要至少存在的时间。单位为毫秒。如果设置为0,则在第一次访问之后就会被从老块列表踢出到新块列表。
innodb_online_alter_log_max_size
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | int | 134217728 | 65536-(2**64-1) |
innodb在线改表的时候,维护的临时日志文件的大小上限。表上的每个索引一个日志文件。这个文件存储alter期间发生的insert,update,delete。如果到达上限,会中断dml并且回滚所有未提交的语句。对于大表dml来说,也有可能会导致较久的dml执行完成之后,日志的恢复时间。
innodb_open_files
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
No | int | -1 | 10-4294967295 |
当使用多个表空间的时候,这个参数控制了innodb总共可以打开的文件描述符数量,专门针对ibd文件。
innodb_optimize_fulltext_only
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | boolean | off | off/on |
这个选项控制OPTIMIZE TABLE语句执行的对象,打开的话,执行对象是表上的全文索引,关闭的话,针对的是表上的聚簇索引。
innodb_optimize_point_storage
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | boolean | off | off/on |
允许innodb使用变长blob存储point数据,从5.7.6开始废弃。
innodb_page_cleaners
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
No | int | 1 >=5.7.8 4 | 1-64 |
从innodb buffer pool刷出脏页的线程的数量。从5.6.2开始从master线程中独立出来,5.7.4开始支持多线程flush。这个值必须小于等于innodb_buffer_pool_instances。
innodb_page_size
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
No | enumeration | 16384 | 4k/8k/16k/4096/8192/16384 >=5.7.6 32k/64k/32768/65536 |
对于32k以及64k大页,行最大长度是16000字节,并且不支持innodb压缩,32k的段长度为2MB,64k的段长度为4MB,对于大页,pool size至少需要16M。
innodb_print_all_deadlocks
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | boolean | off | on/off |
打开选项会让innodb把所有死锁都计入error log,一般情况下,只能使用show engine innodb 命令看到最新的一个死锁。
innodb_purge_batch_size
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | int | 300 | 1-5000 |
每次从pool刷出脏页的个数,和innodb_purge_threads关联。
innodb_purge_rseg_truncate_frequency
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | int | 128 | 1-128 |
控制purge回滚段的速度,undo表空间在其上有活动段的时候,无法回收。这个参数设置,每执行多少次purge之后,purge一次回滚段。
innodb_purge_threads
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
No | int | 1<= 5.7.7 4 | 1-32 |
innodb 执行purge的线程数量,可以用于加快purge的速度。
innodb_random_read_ahead
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | boolean | off | on/off |
是否打开innodb随机读的预读取机制来优化io消耗。
innodb_read_ahead_threshold
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | int | 56 | 0-64 |
如果innodb顺序地读入innodb_read_ahead_threshold个页,则之后异步读出该段所有的页到内存。
innodb_read_io_threads
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
No | int | 4 | 1-64 |
innodb用于读取数据的io线程数量。
innodb_read_only
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
No | boolean | off | on/off |
使用readonly模式启动innodb,专用于要求实例无法修改数据文件的场景,比如多实例共享。
innodb_replication_delay
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | int | 0 | 0-4294967295 |
如果达到innodb_thread_concurrency上限,允许延迟的毫秒数。
innodb_rollback_on_timeout
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
No | boolean | off | off/on |
如果打开设置,回滚不是只回滚最近的语句,而是回滚整个事务。
innodb_rollback_segments
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | int | 128 | 1-128 |
定义有多少回滚段应该在系统表空间中。将会被innodb_undo_logs替代。
innodb_saved_page_number_debug
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | int | 0 | 0--2**23-1 |
与innodb_fil_make_page_dirty_debug合作,弄脏指定块。
innodb_sort_buffer_size
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
No | int | 1048576 | 65536-67108864 |
指定创建索引的时候,排序用缓存的大小。
innodb_spin_wait_delay
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | int | 6 | 0-4294967295 |
请求spin锁的最大间隔。这个值实际取决于硬件和操作系统调度,并不会必须延后指定时间请求锁。
innodb_stats_auto_recalc
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | boolean | on | on/off |
让innodb自己刷新统计信息,目前的计算使用的是表内10%的数据。
innodb_stats_method
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | enumeration | nulls_equal | nulls_equal/nulls_unequal/nulls_ignored |
指定innodb在采集信息的时候,如何处理null值。nulls_equal假定null都相等,nulls_unequal假定null都不等,nulls_ignored不考虑null值。
innodb_stats_on_metadata
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | boolean | off | on/off |
指定innodb在查看元数据的语句执行的时候,对表的统计信息重新采集。
innodb_stats_persistent
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | boolean | on | on/off |
决策innodb的索引决策数据是否持久化到磁盘上。这个参数必须在建表前指定才可以,或者也可以在create,alter语句中采用STATS_PERSISTENT语法指定。
innodb_stats_persistent_sample_pages
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | int | 20 | 数字 |
计算统计信息的时候,使用多少索引页用于计算。
innodb_stats_sample_pages
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | int | 8 | 1--2**64-1 |
采用innodb_stats_transient_sample_pages替换。
innodb_stats_transient_sample_pages
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | int | 8 | 数字 |
计算统计信息的时候,使用多少索引页用于计算。与innodb_stats_persistent_sample_pages区别在于,是否启用了innodb_stats_persistent。
innodb_status_output
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | boolean | off | on/off |
是否打开innodb status的输出。
innodb_status_output_locks
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | boolean | off | on/off |
是否打开innodb的锁监视器。打开的话,会在show engine innodb status里面输出多余的锁信息,也可以把输出输出到错误日志。
innodb_strict_mode
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | boolean | off <=5.7.6 on | on/off |
对于部分非法操作,innodb返回错误而不是警告。
innodb_support_xa
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | boolean | on | on/off |
innodb是否支持XA事务,在事务准备阶段,会有一次多余的磁盘操作。
从5.7.10开始,innodb的XA事务支持,无法使用这个参数控制,默认打开,这个参数已经需要废弃。
innodb_sync_array_size
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
No | int | 1 | 1-1024 |
同步列表的长度,对于超大量并发等待的线程处理,需要调整大这个参数。
innodb_sync_debug
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
No | boolean | off | on/off |
启用innodb同步debug模式,5.7.8之前,必须在编译的时候指定,5.7.8之后,可以使用这个参数控制。
innodb_sync_spin_loops
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | int | 30 | 4096-4294967295 |
一个线程等待innodb mutex直到失败为止的重试次数。
innodb_table_locks
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | boolean | on | on/off |
5.7之前,innodb表锁需要配合autocommit=0以及innodb_table_locks=1才能正确添加。
5.7之后,显式通过lock语句加锁不需要这个参数配合,隐式加锁仍热需要这个参数配合。
innodb_temp_data_file_path
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
No | string | ibtmp1:12M:autoextend | 合法值 |
指定innodb临时文件的数据文件位置,大小等。所有非压缩临时表都使用同一个临时表空间,压缩的临时表会使用tmpdir指定的目录下每个表单独的数据文件。
innodb_thread_concurrency
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | int | 0 | 0-1000 |
innodb维护的用于指定用户事务的线程数,0为无限制。
innodb_thread_sleep_delay
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | int | 10000 | 0-18446744073709551615<=5.7.3 1000000 |
innodb线程在添加到队列前需要sleep的时间,单位为毫秒,可以使用innodb_adaptive_max_sleep_delay得到这个值的动态调度。
innodb_tmpdir
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | string 目录名 | null | 目录 |
主要用于在线alter执行使用。默认使用mysql的tmpdir。避免大表导致的临时空间使用满。
innodb_trx_purge_view_update_only_debug
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | boolean | off | on/off |
在执行purge前,刷新purge视图,用于debug。
innodb_trx_rseg_n_slots_debug
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | int | 0 | 0-1024 |
限制debug时候,undo可用slot的数量。
innodb_undo_directory
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
No | string | . | 目录名 |
innodb独立 undo表空间的数据文件目录。
innodb_undo_log_truncate
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | boolean | off | on/off |
只有独立表空间才支持undo表空间自动truncate。当undo文件超过innodb_max_undo_log_size之后,就会被truncate。
innodb_undo_logs
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
Yes | int | 128 | 0-128 |
设置innodb undo段的总数量。因为临时表空间会占用32个undo段,这个值必须设置为32以上才可以算是有效值。对于独立undo表空间,这个值必须大于33才算有效值。每个undo段可以支持1024个事务。当前实际可用的undo段,可以参考Innodb_available_undo_logs状态值。
innodb_undo_tablespaces
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
No | int | 0 | 0-126 <=5.7.7 95 |
innodb独立表空间实际的文件数量,与undo段的关系是一对多,默认情况会直接使用系统表空间。
innodb_use_native_aio
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
No | boolean | on | on/off |
决策是否使用linux原生的aio机制。
innodb_use_sys_malloc
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
No | boolean | on | on/off |
是否使用linux原生的内存分配机制,在5.7.4已经废弃。
innodb_version
innodb版本号,实际上是mysql的版本号,无法变更。
innodb_write_io_threads
在线可以调整 | 数据类型 | 默认值 | 合法值 |
---|---|---|---|
No | int | 4 | 1-64 |
innodb写操作的线程数量,设置的时候可以参考innodb_read_io_threads。