InnoDB环境变量

InnoDB Startup Option and System Variables

Version(8.0.32)

一、 InnoDB Command Options

–innodb

控制是否开启innoDB存储引擎,默认开启

–innodb-status-file

控制是否开启InnoDB状态文件,默认关闭。如果在mysql server启动时加此参数,会在数据目录下创建innodb_status.pid文件,每15s钟将 SHOW ENGINE INNODB STATUS信息写入文件。正常关闭后此文件会被删除,非正常关闭此文件不会自动删除,可以手动删除。

–skip-innodb

禁用innoDB存储引擎,将来的版本和–innodb会被弃用。

二、InnoDB系统变量

daemon_memcached_enable_binlog/daemon_memcached_engine_lib_name/daemon_memcached_engine_lib_path

开启master 服务器使用 InnoDB memcached 插件用于binlog日志。默认关闭,静态变量。
daemon_memcached_engine_lib_name指定 InnoDB memcached 插件名称,默认innodb_engine.so,静态变量
daemon_memcached_engine_lib_path指定 InnoDB memcached插件路径,默认为NULL,即mysql的默认插件路径,静态变量

daemon_memcached_option

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

daemon_memcached_r_batch_size/daemon_memcached_w_batch_size

指定在进行提交以启动新事务之前执行多少memcached读操作(get操作)。默认为1,静态变量

innodb_adaptive_flushing

控制是否开启自适应刷新脏页,默认情况下开启,InnoDB会根据当前脏页队列的比率自适应的刷新一些脏页到磁盘,以避免需要主动刷新脏页时的大量I/O。动态变量。

innodb_adaptive_flushing_lwm

定义表示启用自适应刷新的重做日志容量百分比的低水位线。默认10%,最小0,最大70%。动态变量

innodb_adaptive_hash_index

定义是否开启自适应hash索引,hash索引可以提高查询效率,但是并不是所有场景都是有效的,默认开启,可动态修改。

innodb_adaptive_hash_index_parts

对自适应哈希索引搜索系统进行分区。每个索引都绑定到一个特定的分区,每个分区由一个单独的锁存器保护。自适应哈希索引搜索系统默认分为8个部分。最大设置为512可动态修改

show engine innodb status\G

...
-------------------------------------

INSERT BUFFER AND ADAPTIVE HASH INDEX
-------------------------------------

Ibuf: size 1, free list len 0, seg size 2, 0 merges
merged operations:
 insert 0, delete mark 0, delete 0
discarded operations:
 insert 0, delete mark 0, delete 0
Hash table size 276707, node heap has 2 buffer(s)
Hash table size 276707, node heap has 1 buffer(s)
Hash table size 276707, node heap has 2 buffer(s)
Hash table size 276707, node heap has 2 buffer(s)
Hash table size 276707, node heap has 7 buffer(s)
Hash table size 276707, node heap has 2 buffer(s)
Hash table size 276707, node heap has 1 buffer(s)
Hash table size 276707, node heap has 1 buffer(s)
0.00 hash searches/s, 0.00 non-hash searches/s
...

innodb_adaptive_max_sleep_delay

允许InnoDB根据当前工作负载自动调整innodb_thread_sleep_delay的值。任何非零值都可以自动动态调整innodb_thread_sleep_delay的值,直到innodb_adaptive_max_sleep_delay选项中指定的最大值。该值表示微秒数。这个选项在繁忙的系统中很有用,比如大于16个InnoDB线程。(在实践中,它对于有数百或数千个并发连接的MySQL系统最有价值。)
默认15w,最大100w,单位微秒,动态变量。

innodb_api_bk_commit_interval

自动提交使用InnoDB memcached接口的空闲连接的频率,单位为秒。默认为5,最大值为1073741824,动态变量。

innodb_api_disable_rowlock

当InnoDBmemcached执行DML操作时,使用此选项来禁用行锁。默认情况下,innodb_api_disable_rowlock是禁用的,这意味着memcached对get和set操作会请求行锁。当启用innodb_api_disable_rowlock时,memcached请求表锁而不是行锁。静态变量

innodb_api_enable_binlog

开启Mysql binlog日志使用InnoDB memcached插件 静态变量,默认关闭。

innodb_api_enable_mdl

锁定被InnoDB memcached插件使用的表,这样它就不能被DDL通过SQL接口删除或更改。静态变量,默认关闭

innodb_api_trx_level

控制memcached接口处理的查询上的事务隔离级别。默认0,动态变量
0 = READ UNCOMMITTED
1 = READ COMMITTED
2 = REPEATABLE READ
3 = SERIALIZABLE

innodb_autoextend_increment

当自动扩展的InnoDB系统表空间文件满时,用来扩展它的增量大小(以兆字节为单位)。动态变量
innodb_autoextend_increment设置不影响file-per-table 表空间文件或一般的表空间文件。不管innodb_autoextend_increment设置如何,这些文件都是自动扩展的。最初的扩展是少量的,之后的扩展以4MB为增量。

innodb_autoinc_lock_mode

设置为0 这个表示tradition (传统模式)
设置为1 这个表示consecutive (连续模式)
设置为2 这个表示interleaved (交错模式)
innodb_autoinc_lock_mode通常情况下设置为1(默认值)即可,安全性和性能平衡下来最好的。通常情况下innodb_autoinc_lock_mode设置为1的性能影响可以忽略,如果有性能问题,需要检视下业务代码逻辑是否正常;当binlog_format=row时,在有大量的bulk insert并且不care自增键的连续性时可以设置为2,可以帮助你提高写入性能。静态变量

innodb_background_drop_list_empty

启用innodb_background_drop_list_empty调试选项可以通过延迟创建表直到后台Drop列表为空来避免测试用例失败。例如,如果测试用例A将表t1放置在后台Drop列表上,测试用例B在创建表t1之前一直等到后台Drop列表为空。默认关闭,动态变量。

innodb_buffer_pool_chunk_size

定义了InnoDB缓冲池大小调整操作的块大小。
默认值128M(134217728 bytes),单位是bytes。做小值是10M,最大值为innodb_buffer_pool_size/innodb_buffer_pool_instances。静态变量。
为了避免在调整大小操作期间复制所有缓冲池页,该操作以“块”为单位执行。一个块中包含的页数取决于innodb_page_size的值。innodb_buffer_pool_chunk_size可以以1MB(1048576字节)为单位增加或减少。
当缓冲池初始化时,如果innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances大于当前缓冲池的大小,
则innodb_buffer_pool_chunk_size被截断为innodb_buffer_pool_size/innodb_buffer_pool_instances。
缓冲池大小必须等于或倍数innodb_buffer_pool_chunk_size* innodb_buffer_pool_instances。如果你改变innodb_buffer_pool_chunk_size,Innodb_buffer_pool_size被自动舍入为等于或等于innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances的倍数。调整发生在缓冲池初始化时

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

innodb_buffer_pool_debug

启用此选项允许多个缓冲池实例,当缓冲池小于1GB时,忽略innodb_buffer_pool_instances上施加的最小1GB缓冲池大小限制。innodb_buffer_pool_debug选项只有在使用WITH_DEBUG CMake选项编译调试支持时才可用。静态变量,默认关闭

innodb_buffer_pool_dump_at_shutdown/ innodb_buffer_pool_load_at_startup

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

innodb_buffer_pool_dump_now

立即记录在InnoDB缓冲池中缓存的页面。通常与innodb_buffer_pool_load_now组合使用。默认关闭,动态变量。

innodb_buffer_pool_dump_pct

指定每个缓冲池要读出和转储的最近使用的页的百分比。取值范围是1 ~ 100。缺省值为25。例如,如果有4个缓冲池,每个缓冲池有100页,innodb_buffer_pool_dump_pct设置为25,那么每个缓冲池中最近使用的25页将被转储。动态变量。

innodb_buffer_pool_filename

指定保存由innodb_buffer_pool_dump_at_shutdown或innodb_buffer_pool_dump_now产生的表空间id和页id列表的文件的名称。表空间id和页id按照如下格式保存:space, page_id。默认情况下,该文件名为ib_buffer_pool,位于InnoDB数据目录下。必须指定相对于数据目录的非默认位置,动态变量

innodb_buffer_pool_in_core_file

禁用innodb_buffer_pool_in_core_file变量可以通过排除InnoDB缓冲池页面来减少核心文件的大小。要使用这个变量,必须启用core_file变量,并且操作系统必须支持madvise()的MADV_DONTDUMP非posix扩展,这在Linux 3.4及更高版本中是支持的。默认ON,动态变量。8.0.14引入。

innodb_buffer_pool_instances

InnoDB缓冲池划分的region数量。对于具有千兆字节范围的缓冲池的系统,将缓冲池划分为单独的实例可以通过减少不同线程读写缓存页时的争用来提高并发性。缓冲池中存储或从缓冲池读取的每一页都使用散列函数随机分配给其中一个缓冲池实例。每个缓冲池管理自己的空闲链表、刷写链表、LRUs和连接到缓冲池的所有其他数据结构,并由自己的缓冲池互斥量保护。
缓冲池小于1G默认为1,大于1G默认为8。最大64,静态变量。

innodb_buffer_pool_load_abort

中断由innodb_buffer_pool_load_at_startup or innodb_buffer_pool_load_now触发的InnoDB缓冲池转储进程,默认关闭,动态变量。

innodb_buffer_pool_load_at_startup

静态变量,默认开启

innodb_buffer_pool_load_now

立即通过加载一组数据页来预热InnoDB缓冲池,而无需等待服务器重启。可以在基准测试期间将缓存恢复到已知状态,或者在运行报表查询或维护后使MySQL服务器恢复正常工作负载。
默认关闭,动态变量。

innodb_buffer_pool_size

缓冲池的字节大小,InnoDB缓存表和索引数据的内存区域。动态变量
对物理内存的竞争会导致操作系统中的分页。
InnoDB为缓冲区和控制结构预留了额外的内存,因此分配的总空间大约比指定的缓冲池大小大10%
缓冲池的地址空间必须是连续的,这在dll加载在特定地址的Windows系统上可能是一个问题。
初始化缓冲池的时间大致与其大小成正比。对于具有大型缓冲池的实例,初始化时间可能很重要。为了缩短初始化周期,您可以在服务器关闭时保存缓冲池状态,并在服务器启动时恢复它。

innodb_change_buffer_max_size

InnoDB更改缓冲区的最大大小,占缓冲池总大小的百分比。如果MySQL服务器有大量的插入、更新和删除活动,你可以增加这个值,如果用于报告的数据没有变化,你可以降低这个值。
默认25,最大50。动态变量。

innodb_change_buffering

InnoDB是否执行更改缓冲,这是一种延迟写操作到辅助索引的优化,以便I/O操作可以顺序执行。允许的值如下表所示。也可以指定数值。动态变量。

none(0):不缓存任何操作
inserts(1):缓存插入操作
deletes(2):缓存删除标记操作
changes(3):缓存插入和删除标记操作
purges(4):缓存发生在后台的物理删除操作(在InnoDB中,delete不会物理的删除记录,只是将记录标记为delete,真正的删除是后台进程执行的purges操作)
all(5):默认配置,缓存插入、删除标记和清除操作。

innodb_change_buffering_debug

设置InnoDB变更缓冲的调试标志。值1将强制所有更改到更改缓冲区。值2会导致合并时崩溃。默认值0表示没有设置更改缓冲调试标志。此选项仅在使用WITH_DEBUG CMake选项编译调试支持时可用。默认为0,动态变量。

innodb_checkpoint_disabled

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

innodb_checksum_algorithm

指定如何生成和验证存储在InnoDB表空间磁盘块中的校验和。innodb_checksum_algorithm默认值为crc32。动态变量。

innodb_cmp_per_index_enabled

在INFORMATION_SCHEMA中启用与每个索引压缩相关的统计信息。INNODB_CMP_PER_INDEX表。因为收集这些统计信息的成本很高,所以在与InnoDB压缩表相关的性能调优期间,只能在开发、测试或从实例上启用此选项。默认关闭,动态变量。

innodb_commit_concurrency

可以同时提交的线程数。值0(默认)允许任意数量的事务同时提交。innodb_commit_concurrency的值不能在运行时从0变为非0,反之亦然。可以将一个非零值更改为另一个非零值。

innodb_compress_debug

使用指定的压缩算法压缩所有表,而无需为每个表定义压缩属性。只有在使用WITH_DEBUG CMake选项编译调试支持时,此选项才可用。动态变量。

innodb_compression_failure_threshold_pct

定义表的压缩失败率阈值,以百分比表示,MySQL开始在压缩页面中添加填充,以避免昂贵的压缩失败。当超过这个阈值时,MySQL开始在每个新的压缩页面中留下额外的空闲空间,动态调整空闲空间的数量,直到innodb_compression_pad_pct_max指定的页面大小的百分比。该值为0时,将禁用监控压缩效率和动态调整填充量的机制。
默认5,动态变量

innodb_compression_level

指定用于InnoDB压缩表和索引的zlib压缩级别。值越高,存储设备上可容纳的数据就越多,但压缩时的CPU开销也越大。当存储空间不是很重要,或者你希望数据不是特别可压缩时,较小的值可以减少CPU开销。默认6,最大9 动态变量。

innodb_compression_pad_pct_max

指定每个压缩页中可以保留为空闲空间的最大百分比,允许room在更新压缩表或索引并重新压缩数据时重新组织该页中的数据和修改日志。仅当innodb_compression_failure_threshold_pct设置为非零值,并且压缩失败率超过阈值时才生效。默认50,最大75,动态变量。

innodb_concurrency_tickets

确定可以并发进入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值不为0时,你可能需要调整innodb_concurrency_tickets的值,以便在大事务和小事务之间找到最佳的平衡。SHOW ENGINE INNODB STATUS报告显示了当前通过队列的执行事务剩余的票证数量。该数据也可以从INFORMATION_SCHEMA.INNODB_TRX表的TRX_CONCURRENCY_TICKETS列获得

innodb_data_file_path

系统表空间配置变量,静态变量 默认为:ibdata1:12M:autoextend。ibdata1为数据文件名称,12m为初始大小,autoextend为自动扩展,可以为系统表空间指定多个数据文件,但只有最后一个数据文件可以设置为autoextend。例如:

innodb_data_file_path = ibdata1:1G;ibdata2:12M:autoextend:max:500M

系统表空间数据文件也可以设置在裸设备上,具体配置方法参考官方文档【15.6.3.1 The System Tablespace 】

innodb_data_home_dir

InnoDB系统表空间数据文件的目录路径的公共部分。在启用innodb_file_per_table时,该设置不会影响按表存储文件的表空间的位置。默认值为MySQL数据目录。如果你指定这个值为空字符串,你可以为innodb_data_file_path指定一个绝对文件路径。静态变量。

innodb_ddl_log_crash_reset_debug

启用这个调试选项可以将DDL日志崩溃注入计数器重置为1。此选项仅在使用WITH_DEBUG CMake选项编译调试支持时可用。默认关闭,动态变量。

innodb_deadlock_detect

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

innodb_dedicated_server

当启用innodb_dedicated_server时,InnoDB会自动配置以下变量:
• innodb_buffer_pool_size
• innodb_log_file_size
• innodb_log_files_in_group (as of MySQL 8.0.14)
• innodb_flush_method
只有在专用于MySQL的服务器上建议启用此参数,默认关闭,静态变量。

innodb_default_row_format

选项innodb_default_row_format定义了InnoDB表和usercreated临时表的默认行格式。默认设置为DYNAMIC。其他允许的值是紧凑和冗余的。系统表空间不支持使用压缩行格式,不能定义为默认格式。动态变量
当没有明确指定ROW_FORMAT选项或者使用ROW_FORMAT=DEFAULT时,新创建的表使用由innodb_default_row_format定义的行格式。
当没有显式指定ROW_FORMAT选项或者使用了ROW_FORMAT=DEFAULT选项时,任何重建表的操作都会悄无声息地将表的行格式更改为innodb_default_row_format定义的格式。
服务器创建的内部InnoDB临时表处理查询时使用动态行格式,而不管innodb_default_row_format设置。

innodb_directories

定义表空间文件启动时要扫描的目录。当服务器脱机时将表空间文件移动或恢复到新位置时,将使用此选项。它还用于指定使用绝对路径创建的表空间文件的目录,或者驻留在数据目录之外的目录。
在崩溃恢复期间,表空间的发现依赖于innodb_directories设置来识别重做日志中引用的表空间。
由innodb_data_home_dir、innodb_undo_directory和datadir定义的目录,在创建启动时要扫描的目录列表时,会自动附加到innodb_directories参数值中,不管innodb_directories选项是否明确指定。
静态变量

mysqld --innodb-directories="directory_path_1;directory_path_2"
[mysqld]
innodb_directories="directory_path_1;directory_path_2"

innodb_disable_sort_file_cache

禁用合并排序临时文件的操作系统文件系统缓存。其效果是用等价的O_DIRECT打开这样的文件。动态变量,默认关闭

innodb_doublewrite

doublewrite buffer 是否开启,默认是开启的。如果doublewrite buffer 位于固态磁盘,默认是关闭的。静态变量

innodb_doublewrite_dir

8.0.20之后的参数,之前doublewrite buffer 是位于系统表空间的,8.0.20之后增加此参数,配置单独的doublewrite buffer 存储位置,默认为innodb_data_home_dir (默认和datadir一致)目录下。
静态变量

innodb_doublewrite_files

定义doublewrite 文件的数量,默认为2*innodb_buffer_pool_instances个。最大256 ,静态变量

innodb_doublewrite_pages

8.0.20引入,控制每个线程允许的最大doublewrite pages的数量,默认和innodb_write_io_threads 保持一致。静态变量。

innodb_doublewrite_batch_size

8.0.20引入,控制批处理中doublewrite pages的数量。默认0,最大值256,动态变量。

innodb_fast_shutdown

关闭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设置为一个表空间的ID,就会立即脏表空间的第一页。

如果innodb_saved_page_number_debug设置为非默认值,则设置innodb_fil_make_page_dirty_debug将脏化指定的页面。innodb_fil_make_page_dirty_debug选项只有在使用WITH_DEBUG CMake选项编译调试支持时才可用。默认0,动态变量

innodb_file_per_table

表数据是否存储在单个表空间,默认开启,动态变量。

innodb_fill_factor

InnoDB在创建或重建索引时执行批量加载。这种创建索引的方法被称为“排序索引构建”。
innodb_fill_factor定义了在排序索引构建期间填充每个B-tree页面的空间百分比,剩余空间为未来的索引增长保留。例如,将innodb_fill_factor设置为80,为每个B-tree页预留20%的空间,以备未来索引增长之用。实际的百分比可能有所不同。innodb_fill_factor的设置被解释为一个提示,而不是一个硬限制。默认100,动态变量。
当innodb_fill_factor设置为100时,集群索引页中的1/16空间可以用于未来的索引增长。innodb_fill_factor适用于B-tree叶子页和非叶子页。它不适用于用于文本或BLOB数据项的外部页。

innodb_flush_log_at_timeout

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

innodb_flush_log_at_trx_commit

控制提交操作的严格ACID遵从性和更高的性能之间的平衡,当提交相关的I/O操作被重新安排并批量完成时,更高的性能是可能的。您可以通过更改默认值来获得更好的性能,但这样可能会在崩溃时丢失事务。默认为1,动态参数。
要完全遵循ACID,需要默认设置1。日志在每次事务提交时写入并刷新到磁盘;设置为0时,日志每秒写入一次并刷新到磁盘。未刷新日志的事务可能会在崩溃时丢失;设置为2时,日志在每次事务提交后写入,并每秒刷新一次到磁盘,未刷新日志的事务可能会在崩溃时丢失。
对于设置0和2,不能100%保证每秒刷新一次。由于DDL的变化和其他内部InnoDB活动导致日志的刷写操作不依赖于innodb_flush_log_at_trx_commit设置,刷写操作可能会更频繁地发生,有时由于调度问题,刷写操作会更少。如果日志每秒刷新一次,那么在崩溃时最多会丢失1秒的事务。如果日志刷新的频率高于或低于每秒一次,则可能丢失的事务量会相应变化。
日志刷新频率由innodb_flush_log_at_timeout控制,它允许您将日志刷新频率设置为N秒(其中N为1…2700,默认值为1)。然而,任何mysqld进程崩溃都可能擦除多达N秒的事务。
DDL更改和其他内部InnoDB活动会独立于innodb_flush_log_at_trx_commit设置来刷写日志。
无论innodb_flush_log_at_trx_commit设置如何,InnoDB崩溃恢复都能正常工作。事务要么完全应用,要么完全删除。
为了在事务中使用InnoDB的复制设置中保持持久性和一致性:
如果启用了二进制日志,则设置sync_binlog=1。
总是设置innodb_flush_log_at_trx_commit=1。

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

innodb_flush_method

定义了将数据刷新到InnoDB数据文件和日志文件的方法,该方法会影响I/O吞吐量。默认值fsync,静态变量。

fsync(0):InnoDB使用系统fsync()系统调用刷新数据和日志文件
O_DSYNC(1):InnoDB使用O_SYNC来打开并刷新日志文件,使用fsync()来刷新数据文件。InnoDB没有直接使用O_DSYNC,因为它在许多Unix上都存在问题
littlesync (2):此选项用于内部性能测试,目前不受支持。使用风险自负。
nosync(3):此选项用于内部性能测试,目前不受支持。使用风险自负。
O_DIRECT (4):InnoDB使用O_DIRECT(或Solaris上的directio())来打开数据文件,并使用fsync()来刷写数据和日志文件。这个选项在一些GNU/Linux版本、FreeBSD和Solaris上可用。
O_DIRECT_NO_FSYNC(5):InnoDB在刷出I/O时使用O_DIRECT,但在每次写操作后都会跳过fsync()系统调用。

在MySQL 8.0.14之前,这个设置不适合像XFS和EXT4这样的文件系统,它们需要一个fsync()系统调用来同步文件系统元数据的更改。如果您不确定您的文件系统是否需要fsync()系统调用来同步文件系统元数据更改,请使用O_DIRECT。
从MySQL 8.0.14开始,在创建新文件、增加文件大小和关闭文件之后都会调用fsync(),以确保同步文件系统元数据更改。在每次写操作之后,fsync()系统调用仍然会被跳过。

如果重做日志文件和数据文件驻留在不同的存储设备上,并且在数据文件写入从没有电池支持的设备缓存中刷新之前发生崩溃,那么数据丢失是可能的。如果您使用或打算为重做日志文件和数据文件使用不同的存储设备,并且您的数据文件驻留在一个没有电池支持的缓存设备上,请使用O_DIRECT。

Windows系统的innodb_flush_method选项包括:
unbuffered 或0:InnoDB使用模拟异步I/O和无缓冲I/O。
normal或1:InnoDB使用模拟异步I/O和缓冲I/O

对于做RAID和有电池支持的存储设备,使用O_DIRECT;对于SAN存储,使用O_DSYNC。
如果启用了innodb_dedicated_server,如果没有明确定义,innodb_flush_method的值会被自动配置。

innodb_flush_neighbors

指定从InnoDB缓冲池中刷新的页是否也会刷新相同区间内的其他脏页。默认0,动态变量。
0;不刷新相同区的其他脏页;1刷新相同区的连续脏页;2刷新相同区的脏页。
当表数据存储在传统的HDD存储设备上时,与在不同时间刷出单个页相比,一次操作刷出相邻的页可以减少I/O开销(主要是针对磁盘寻道操作)。对于存储在SSD上的表数据,寻道时间不是一个重要的因素,你可以将该选项设置为0以分散写操作。

innodb_flush_sync

默认启用的innodb_flush_sync变量会导致在检查点发生的I/O活动爆发时忽略innodb_io_capacity设置。要保持innodb_io_capacity设置定义的I/O速率,请禁用innodb_flush_sync。
默认开启,动态变量。

innodb_flushing_avg_loops

InnoDB保存之前计算的刷新状态快照的迭代次数,用于控制自适应刷新对变化的工作负载的响应速度。增加这个值可以使刷写操作的速率随着工作负载的变化而平滑而渐进地变化。降低该值可以使自适应刷新快速适应工作负载的变化,如果工作负载突然增加和减少,这可能导致刷新活动出现峰值。默认30,动态变量。

innodb_force_load_corrupted

允许InnoDB在启动时加载标记为损坏的表。仅在故障排除时使用,用于恢复无法访问的数据。当故障排除完成时,禁用此设置并重新启动服务器。默认关闭,静态变量

innodb_force_recovery

崩溃恢复模式,通常只在严重故障排除的情况下更改。取值范围为0 ~ 6。默认0,静态变量
1 (SRV_FORCE_IGNORE_CORRUPT): 忽略检查到的 corrupt 页。尽管检测到了损坏的 page 仍强制服务运行。一般设置为该值即可,然后 dump 出库表进行重建。
2 (SRV_FORCE_NO_BACKGROUND): 阻止主线程的运行,如主线程需要执行 full purge 操作,会导致 crash。 阻止 master thread 和任何 purge thread 运行。若 crash 发生在 purge 环节则使用该值。
3 (SRV_FORCE_NO_TRX_UNDO): 不执行事务回滚操作。
4 (SRV_FORCE_NO_IBUF_MERGE): 不执行插入缓冲的合并操作。如果可能导致崩溃则不要做这些操作。不要进行统计操作。该值可能永久损坏数据文件。若使用了该值,则将来要删除和重建辅助索引。
5 (SRV_FORCE_NO_UNDO_LOG_SCAN): 不查看重做日志,InnoDB 存储引擎会将未提交的事务视为已提交。此时 InnoDB 甚至把未完成的事务按照提交处理。该值可能永久性的损坏数据文件。
6 (SRV_FORCE_NO_LOG_REDO): 不执行前滚的操作。恢复时不做 redo log roll-forward。使数据库页处于废止状态,继而可能引起 B 树或者其他数据库结构更多的损坏

innodb_fsync_threshold

默认情况下,当InnoDB创建一个新的数据文件时,例如一个新的日志文件或表空间文件,这个文件在刷写到磁盘之前会完全写入操作系统缓存,这可能会导致大量的磁盘写活动同时发生。为了从操作系统缓存中强制更小的、周期性的刷写数据,你可以使用innodb_fsync_threshold变量来定义一个以字节为单位的阈值。当达到字节阈值时,操作系统缓存的内容将刷新到磁盘。默认值0强制执行默认行为,即只有在文件完全写入缓存后才将数据刷新到磁盘。
8.0.13引入,默认0,动态变量
在多个MySQL实例使用相同存储设备的情况下,指定一个阈值强制较小的周期性刷写可能是有益的。例如,创建一个新的MySQL实例及其相关的数据文件可能会导致磁盘写活动的大量激增,从而影响使用相同存储设备的其他MySQL实例的性能。配置阈值有助于避免这种写活动的激增。

innodb_ft_aux_table

指定包含全文索引的InnoDB表的限定名。该变量用于诊断目的,只能在运行时设置。例如:
SET GLOBAL innodb_ft_aux_table = ‘test/t1’;

将该变量设置为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

内存分配,以字节为单位,用于InnoDB全文搜索索引缓存,它在创建InnoDB全文索引时将解析后的文档保存在内存中。只有当达到innodb_ft_cache_size的大小限制时,索引的插入和更新才会提交到磁盘。Innodb_ft_cache_size定义了每个表的缓存大小。默认8000000,静态变量。

innodb_ft_enable_diag_print

是否启用额外的全文搜索(FTS)诊断输出。这个选项主要用于高级FTS调试,大多数用户不会感兴趣。输出被打印到错误日志并包含信息。默认关闭动态变量

innodb_ft_enable_stopword

指定一组停用词在创建索引时与一个InnoDB全文索引相关联。如果设置了innodb_ft_user_stopword_table选项,停止词将从用户指定的表中获取。否则,如果设置了innodb_ft_server_stopword_table选项,停止词将从服务器表中获取。否则,将使用一组内置的默认停用词。动态变量,默认开启

innodb_ft_max_token_size

默认84,静态变量
存储在InnoDB全文索引中的单词的最大字符长度。对这个值设置限制可以减少索引的大小,从而加快查询速度,因为可以省略长关键字或任意字母的集合,这些字母不是真正的单词,也不太可能是搜索词。

innodb_ft_min_token_size

默认值3,静态变量
存储在InnoDB全文索引中的最小单词长度。增大这个值可以减小索引的大小,从而加快查询的速度,因为它省略了在搜索上下文中不太重要的常用词,例如英语单词“a”和“to”。对于使用CJK(中文、日文、韩文)字符集的内容,请指定值1。

innodb_ft_num_word_optimize

默认值2000,动态变量
在InnoDB全文索引的每次优化表操作中要处理的单词数。因为对包含全文搜索索引的表的批量插入或更新操作可能需要大量的索引维护来合并所有更改,所以可以执行一系列优化表语句,每次都从上一条语句开始。

innodb_ft_result_cache_limit

默认2000000000动态变量

InnoDB全文搜索查询结果缓存限制(以字节为单位)每个全文搜索查询或每个线程。InnoDB全文搜索的中间和最终查询结果都在内存中处理。使用innodb_ft_result_cache_limit设置全文检索查询结果缓存的大小限制,以避免在InnoDB全文检索查询结果非常大的情况下(例如上百万或上亿行)占用过多内存。在处理全文搜索查询时,会根据需要分配内存。如果达到了结果缓存大小限制,则返回一个错误,表明查询超过了最大允许的内存。

innodb_ft_server_stopword_table

InnoDB配置server的stopword列表
默认为NULL,动态变量。
此选项用于为所有InnoDB表指定自己的InnoDB全文索引停止词列表。你可以使用innodb_ft_user_stopword_table为特定的InnoDB表配置自己的停止词列表。
设置innodb_ft_server_stopword_table为包含停用词列表的表名,格式为db_name/table_name。
在配置innodb_ft_server_stopword_table之前,停止字表必须已经存在。在创建全文索引之前,必须启用innodb_ft_enable_stopword并且必须配置innodb_ft_server_stopword_table选项。
stopword表必须是一个InnoDB表,包含一个名为value的VARCHAR列。

innodb_ft_sort_pll_degree

默认值2,动态变量
在构建搜索索引时,在InnoDB全文索引中并行索引和标记文本的线程数。

innodb_ft_total_cache_size

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

innodb_ft_user_stopword_table

此选项用于在特定的表上指定你自己的InnoDB全文索引停止词列表。默认NULL,动态变量。

innodb_idle_flush_pct

默认100,动态变量。
限制InnoDB空闲时刷新页面。innodb_idle_flush_pct值是innodb_io_capacity设置的一个百分比,该设置定义了InnoDB每秒可用的I/O操作数。

innodb_io_capacity

默认200 动态变量。
变量innodb_io_capacity定义了用于InnoDB后台任务的每秒I/O操作数(IOPS),例如从缓冲池中刷出页面和从change buffer中合并数据。

innodb_io_capacity_max

如果刷出活动滞后,InnoDB会更积极地刷出,比innodb_io_capacity变量定义的每秒I/O操作(IOPS)更高。innodb_io_capacity_max变量定义了在这种情况下,InnoDB后台任务执行的最大IOPS。

innodb_limit_optimistic_insert_debug

默认值0,动态变量
限制每个b树页的记录数。默认值为0意味着没有限制。只有在使用WITH_DEBUG CMake选项编译调试支持时,此选项才可用。

innodb_lock_wait_timeout

InnoDB事务在放弃前等待行锁的时间,单位为秒。缺省值是50秒。一个事务试图访问被另一个InnoDB事务锁定的行,只针对行锁,不针对表锁。
当innodb_deadlock_detect(默认)启用时,锁等待超时时间并不适用于死锁,因为InnoDB会立即检测到死锁,并回滚一个死锁事务。当innodb_deadlock_detect被禁用时,当死锁发生时,InnoDB依赖于innodb_lock_wait_timeout进行事务回滚。
动态变量

innodb_log_buffer_size

InnoDB用来写入磁盘上日志文件的缓冲区的字节数。默认为16MB。大日志缓冲区使大事务能够运行,而无需在事务提交之前将日志写入磁盘。因此,如果您有更新、插入或删除许多行的事务,则增大日志缓冲区可以节省磁盘I/O。动态变量。

innodb_log_checkpoint_fuzzy_now

默认关闭,动态变量。
启用这个调试选项来强制InnoDB写一个模糊检查点。只有在使用WITH_DEBUG CMake选项编译调试支持时,此选项才可用。

innodb_log_checkpoint_now

默认关闭,动态变量。
启用这个调试选项来强制InnoDB写一个检查点。只有在使用WITH_DEBUG CMake选项编译调试支持时,此选项才可用。

innodb_log_checksums

默认开启,动态变量
启用或禁用重做日志页的校验和。innodb_log_checksums=ON启用重做日志页面的CRC-32C校验和算法。当innodb_log_checksums被禁用时,重做日志页面校验和字段的内容将被忽略。重做日志头页和重做日志检查点页上的校验和永远不会被禁用。

innodb_log_compressed_pages

默认开启,动态变量。
指定是否将重新压缩的页面的图像写入重做日志。当对压缩数据进行更改时,可能会发生重新压缩。
Innodb_log_compressed_pages默认启用,以防止在恢复过程中使用不同版本的zlib压缩算法时发生损坏。如果你确定zlib版本不会改变,你可以禁用innodb_log_compressed_pages来减少修改压缩数据的工作负载的重做日志生成。

innodb_log_file_size

默认50331648,静态变量
日志组中每个日志文件的字节大小。日志文件大小(innodb_log_file
通常,日志文件的组合大小应该足够大,以便服务器可以平滑工作负载活动的高峰和低谷,这通常意味着有足够的重做日志空间来处理超过一个小时的写活动。该值越大,缓冲池中需要的检查点刷新活动就越少,从而节省磁盘I/O。较大的日志文件也会使崩溃恢复变慢。_size * innodb_log_files_in_group)之和不能超过最大值,最大值不超过512GB。例如,一对255 GB的日志文件接近限制,但不会超过限制。默认值为48MB。
如果启用了innodb_dedicated_server,那么如果没有显式定义innodb_log_file_size值,则自动配置该值。

innodb_log_files_in_group

默认值2,静态变量
日志组中的日志文件数量。InnoDB以循环的方式写入文件。默认值(推荐)为2。文件的位置由innodb_log_group_home_dir指定。日志文件大小(innodb_log_file_size * innodb_log_files_in_group)最大可达512GB。

innodb_log_group_home_dir

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

innodb_log_spin_cpu_abs_lwm

默认80 动态变量。
定义了在等待刷新重做时,用户线程不再自旋的最小CPU使用率。该值表示为CPU核心利用率的总和。例如,默认值80为单个CPU核的80%。在使用多核处理器的系统上,值150表示一个CPU核的使用率为100%,另一个CPU核的使用率为50%。

innodb_log_spin_cpu_pct_hwm

默认值50 ,动态变量
定义了在等待刷新重做时,用户线程不再自旋的最大CPU使用率。该值表示为所有CPU核处理能力总和的百分比。默认值为50%。例如,2个CPU核的100%使用率是4个CPU核服务器CPU处理能力总和的50%。
innodb_log_spin_cpu_pct_hwm变量与处理器的亲和性有关。例如,如果服务器有48个内核,但mysqld进程只固定在4个CPU内核上,那么其他44个CPU内核将被忽略。

innodb_log_wait_for_flush_spin_hwm

默认值400,动态变量
定义了最大平均日志刷新时间,超过这个时间,用户线程在等待刷新重做时将不再自旋。默认值为400微秒。

innodb_log_write_ahead_size

默认值8192,动态变量
定义重做日志的预写块大小,以字节为单位。要避免“读时写”,请设置tinnodb_log_write_ahead_size来匹配操作系统或文件系统的缓存块大小。缺省值为8192字节。当重做日志的预写块大小与操作系统或文件系统的缓存块大小不匹配,导致重做日志块没有完全缓存到操作系统或文件系统时,就会发生读-写。
innodb_log_write_ahead_size的有效值是InnoDB日志文件块大小的倍数(2n)。最小值是InnoDB日志文件块大小(512)。当指定最小值时,不会发生预写。最大值等于innodb_page_size的值。如果你指定的innodb_log_write_ahead_size值大于innodb_page_size值,那么innodb_log_write_ahead_size会被截断为innodb_page_size值。
设置innodb_log_write_ahead_size值过小,与操作系统或文件系统缓存块大小相关,会导致“读写”。设置的值过大可能会对日志文件写的fsync性能有轻微的影响,因为会同时写入多个数据块。

innodb_log_writer_threads

8.0.22引入,默认开启,动态变量。
启用专用的日志写入线程来写入和刷新重做日志。当禁用时,每个线程都会执行写入和刷新重做日志。

innodb_lru_scan_depth

默认值1024,动态变量。

影响InnoDB缓冲池刷写操作的算法和启发式方法的参数。这主要是调优I/ o密集型工作负载的性能专家感兴趣的。它指定了每个缓冲池实例,在缓冲池LRU页列表中,页清理线程扫描寻找脏页并将其刷新的位置。这是一个每秒执行一次的后台操作。
小于默认值的设置通常适用于大多数工作负载。远高于必要值可能会影响性能。只有在典型工作负载下有空闲I/O容量时才考虑增加该值。相反,如果写密集型工作负载使您的I/O容量饱和,请降低该值,特别是在使用大型缓冲池的情况下。
在调优innodb_lru_scan_depth时,从一个较低的值开始,并向上配置设置,目标是很少看到零空闲页面。另外,在更改缓冲池实例的数量时,考虑调整innodb_lru_scan_depth,因为innodb_lru_scan_depth * innodb_buffer_pool_instances定义了页面清理器线程每秒执行的工作量。

innodb_max_dirty_pages_pct

默认值90,动态变量
InnoDB试图从缓冲池中刷新数据,这样脏页的百分比不会超过这个值。innodb_max_dirty_pages_pct设置为刷出活动建立一个目标。它不影响刷新的速度。

innodb_max_dirty_pages_pct_lwm

默认10,动态变量
定义一个低水位线,表示启用预刷出以控制脏页比例时脏页的百分比。值为0则完全禁用预刷出行为。

innodb_max_purge_lag

默认值0,动态变量
定义所需的最大清除滞后。如果超过了这个值,INSERT、UPDATE和DELETE操作就会延迟,以便有时间进行清除。默认值为0,这意味着没有最大清除延迟和延迟。

innodb_max_purge_lag_delay

默认值0,动态变量
指定超过innodb_max_purge_lag阈值时的最大延迟时间,以微秒为单位。innodb_max_purge_lag_delay是根据innodb_max_purge_lag公式计算出的延迟时间的上限。

innodb_max_undo_log_size

动态变量。
定义undo表空间的阈值大小。如果undo表空间超过阈值,当启用innodb_undo_log_truncate时,它可以被标记为截断。缺省值为:1073741824字节(1024 MiB)。

innodb_merge_threshold_set_all_debug

默认值50,动态变量
为索引页定义一个页满百分比值,覆盖当前字典缓存中所有索引的当前MERGE_THRESHOLD设置。只有在使用WITH_DEBUG CMake选项编译调试支持时,此选项才可用。动态变量。

innodb_monitor_disable

动态变量
禁用InnoDB监控指标计数器。计数器数据可以查看INFORMATION_SCHEMA.INNODB_METRICS表。
innodb_monitor_disable=‘latch’ disables statistics collection for SHOW ENGINE INNODB MUTEX.

innodb_monitor_enable

默认为空,动态变量
启用InnoDB监控指标计数器。计数器数据可以查看INFORMATION_SCHEMA.INNODB_METRICS表。

innodb_monitor_reset

默认为空,动态变量
重置InnoDB监控指标计数器。计数器数据可以查看INFORMATION_SCHEMA.INNODB_METRICS表。
innodb_monitor_reset=‘latch’ 重置statistics collection for SHOW ENGINE INNODB MUTEX.

innodb_monitor_reset_all

默认为空,动态变量
重置InnoDB度量计数器的所有值(最小值、最大值等)。

innodb_numa_interleave

默认禁用,静态变量
启用NUMA交错内存策略来分配InnoDB缓冲池。当启用innodb_numa_interleave时,mysqld进程的NUMA内存策略设置为MPOL_INTERLEAVE。分配完InnoDB缓冲池后,NUMA内存策略会被设置回MPOL_DEFAULT。为了启用innodb_numa_interleave选项,MySQL必须在启用numa的Linux系统上编译。
CMake根据当前平台是否支持NUMA设置WITH_NUMA的默认值。

innodb_old_blocks_pct

默认37,动态变量
指定用于旧块子列表的InnoDB缓冲池的大约百分比。取值范围为5 ~ 95。默认值为37(即池的3/8)。通常与innodb_old_blocks_time结合使用。

innodb_old_blocks_time

默认1000,动态变量
非零值可以防止缓冲池被只在短时间内引用的数据填充,例如在全表扫描期间。增大这个值可以更好地防止全表扫描干扰缓冲池中缓存的数据。
指定插入到旧子列表中的数据块在第一次访问后必须停留多长时间(单位为毫秒),然后才能移动到新子列表中。如果该值为0,则插入到旧子列表中的块在第一次被访问时将立即移动到新子列表中,无论访问发生在插入之后多久。如果该值大于0,则块会保留在旧子列表中,直到第一次访问发生至少几毫秒之后。例如,值1000会导致第一次访问旧子列表后,块会在旧子列表中停留1秒,然后才有资格移动到新子列表中。

innodb_online_alter_log_max_size

默认值128M,动态变量
指定在InnoDB表的在线DDL操作期间使用的临时日志文件大小的字节上限。对于每个创建的索引或修改的表,都有一个这样的日志文件。此日志文件存储在DDL操作期间在表中插入、更新或删除的数据。临时日志文件在需要时通过innodb_sort_buffer_size的值进行扩展,直到innodb_online_alter_log_max_size指定的最大值。如果临时日志文件的大小超过上限,那么ALTER TABLE操作将失败,所有未提交的并发DML操作将回滚。因此,如果该选项的值较大,就允许在在线DDL操作期间发生更多的DML,但也会延长DDL操作结束时表被锁定以应用日志中的数据的时间。

innodb_open_files

静态变量
只有在使用多个InnoDB表空间时,这个变量才有用。它指定了MySQL可以同时打开的.ibd文件的最大数量。最小值为10。如果innodb_file_per_table没有启用,默认值为300,否则比300值更高。
用于。ibd文件的文件描述符仅用于InnoDB表。它们独立于系统变量open_files_limit指定的值,不影响对表的操作

innodb_optimize_fulltext_only

默认关闭,动态变量。
改变InnoDB表上优化表操作的方式。在全文索引的InnoDB表的维护操作期间,临时启用。
默认情况下,OPTIMIZE TABLE会在表的聚集索引中重新组织数据。当启用此选项时,OPTIMIZE TABLE会跳过重组表数据,而是处理InnoDB全文索引中新添加、删除和更新的令牌数据。

innodb_page_cleaners

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

如果在将脏页从缓冲池实例刷新到数据文件时,您的工作负载是write-IO绑定的,并且如果您的系统硬件有可用容量,那么增加页面清理线程的数量可能有助于提高write-IO吞吐量。多线程页面清理器支持扩展到关闭和恢复阶段

innodb_page_size

默认16384 静态变量。
指定InnoDB表空间的页面大小。值可以以字节或千字节为单位指定。innodb_page_size只能在初始化MySQL实例之前配置,并且不能在初始化之后更改。如果未指定值,则使用默认页面大小初始化实例。
对于32KB和64KB的页面大小,最大行长度约为16000字节。当innodb_page_size设置为32KB或64KB时,不支持ROW_FORMAT=COMPRESSED。innodb_page_size=32KB时,extent大小为2MB。innodb_page_size=64KB时,extent大小为4MB。当使用32KB或64KB的页面时,innodb_log_buffer_size应该设置为至少16M(默认值)
默认的16KB或更大的页面大小适用于各种工作负载,特别是涉及表扫描的查询和涉及批量更新的DML操作。对于涉及许多小写入的OLTP工作负载,较小的页大小可能更高效,当单个页包含许多行时,争用可能成为问题。较小的页在SSD存储设备上也可能是高效的,因为SSD设备通常使用较小的块大小。保持InnoDB页面大小接近存储设备块大小可以最小化重写到磁盘的未更改数据的数量。
第一个系统表空间数据文件(ibdata1)的最小文件大小取决于innodb_page_size的值。

innodb_parallel_read_threads

8.0.14引入,默认值4 动态变量。
定义可用于并行聚集索引读取的线程数。MySQL 8.0.17支持并行扫描分区。并行读线程可以提高检查表的性能。InnoDB在检查表操作期间读取聚集索引两次。第二次读取可以并行执行。该特性不适用于二级索引扫描。innodb_parallel_read_threads会话变量必须设置为大于1的值,以便并行聚集读取索引。用于执行并行聚集索引读取的实际线程数由innodb_parallel_read_threads设置或要扫描的索引子树的数量决定,两者取更小的值。扫描期间读入缓冲池的页保存在缓冲池LRU链表的尾部,以便在需要缓冲池空闲页时快速丢弃。
从MySQL 8.0.17开始,最大并发读线程数(256)是所有客户端连接的线程总数。如果达到线程限制,连接将退回到使用单个线程。

innodb_print_all_deadlocks

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

innodb_print_ddl_logs

默认关闭动态变量
启用此选项会导致MySQL将DDL日志写入stderr。

innodb_purge_batch_size

默认值200,动态变量
用于InnoDB清除操作的后台线程数。增加该值会创建额外的清除线程,这可以提高在多个表上执行DML操作的系统的效率。

innodb_purge_rseg_truncate_frequency

默认值128 动态变量。
根据调用清除的次数定义清除系统释放回滚段的频率。在释放回滚段之前,undo表空间不能被截断。通常,清除系统每调用清除128次就释放回滚段一次。缺省值为128。减少此值将增加清除线程释放回滚段的频率。
Innodb_purge_rseg_truncate_frequency用于innodb_undo_log_truncate。

innodb_random_read_ahead

默认关闭,动态变量。
启用随机预读技术以优化InnoDB I/O。

innodb_read_ahead_threshold

默认值56,动态变量
控制线性预读的敏感度,InnoDB使用线性预读将页预取到缓冲池。如果InnoDB从一个区间(64页)连续读取至少innodb_read_ahead_threshold页,它会为接下来的整个区间发起异步读取。允许的值范围是0到64。值0禁用预读。对于默认的56,InnoDB必须从一个区间连续读取至少56页,才能对接下来的区间发起异步读取。
在微调innodb_read_ahead_threshold设置时,知道有多少页是通过预读机制读取的,以及有多少页是在没有被访问的情况下从缓冲池中删除的,是很有用的。SHOW ENGINE INNODB STATUS输出显示来自全局状态变量Innodb_buffer_pool_read_ahead和Innodb_buffer_pool_read_ahead_evicted的计数器信息,它们分别报告预读请求进入缓冲池的页数,以及从缓冲池中被驱逐而没有被访问过的页数。状态变量报告自上次服务器重启以来的全局值。

innodb_read_io_threads

默认值4,动态变量
InnoDB中用于读取操作的I/O线程数。与写线程对应的是innodb_write_io_threads。

innodb_read_only

默认关闭,静态变量。
以只读模式启动InnoDB。

innodb_redo_log_archive_dirs

8.0.17引入,默认NULL,动态变量
定义可以在其中创建重做日志归档文件的标记目录。您可以在分号分隔的列表中定义多个标记的目录。
innodb_redo_log_archive_dirs=‘label1:/backups1;label2:/backups2’
标签可以是任何字符串,但冒号(:)除外,这是不允许的。也可以使用空标签,但仍然需要冒号(😃。必须指定路径,并且目录必须存在。路径中可以包含冒号(‘:’),但不允许包含分号(😉。

innodb_redo_log_encrypt

默认关闭,动态变量。
使用InnoDB静态数据加密特性,控制重做日志数据的加密。

innodb_replication_delay

默认值0,动态变量
如果达到了innodb_thread_concurrency,从服务器上的复制线程延迟以毫秒为单位。

innodb_rollback_on_timeout

默认关闭,静态变量。
默认情况下,InnoDB只回滚事务超时时的最后一条语句。如果指定了——InnoDB -rollback -timeout,事务超时会导致InnoDB中止并回滚整个事务。

innodb_rollback_segments

默认128。动态变量
Innodb_rollback_segments定义了分配给每个undo表空间的回滚段数量,以及生成undo记录的事务的全局临时表空间。每个回滚段支持的事务数量取决于InnoDB页面大小和分配给每个事务的undo日志数量。

innodb_saved_page_number_debug

默认值0,动态变量
保存页码。设置innodb_fil_make_page_dirty_debug选项会把由innodb_saved_page_number_debug定义的页面弄脏。innodb_saved_page_number_debug选项只有在使用WITH_DEBUG CMake选项编译调试支持时才可用。

innodb_sort_buffer_size

默认值1048576 静态变量。
指定在创建InnoDB索引时用于排序数据的排序缓冲区的大小。指定的大小定义了为了内部排序而读入内存,然后写入磁盘的数据量。这个过程称为“运行”。在合并阶段,读取并合并指定大小的成对缓冲区。设置越大,运行和合并的次数就越少。
此排序区域仅用于索引创建期间的合并排序,而不用于后续的索引维护操作。在索引创建完成时释放缓冲区。此选项的值还控制扩展临时日志文件以记录在线DDL操作期间并发DML的数量。

在此设置可配置之前,该大小被硬编码为1048576字节(1MB),这仍然是默认值。在创建索引的ALTER TABLE或CREATE TABLE语句中,分配3个缓冲区,每个缓冲区的大小由该选项定义。此外,为排序缓冲区中的行分配了辅助指针,以便排序可以在指针上运行(而不是在排序操作期间移动行)。

innodb_spin_wait_delay

默认值6,动态变量
自旋锁轮询之间的最大延迟。该机制的底层实现因硬件和操作系统的组合而异,因此延迟不是一个固定的时间间隔。可以与innodb_spin_wait_pause_multiplier变量一起使用,以更好地控制自旋锁轮询延迟的持续时间。

innodb_spin_wait_pause_multiplier

默认值50,动态变量
定义一个乘法器值,用于确定当线程等待获得互斥量或rw-lock时,在spin-wait循环中发生的暂停指令的数量。

innodb_stats_auto_recalc

默认开启,动态变量
导致InnoDB在表中的数据发生重大变化后自动重新计算持久统计。阈值为表中行数的10%。这个设置适用于启用innodb_stats_persistent选项时创建的表。还可以通过在CREATE TABLE或ALTER TABLE语句中指定STATS_PERSISTENT=1来配置自动统计量重新计算。产生统计数据所采样的数据量由innodb_stats_persistent_sample_pages变量控制。

innodb_stats_include_delete_marked

默认关闭,动态变量。
默认情况下,InnoDB在计算统计时读取未提交的数据。在未提交事务从表中删除行的情况下,InnoDB在计算行估计和索引统计时排除了被删除标记的记录,这可能导致使用非READ uncommitted事务隔离级别并发操作表的其他事务的执行计划不理想。为了避免这种情况,可以启用innodb_stats_include_delete_marked,以确保在计算持久优化器统计信息时,InnoDB包含有删除标记的记录。
当启用innodb_stats_include_delete_marked时,分析表在重新计算统计时考虑已删除标记的记录。
innodb_stats_include_delete_marked是一个全局设置,它会影响所有的InnoDB表。它只适用于持久优化器统计。

innodb_stats_method

默认nulls_equal ,动态变量
服务器在收集InnoDB表索引值分布的统计信息时如何处理NULL值。允许的值是nulls_equal、nulls_unequal和nulls_ignored。对于nulls_equal,所有NULL索引值都被认为相等,形成一个值组,其长度等于NULL值的数目。对于nulls_unequal, NULL值被认为是不相等的,每个NULL构成一个长度为1的不同值组。对于nulls_ignored, NULL值被忽略。
用于生成表统计信息的方法会影响优化器为查询执行选择索引的方式。

innodb_stats_on_metadata

默认关闭,动态变量。
此选项仅适用于优化器统计信息配置为非持久性时。当禁用innodb_stats_persistent或者创建或修改单独的表时,优化器统计信息不会持久化到磁盘上。
当启用innodb_stats_on_metadata时,当元数据语句如显示表状态或访问INFORMATION_SCHEMA时,InnoDB更新非持久化统计信息。表或INFORMATION_SCHEMA。统计数据表。(这些更新与分析表类似。)当禁用时,InnoDB不会在这些操作期间更新统计数据。禁用该设置可以提高具有大量表或索引的模式的访问速度。它还可以提高涉及InnoDB表的查询执行计划的稳定性。
要改变这个设置,使用SET GLOBAL innodb_stats_on_metadata=mode语句,mode要么是ON要么是OFF(要么是1或0)。改变这个设置需要有足够的权限来设置全局系统变量,并立即影响所有连接的操作。

innodb_stats_persistent

默认开启,动态变量。
指定是否将InnoDB索引统计信息持久化到磁盘。否则,统计信息可能会频繁地重新计算,从而导致查询执行计划发生变化。该设置在创建表时存储在每个表中。你可以在创建表之前在全局级别设置innodb_stats_persistent,或者使用CREATE table和ALTER table语句中的STATS_PERSISTENT子句覆盖系统范围内的设置,并为单个表配置持久化统计信息。

innodb_stats_persistent_sample_pages

默认 20 动态变量。
在估计索引列的基数和其他统计信息(如通过分析表计算的数据)时要抽样的索引页数量。增加该值可以提高索引统计的准确性,从而改善查询执行计划,但代价是在对InnoDB表执行分析表时增加I/O。
设置高值innodb_stats_persistent_sample_pages可能会导致分析表执行时间过长。Innodb_stats_persistent_sample_pages仅在表的innodb_stats_persistent启用时生效;当innodb_stats_persistent被禁用时,innodb_stats_transient_sample_pages被替代。

innodb_stats_transient_sample_pages

默认值8,动态变量
在估计索引列的基数和其他统计信息(如通过分析表计算的数据)时要抽样的索引页数量。缺省值为8。增加该值可以提高索引统计信息的准确性,从而改善查询执行计划,但代价是打开InnoDB表或重新计算统计信息时增加的I/O。
将innodb_stats_transient_sample_pages设置为高值可能会导致分析表执行时间过长。
Innodb_stats_transient_sample_pages仅适用于innodb_stats_persistent表被禁用;当启用innodb_stats_persistent时,取而代之的是Innodb_stats_persistent_sample_pages取代了innodb_stats_transient_sample_pages。

innodb_status_output

默认关闭,动态变量。
启用或禁用标准InnoDB监视器的周期性输出。也可以和innodb_status_output_locks结合使用来启用或禁用InnoDB锁监视器的周期性输出。

innodb_status_output_locks

默认关闭,动态变量。
启用或禁用InnoDB锁监视器。当启用时,InnoDB锁监视器会在SHOW ENGINE InnoDB STATUS output中打印额外的锁信息,并定期输出到MySQL错误日志中。InnoDB锁监控器的周期性输出是标准InnoDB监控器输出的一部分。因此,必须启用标准的InnoDB监控器,以便InnoDB锁监控器定期将数据打印到MySQL错误日志中。

innodb_strict_mode

默认开启,动态变量
当启用innodb_strict_mode时,在某些情况下InnoDB会返回错误而不是警告。
严格模式有助于防止SQL中被忽略的拼写错误和语法错误,或者各种操作模式和SQL语句组合的其他意外后果。当启用innodb_strict_mode时,InnoDB会在某些情况下抛出错误条件,而不是发出警告并处理指定的语句(可能有意外的行为)。这类似于MySQL中的sql_mode,它控制MySQL接受什么样的SQL语法,并确定它是静默地忽略错误,还是验证输入语法和数据值。
innodb_strict_mode设置会影响CREATE TABLE, ALTER TABLE, CREATE INDEX和OPTIMIZE TABLE语句的语法错误处理。
innodb_strict_mode还启用了记录大小检查,这样插入或更新操作就不会因为记录过大而失败。
Oracle建议在使用ROW_FORMAT和
在CREATE TABLE, ALTER TABLE和CREATE INDEX语句中使用KEY_BLOCK_SIZE子句。
当innodb_strict_mode被禁用时,InnoDB忽略冲突子句,创建表或索引时,在消息日志中只显示一个警告。生成的表可能具有与预期不同的特征,例如在尝试创建压缩表时缺乏压缩支持。当启用innodb_strict_mode时,这样的问题会立即产生错误,并且不会创建表或索引。
您可以在启动mysqld或MySQL配置文件时在命令行上启用或禁用innodb_strict_mode。你也可以使用SET [GLOBAL|SESSION] innodb_strict_mode=mode在运行时启用或禁用innodb_strict_mode,其中mode为ON或OFF。更改GLOBAL设置需要足够的权限来设置全局系统变量(参见
章节5.1.9.1,“系统可变特权”),并影响随后连接的所有客户端的操作。任何客户端都可以更改innodb_strict_mode的SESSION设置,并且该设置只影响该客户端
Innodb_strict_mode不适用于一般表空间。一般表空间的表空间管理规则严格执行,不依赖于innodb_strict_mode。

innodb_sync_array_size

默认值1,静态变量
定义互斥锁/锁等待数组的大小。增加该值会拆分用于协调线程的内部数据结构,从而在具有大量等待线程的工作负载中获得更高的并发性。这个设置必须在MySQL实例启动时配置,之后不能更改。
对于经常产生大量等待线程(通常大于768)的工作负载,建议增加该值

innodb_sync_spin_loops

默认值30,动态变量
线程在被挂起之前等待InnoDB互斥锁释放的次数。

innodb_sync_debug

默认关闭,静态变量。
开启InnoDB存储引擎的同步调试检查。此选项仅在使用WITH_DEBUG CMake选项编译调试支持时可用。

innodb_table_locks

默认开启,动态变量。
如果autocommit = 0, InnoDB尊重锁表;在所有其他线程释放对表的锁之前,MySQL不会从lock table … write中返回。innodb_table_locks的默认值是1,这意味着如果autocommit = 0, lock - tables会导致InnoDB内部锁住一张表。innodb_table_locks = 0对于使用 LOCK-TABLES-WRITE. 显式锁定的表没有效果。对于LOCK_TABLES_WRITE隐式(例如,通过触发器)或lock - table - read锁定的表,它确实有效果。

innodb_temp_data_file_path

默认值ibtmp1:12M:autoextend,静态变量
在mysql服务启动时创建,关闭时删除。存放用户创建的临时表更改的回滚段。

innodb_temp_tablespaces_dir

默认值#innodb_temp。静态变量,8.0.13引入
mysql服务启动后会在此路径下创建10个临时表空间数据文件,mysql服务关闭后这些文件会被删除。
定义InnoDB在启动时创建会话临时表空间池的位置。默认的位置是data目录下的#innodb_temp目录。允许使用完全限定的路径或相对于数据目录的路径。
从MySQL8.0.16开始,会话临时表空间总是存储用户创建的临时表和由优化器使用InnoDB创建的内部临时表。(以前,用于内部临时表的磁盘存储引擎是由internal_tmp_disk_storage_engine系统变量决定的,现在不再支持了。

innodb_thread_concurrency

默认值0,动态变量。
InnoDB试图保持操作系统线程的并发数量小于或等于这个变量给出的限制(InnoDB使用操作系统线程来处理用户事务)。一旦线程数量达到这个限制,额外的线程将被置于“先进先出”(FIFO)队列中的等待状态以执行。等待锁的线程不计入并发执行线程的数量

这个变量的取值范围是0到1000。值0(默认值)被解释为无限并发性
(没有并发检查)。禁用线程并发检查使InnoDB可以创建任意数量的线程。如果值为0,InnoDB内部的查询和SHOW ENGINE InnoDB STATUS输出的ROW OPERATIONS部分的队列计数器的查询也将被禁用。
如果您的MySQL实例与其他应用程序共享CPU资源,或者您的工作负载或并发用户数量正在增长,请考虑设置此变量。正确的设置取决于工作负载、计算环境和运行的MySQL版本。您需要测试一系列值,以确定提供最佳性能的设置。Innodb_thread_concurrency是一个动态变量,它允许你在一个实时测试系统上试验不同的设置。如果某个特定的设置表现不佳,你可以快速地将innodb_thread_concurrency设置回0。

使用以下指南来帮助找到并保持适当的设置:
如果工作负载的并发用户线程数小于64,则设置innodb_thread_concurrency=0。

如果您的工作负载一直很重或偶尔出现峰值,那么首先设置innodb_thread_concurrency=128,然后将该值降低到96、80、64,以此类推,直到找到提供最佳性能的线程数。假设您的系统通常有40到50个用户,但这个数字会周期性地增加到60、70甚至200。您会发现性能在80个并发用户时是稳定的,但超过这个数字就开始出现退化。在这种情况下,您可以设置innodb_thread_concurrency=80,以避免影响性能。

如果您不希望InnoDB为用户线程使用超过一定数量的虚拟cpu(例如,20个虚拟cpu),请将innodb_thread_concurrency设置为这个数字(或者可能更低,取决于性能结果)。如果您的目标是将MySQL与其他应用程序隔离开来,您可以考虑将mysqld进程专门绑定到虚拟cpu。但是,请注意,如果mysqld进程不是一直很忙,那么排他绑定可能会导致非最佳硬件使用。在这种情况下,您可以将mysqld进程绑定到虚拟cpu,但也允许其他应用程序。从操作系统的角度来看,使用资源管理解决方案来管理如何在应用程序之间共享CPU时间可能比绑定mysqld进程更好。例如,您可以在其他关键进程未运行时将90%的虚拟CPU时间分配给给定的应用程序,并在其他关键进程运行时将该值扩展回40%

Innodb_thread_concurrency值过高会导致性能下降,因为系统内部和资源的竞争增加。

在某些情况下,最佳的innodb_thread_concurrency设置可以小于虚拟cpu的数量。
定期监控和分析你的系统。工作负载、用户数量或计算环境的变化可能需要调整innodb_thread_concurrency设置。

innodb_thread_sleep_delay

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

innodb_tmpdir

默认为NULL,动态变量。
用于为重建表的在线ALTER TABLE操作期间创建的临时排序文件定义备用目录。
重建表的联机ALTER TABLE操作也会在与原始表相同的目录中创建一个中间表文件。innodb_tmpdir选项不适用于中间表文件。
必须是除MySQL data目录路径以外的任意目录路径。如果值为NULL(默认值),则创建MySQL临时目录(Unix上为$TMPDIR, Windows上为%TEMP%,或由——TMPDIR配置选项指定的目录)。如果指定了一个目录,则只有在使用SET语句配置innodb_tmpdir时,才会检查该目录是否存在和权限。如果在目录字符串中提供了符号链接,则符号链接将被解析并存储为绝对路径。路径长度不应超过512字节。一个联机的ALTER TABLE操作报告一个错误,如果innodb_tmpdir被设置为一个无效的目录。innodb_tmpdir覆盖MySQL的tmpdir设置,但仅用于在线ALTER TABLE操作。
引入innodb_tmpdir选项是为了帮助避免位于tmpfs文件系统上的临时文件目录溢出。这种溢出可能是由于在重建表的在线ALTER TABLE操作期间创建的大型临时排序文件造成的。

innodb_trx_purge_view_update_only_debug

默认关闭,静态变量。
暂停删除标记记录的清除,同时允许更新清除视图。此选项人为地创建清除视图被更新但清除尚未执行的情况。只有在使用WITH_DEBUG CMake选项编译调试支持时,此选项才可用。

innodb_trx_rseg_n_slots_debug

默认值0,动态变量
设置一个调试标志,对trx_rsegf_undo_find_free函数设置一个给定值,将TRX_RSEG_N_SLOTS限制为给定值,该函数为undo日志段查找空闲槽位。只有在使用WITH_DEBUG CMake选项编译调试支持时,此选项才可用。

innodb_undo_directory

静态变量,
InnoDB创建undo表空间的路径。通常用于在不同的存储设备上放置undo表空间。没有默认值(NULL)。如果变量innodb_undo_directory未定义,则在data目录下创建undo表空间。初始化MySQL实例时创建的默认undo表空间(innodb_undo_001和innodb_undo_002)总是位于由innodb_undo_directory变量定义的目录中。如果没有指定不同的路径,使用CREATE Undo TABLESPACE语法创建的Undo表空间会创建在innodb_undo_directory变量定义的目录中。

innodb_undo_log_encrypt

默认关闭,动态变量。
控制使用InnoDB静态数据加密功能加密的表的undo日志数据的加密。仅适用于驻留在单独的undo表空间中的undo日志。不支持对系统表空间中驻留的undo日志数据进行加密。

innodb_undo_log_truncate

默认开启,动态变量。
启用时,undo表空间超过定义的阈值Innodb_max_undo_log_size被标记为截断。只有undo表空间可以被截断。
不支持截断系统表空间中的undo日志。要进行截断,必须至少有两个undo表空间。innodb_purge_rseg_truncate_frequency变量可以用来加速undo表空间的截断。

innodb_undo_tablespaces

默认值2,动态变量。
定义InnoDB使用的undo表空间的数量。默认值和最小值为2。

innodb_use_native_aio

默认开的,静态变量
是否使用Linux异步I/O子系统。该变量仅适用于Linux系统,在服务器运行时不能更改。通常情况下,您不需要配置此选项,因为它默认启用。
InnoDB在Windows系统上的异步I/O能力在Linux系统上也是可用的。(其他类unix系统继续使用同步I/O调用。)这个特性提高了大量I/ o绑定系统的可伸缩性,这些系统通常在show ENGINE INNODB STATUS\G输出中显示许多待处理的读/写。
运行大量的InnoDB I/O线程,特别是在同一台服务器上运行多个这样的实例,可能会超过Linux系统的容量限制。在这种情况下,您可能会收到以下错误:

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

大家通常可以通过在/proc/sys/fs/aio-max-nr中设置更高的上限来解决这个错误。
但是,如果操作系统中的异步I/O子系统的问题阻止了InnoDB启动,您可以使用innodb_use_native_aio=0启动服务器。如果InnoDB检测到一个潜在的问题,例如tmpdir位置,tmpfs文件系统和Linux内核不支持tmpfs上的AIO,这个选项也可以在启动期间自动禁用。

innodb_validate_tablespace_paths

参数用于关闭启动的时候检查Innodb文件,加快启动速度,静态变量,默认开启。8.0.21引入。

大家通常可以通过在/proc/sys/fs/aio-max-nr中设置更高的上限来解决这个错误。
但是,如果操作系统中的异步I/O子系统的问题阻止了InnoDB启动,您可以使用innodb_use_native_aio=0启动服务器。如果InnoDB检测到一个潜在的问题,例如tmpdir位置,tmpfs文件系统和Linux内核不支持tmpfs上的AIO,这个选项也可以在启动期间自动禁用。

innodb_version

InnoDB版本号。在MySQL 8.0中,InnoDB没有单独的版本号,这个值和服务器的版本号是一样的。

innodb_write_io_threads

默认值4,动态变量
InnoDB写操作的I/O线程数。默认值为4。对应于读线程的是innodb_read_io_threads。
在Linux系统中,运行多个MySQL服务器(通常超过12个),默认设置为innodb_read_io_threads,innodb_write_io_threads, Linux的aio-max-nr设置可以超过系统限制。理想情况下,增加aio-max-nr的设置;作为一种解决方案,您可以减少一个或两个MySQL变量的设置。
还要考虑sync_binlog的值,它控制二进制日志到磁盘的同步。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南風_入弦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值