Rechercher dans le manuel MySQL
15.13 InnoDB Startup Options and System Variables
System variables that are true or false can be enabled at server startup by naming them, or disabled by using a
--skip-
prefix. For example, to enable or disable theInnoDB
adaptive hash index, you can use--innodb-adaptive-hash-index
or--skip-innodb-adaptive-hash-index
on the command line, orinnodb_adaptive_hash_index
orskip_innodb_adaptive_hash_index
in an option file.System variables that take a numeric value can be specified as
--
on the command line or asvar_name
=value
in option files.var_name
=value
Many system variables can be changed at runtime (see Section 5.1.9.2, “Dynamic System Variables”).
For information about
GLOBAL
andSESSION
variable scope modifiers, refer to theSET
statement documentation.Certain options control the locations and layout of the
InnoDB
data files. Section 15.8.1, “InnoDB Startup Configuration” explains how to use these options.Some options, which you might not use initially, help tune
InnoDB
performance characteristics based on machine capacity and your database workload.For more information on specifying options and system variables, see Section 4.2.2, “Specifying Program Options”.
Table 15.25 InnoDB Option and Variable Reference
InnoDB Command Options
-
Property Value Command-Line Format --ignore-builtin-innodb[={OFF|ON}]
Deprecated Yes (removed in 8.0.3) System Variable ignore_builtin_innodb
Scope Global Dynamic No SET_VAR
Hint AppliesNo Type Boolean In earlier versions of MySQL, this option caused the server to behave as if the built-in
InnoDB
were not present, which enabled theInnoDB Plugin
to be used instead. In MySQL 8.0,InnoDB
is the default storage engine andInnoDB Plugin
is not used. This option was removed in MySQL 8.0. -
Property Value Command-Line Format --innodb[=value]
Deprecated Yes Type Enumeration Default Value ON
Valid Values OFF
ON
FORCE
Controls loading of the
InnoDB
storage engine, if the server was compiled withInnoDB
support. This option has a tristate format, with possible values ofOFF
,ON
, orFORCE
. See Section 5.6.1, “Installing and Uninstalling Plugins”.To disable
InnoDB
, use--innodb=OFF
or--skip-innodb
. In this case, because the default storage engine isInnoDB
, the server does not start unless you also use--default-storage-engine
and--default-tmp-storage-engine
to set the default to some other engine for both permanent andTEMPORARY
tables.The
InnoDB
storage engine can no longer be disabled, and the--innodb=OFF
and--skip-innodb
options are deprecated and have no effect. Their use results in a warning. These options will be removed in a future MySQL release. -
Property Value Command-Line Format --innodb-status-file[={OFF|ON}]
Type Boolean Default Value OFF
The
--innodb-status-file
startup option controls whetherInnoDB
creates a file namedinnodb_status.
in the data directory and writespid
SHOW ENGINE INNODB STATUS
output to it every 15 seconds, approximately.The
innodb_status.
file is not created by default. To create it, start mysqld with thepid
--innodb-status-file
option.InnoDB
removes the file when the server is shut down normally. If an abnormal shutdown occurs, the status file may have to be removed manually.The
--innodb-status-file
option is intended for temporary use, asSHOW ENGINE INNODB STATUS
output generation can affect performance, and theinnodb_status.
file can become quite large over time.pid
For related information, see Section 15.16.2, “Enabling InnoDB Monitors”.
Disable the
InnoDB
storage engine. See the description of--innodb
.
InnoDB System Variables
daemon_memcached_enable_binlog
Property Value Command-Line Format --daemon-memcached-enable-binlog[={OFF|ON}]
System Variable daemon_memcached_enable_binlog
Scope Global Dynamic No SET_VAR
Hint AppliesNo Type Boolean Default Value OFF
Enable this option on the master server to use the
InnoDB
memcached plugin (daemon_memcached
) with the MySQL binary log. This option can only be set at server startup. You must also enable the MySQL binary log on the master server using the--log-bin
option.For more information, see Section 15.19.7, “The InnoDB memcached Plugin and Replication”.
daemon_memcached_engine_lib_name
Property Value Command-Line Format --daemon-memcached-engine-lib-name=file_name
System Variable daemon_memcached_engine_lib_name
Scope Global Dynamic No SET_VAR
Hint AppliesNo Type File name Default Value innodb_engine.so
Specifies the shared library that implements the
InnoDB
memcached plugin.For more information, see Section 15.19.3, “Setting Up the InnoDB memcached Plugin”.
daemon_memcached_engine_lib_path
Property Value Command-Line Format --daemon-memcached-engine-lib-path=dir_name
System Variable daemon_memcached_engine_lib_path
Scope Global Dynamic No SET_VAR
Hint AppliesNo Type Directory name Default Value NULL
The path of the directory containing the shared library that implements the
InnoDB
memcached plugin. The default value is NULL, representing the MySQL plugin directory. You should not need to modify this parameter unless specifying amemcached
plugin for a different storage engine that is located outside of the MySQL plugin directory.For more information, see Section 15.19.3, “Setting Up the InnoDB memcached Plugin”.
-
Property Value Command-Line Format --daemon-memcached-option=options
System Variable daemon_memcached_option
Scope Global Dynamic No SET_VAR
Hint AppliesNo Type String Default Value Used to pass space-separated memcached options to the underlying memcached memory object caching daemon on startup. For example, you might change the port that memcached listens on, reduce the maximum number of simultaneous connections, change the maximum memory size for a key-value pair, or enable debugging messages for the error log.
See Section 15.19.3, “Setting Up the InnoDB memcached Plugin” for usage details. For information about memcached options, refer to the memcached man page.
-
Property Value Command-Line Format --daemon-memcached-r-batch-size=#
System Variable daemon_memcached_r_batch_size
Scope Global Dynamic No SET_VAR
Hint AppliesNo Type Integer Default Value 1
Specifies how many memcached read operations (
get
operations) to perform before doing aCOMMIT
to start a new transaction. Counterpart ofdaemon_memcached_w_batch_size
.This value is set to 1 by default, so that any changes made to the table through SQL statements are immediately visible to memcached operations. You might increase it to reduce the overhead from frequent commits on a system where the underlying table is only being accessed through the memcached interface. If you set the value too large, the amount of undo or redo data could impose some storage overhead, as with any long-running transaction.
For more information, see Section 15.19.3, “Setting Up the InnoDB memcached Plugin”.
-
Property Value Command-Line Format --daemon-memcached-w-batch-size=#
System Variable daemon_memcached_w_batch_size
Scope Global Dynamic No SET_VAR
Hint AppliesNo Type Integer Default Value 1
Specifies how many memcached write operations, such as
add
,set
, andincr
, to perform before doing aCOMMIT
to start a new transaction. Counterpart ofdaemon_memcached_r_batch_size
.This value is set to 1 by default, on the assumption that data being stored is important to preserve in case of an outage and should immediately be committed. When storing non-critical data, you might increase this value to reduce the overhead from frequent commits; but then the last
N
-1 uncommitted write operations could be lost if a crash occurs.For more information, see Section 15.19.3, “Setting Up the InnoDB memcached Plugin”.
-
Property Value Command-Line Format --ignore-builtin-innodb[={OFF|ON}]
Deprecated Yes (removed in 8.0.3) System Variable ignore_builtin_innodb
Scope Global Dynamic No SET_VAR
Hint AppliesNo Type Boolean See the description of
--ignore-builtin-innodb
under “InnoDB Command Options” earlier in this section. This variable was removed in MySQL 8.0. -
Property Value Command-Line Format --innodb-adaptive-flushing[={OFF|ON}]
System Variable innodb_adaptive_flushing
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Boolean Default Value ON
Specifies whether to dynamically adjust the rate of flushing dirty pages in the
InnoDB
buffer pool based on the workload. Adjusting the flush rate dynamically is intended to avoid bursts of I/O activity. This setting is enabled by default. See Section 15.8.3.5, “Configuring InnoDB Buffer Pool Flushing” for more information. For general I/O tuning advice, see Section 8.5.8, “Optimizing InnoDB Disk I/O”. -
Property Value Command-Line Format --innodb-adaptive-flushing-lwm=#
System Variable innodb_adaptive_flushing_lwm
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Integer Default Value 10
Minimum Value 0
Maximum Value 70
Defines the low water mark representing percentage of redo log capacity at which adaptive flushing is enabled. For more information, see Section 15.8.3.6, “Fine-tuning InnoDB Buffer Pool Flushing”.
-
Property Value Command-Line Format --innodb-adaptive-hash-index[={OFF|ON}]
System Variable innodb_adaptive_hash_index
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Boolean Default Value ON
Whether the
InnoDB
adaptive hash index is enabled or disabled. It may be desirable, depending on your workload, to dynamically enable or disable adaptive hash indexing to improve query performance. Because the adaptive hash index may not be useful for all workloads, conduct benchmarks with it both enabled and disabled, using realistic workloads. See Section 15.5.3, “Adaptive Hash Index” for details.This variable is enabled by default. You can modify this parameter using the
SET GLOBAL
statement, without restarting the server. Changing the setting at runtime requires privileges sufficient to set global system variables. See Section 5.1.9.1, “System Variable Privileges”. You can also use--skip-innodb-adaptive-hash-index
at server startup to disable it.Disabling the adaptive hash index empties the hash table immediately. Normal operations can continue while the hash table is emptied, and executing queries that were using the hash table access the index B-trees directly instead. When the adaptive hash index is re-enabled, the hash table is populated again during normal operation.
innodb_adaptive_hash_index_parts
Property Value Command-Line Format --innodb-adaptive-hash-index-parts=#
System Variable innodb_adaptive_hash_index_parts
Scope Global Dynamic No SET_VAR
Hint AppliesNo Type Numeric Default Value 8
Minimum Value 1
Maximum Value 512
Partitions the adaptive hash index search system. Each index is bound to a specific partition, with each partition protected by a separate latch.
The adaptive hash index search system is partitioned into 8 parts by default. The maximum setting is 512.
For related information, see Section 15.5.3, “Adaptive Hash Index”.
innodb_adaptive_max_sleep_delay
Property Value Command-Line Format --innodb-adaptive-max-sleep-delay=#
System Variable innodb_adaptive_max_sleep_delay
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Integer Default Value 150000
Minimum Value 0
Maximum Value 1000000
Permits
InnoDB
to automatically adjust the value ofinnodb_thread_sleep_delay
up or down according to the current workload. Any nonzero value enables automated, dynamic adjustment of theinnodb_thread_sleep_delay
value, up to the maximum value specified in theinnodb_adaptive_max_sleep_delay
option. The value represents the number of microseconds. This option can be useful in busy systems, with greater than 16InnoDB
threads. (In practice, it is most valuable for MySQL systems with hundreds or thousands of simultaneous connections.)For more information, see Section 15.8.4, “Configuring Thread Concurrency for InnoDB”.
-
Property Value Command-Line Format --innodb-api-bk-commit-interval=#
System Variable innodb_api_bk_commit_interval
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Integer Default Value 5
Minimum Value 1
Maximum Value 1073741824
How often to auto-commit idle connections that use the
InnoDB
memcached interface, in seconds. For more information, see Section 15.19.6.4, “Controlling Transactional Behavior of the InnoDB memcached Plugin”. -
Property Value Command-Line Format --innodb-api-disable-rowlock[={OFF|ON}]
System Variable innodb_api_disable_rowlock
Scope Global Dynamic No SET_VAR
Hint AppliesNo Type Boolean Default Value OFF
Use this option to disable row locks when
InnoDB
memcached performs DML operations. By default,innodb_api_disable_rowlock
is disabled, which means that memcached requests row locks forget
andset
operations. Wheninnodb_api_disable_rowlock
is enabled, memcached requests a table lock instead of row locks.innodb_api_disable_rowlock
is not dynamic. It must be specified on the mysqld command line or entered in the MySQL configuration file. Configuration takes effect when the plugin is installed, which occurs when the MySQL server is started.For more information, see Section 15.19.6.4, “Controlling Transactional Behavior of the InnoDB memcached Plugin”.
-
Property Value Command-Line Format --innodb-api-enable-binlog[={OFF|ON}]
System Variable innodb_api_enable_binlog
Scope Global Dynamic No SET_VAR
Hint AppliesNo Type Boolean Default Value OFF
Lets you use the
InnoDB
memcached plugin with the MySQL binary log. For more information, see Enabling the InnoDB memcached Binary Log. -
Property Value Command-Line Format --innodb-api-enable-mdl[={OFF|ON}]
System Variable innodb_api_enable_mdl
Scope Global Dynamic No SET_VAR
Hint AppliesNo Type Boolean Default Value OFF
Locks the table used by the
InnoDB
memcached plugin, so that it cannot be dropped or altered by DDL through the SQL interface. For more information, see Section 15.19.6.4, “Controlling Transactional Behavior of the InnoDB memcached Plugin”. -
Property Value Command-Line Format --innodb-api-trx-level=#
System Variable innodb_api_trx_level
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Integer Default Value 0
Controls the transaction isolation level on queries processed by the memcached interface. The constants corresponding to the familiar names are:
0 =
READ UNCOMMITTED
1 =
READ COMMITTED
2 =
REPEATABLE READ
3 =
SERIALIZABLE
For more information, see Section 15.19.6.4, “Controlling Transactional Behavior of the InnoDB memcached Plugin”.
-
Property Value Command-Line Format --innodb-autoextend-increment=#
System Variable innodb_autoextend_increment
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Integer Default Value 64
Minimum Value 1
Maximum Value 1000
The increment size (in megabytes) for extending the size of an auto-extending
InnoDB
system tablespace file when it becomes full. The default value is 64. For related information, see System Tablespace Data File Configuration, and Resizing the System Tablespace.The
innodb_autoextend_increment
setting does not affect file-per-table tablespace files or general tablespace files. These files are auto-extending regardless of theinnodb_autoextend_increment
setting. The initial extensions are by small amounts, after which extensions occur in increments of 4MB. -
Property Value Command-Line Format --innodb-autoinc-lock-mode=#
System Variable innodb_autoinc_lock_mode
Scope Global Dynamic No SET_VAR
Hint AppliesNo Type Integer Default Value (>= 8.0.3) 2
Default Value (<= 8.0.2) 1
Valid Values 0
1
2
The lock mode to use for generating auto-increment values. Permissible values are 0, 1, or 2, for traditional, consecutive, or interleaved, respectively.
The default setting is 2 (interleaved) as of MySQL 8.0, and 1 (consecutive) before that. The change to interleaved lock mode as the default setting reflects the change from statement-based to row-based replication as the default replication type, which occurred in MySQL 5.7. Statement-based replication requires the consecutive auto-increment lock mode to ensure that auto-increment values are assigned in a predictable and repeatable order for a given sequence of SQL statements, whereas row-based replication is not sensitive to the execution order of SQL statements.
For the characteristics of each lock mode, see InnoDB AUTO_INCREMENT Lock Modes.
innodb_background_drop_list_empty
Property Value Command-Line Format --innodb-background-drop-list-empty[={OFF|ON}]
System Variable innodb_background_drop_list_empty
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Boolean Default Value OFF
Enabling the
innodb_background_drop_list_empty
debug option helps avoid test case failures by delaying table creation until the background drop list is empty. For example, if test case A places tablet1
on the background drop list, test case B waits until the background drop list is empty before creating tablet1
.-
Property Value Command-Line Format --innodb-buffer-pool-chunk-size=#
System Variable innodb_buffer_pool_chunk_size
Scope Global Dynamic No SET_VAR
Hint AppliesNo Type Integer Default Value 134217728
Minimum Value 1048576
Maximum Value innodb_buffer_pool_size / innodb_buffer_pool_instances
innodb_buffer_pool_chunk_size
defines the chunk size forInnoDB
buffer pool resizing operations. Theinnodb_buffer_pool_size
parameter is dynamic, which allows you to resize the buffer pool without restarting the server.To avoid copying all buffer pool pages during resizing operations, the operation is performed in “chunks”. By default,
innodb_buffer_pool_chunk_size
is 128MB (134217728 bytes). The number of pages contained in a chunk depends on the value ofinnodb_page_size
.innodb_buffer_pool_chunk_size
can be increased or decreased in units of 1MB (1048576 bytes).The following conditions apply when altering the
innodb_buffer_pool_chunk_size
value:If
innodb_buffer_pool_chunk_size
*innodb_buffer_pool_instances
is larger than the current buffer pool size when the buffer pool is initialized,innodb_buffer_pool_chunk_size
is truncated toinnodb_buffer_pool_size
/innodb_buffer_pool_instances
.Buffer pool size must always be equal to or a multiple of
innodb_buffer_pool_chunk_size
*innodb_buffer_pool_instances
. If you alterinnodb_buffer_pool_chunk_size
,innodb_buffer_pool_size
is automatically rounded to a value that is equal to or a multiple ofinnodb_buffer_pool_chunk_size
*innodb_buffer_pool_instances
. The adjustment occurs when the buffer pool is initialized.
ImportantCare should be taken when changing
innodb_buffer_pool_chunk_size
, as changing this value can automatically increase the size of the buffer pool. Before changinginnodb_buffer_pool_chunk_size
, calculate the effect it will have oninnodb_buffer_pool_size
to ensure that the resulting buffer pool size is acceptable.To avoid potential performance issues, the number of chunks (
innodb_buffer_pool_size
/innodb_buffer_pool_chunk_size
) should not exceed 1000.See Section 15.8.3.1, “Configuring InnoDB Buffer Pool Size” for more information.
-
Property Value Command-Line Format --innodb-buffer-pool-debug[={OFF|ON}]
System Variable innodb_buffer_pool_debug
Scope Global Dynamic No SET_VAR
Hint AppliesNo Type Boolean Default Value OFF
Enabling this option permits multiple buffer pool instances when the buffer pool is less than 1GB in size, ignoring the 1GB minimum buffer pool size constraint imposed on
innodb_buffer_pool_instances
. Theinnodb_buffer_pool_debug
option is only available if debugging support is compiled in using theWITH_DEBUG
CMake option. innodb_buffer_pool_dump_at_shutdown
Property Value Command-Line Format --innodb-buffer-pool-dump-at-shutdown[={OFF|ON}]
System Variable innodb_buffer_pool_dump_at_shutdown
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Boolean Default Value ON
Specifies whether to record the pages cached in the
InnoDB
buffer pool when the MySQL server is shut down, to shorten the warmup process at the next restart. Typically used in combination withinnodb_buffer_pool_load_at_startup
. Theinnodb_buffer_pool_dump_pct
option defines the percentage of most recently used buffer pool pages to dump.Both
innodb_buffer_pool_dump_at_shutdown
andinnodb_buffer_pool_load_at_startup
are enabled by default.For more information, see Section 15.8.3.7, “Saving and Restoring the Buffer Pool State”.
-
Property Value Command-Line Format --innodb-buffer-pool-dump-now[={OFF|ON}]
System Variable innodb_buffer_pool_dump_now
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Boolean Default Value OFF
Immediately records the pages cached in the
InnoDB
buffer pool. Typically used in combination withinnodb_buffer_pool_load_now
.For more information, see Section 15.8.3.7, “Saving and Restoring the Buffer Pool State”.
-
Property Value Command-Line Format --innodb-buffer-pool-dump-pct=#
System Variable innodb_buffer_pool_dump_pct
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Integer Default Value 25
Minimum Value 1
Maximum Value 100
Specifies the percentage of the most recently used pages for each buffer pool to read out and dump. The range is 1 to 100. The default value is 25. For example, if there are 4 buffer pools with 100 pages each, and
innodb_buffer_pool_dump_pct
is set to 25, the 25 most recently used pages from each buffer pool are dumped. -
Property Value Command-Line Format --innodb-buffer-pool-filename=file_name
System Variable innodb_buffer_pool_filename
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type File name Default Value ib_buffer_pool
Specifies the name of the file that holds the list of tablespace IDs and page IDs produced by
innodb_buffer_pool_dump_at_shutdown
orinnodb_buffer_pool_dump_now
. Tablespace IDs and page IDs are saved in the following format:space, page_id
. By default, the file is namedib_buffer_pool
and is located in theInnoDB
data directory. A non-default location must be specified relative to the data directory.A file name can be specified at runtime, using a
SET
statement:You can also specify a file name at startup, in a startup string or MySQL configuration file. When specifying a file name at startup, the file must exist or
InnoDB
will return a startup error indicating that there is no such file or directory.For more information, see Section 15.8.3.7, “Saving and Restoring the Buffer Pool State”.
innodb_buffer_pool_in_core_file
Property Value Command-Line Format --innodb-buffer-pool-in-core-file[={OFF|ON}]
Introduced 8.0.14 System Variable innodb_buffer_pool_in_core_file
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Boolean Default Value ON
Disabling the
innodb_buffer_pool_in_core_file
variable reduces the size of core files by excludingInnoDB
buffer pool pages. To use this variable, thecore_file
variable must be enabled and the operating system must support theMADV_DONTDUMP
non-POSIX extension tomadvise()
, which is supported in Linux 3.4 and later. For more information, see Section 15.8.3.8, “Excluding Buffer Pool Pages from Core Files”.-
Property Value Command-Line Format --innodb-buffer-pool-instances=#
System Variable innodb_buffer_pool_instances
Scope Global Dynamic No SET_VAR
Hint AppliesNo Type Integer Default Value (Other) 8 (or 1 if innodb_buffer_pool_size < 1GB
Default Value (Windows, 32-bit platforms) (autosized)
Minimum Value 1
Maximum Value 64
The number of regions that the
InnoDB
buffer pool is divided into. For systems with buffer pools in the multi-gigabyte range, dividing the buffer pool into separate instances can improve concurrency, by reducing contention as different threads read and write to cached pages. Each page that is stored in or read from the buffer pool is assigned to one of the buffer pool instances randomly, using a hashing function. Each buffer pool manages its own free lists, flush lists, LRUs, and all other data structures connected to a buffer pool, and is protected by its own buffer pool mutex.This option only takes effect when setting
innodb_buffer_pool_size
to 1GB or more. The total buffer pool size is divided among all the buffer pools. For best efficiency, specify a combination ofinnodb_buffer_pool_instances
andinnodb_buffer_pool_size
so that each buffer pool instance is at least 1GB.The default value on 32-bit Windows systems depends on the value of
innodb_buffer_pool_size
, as described below:If
innodb_buffer_pool_size
is greater than 1.3GB, the default forinnodb_buffer_pool_instances
isinnodb_buffer_pool_size
/128MB, with individual memory allocation requests for each chunk. 1.3GB was chosen as the boundary at which there is significant risk for 32-bit Windows to be unable to allocate the contiguous address space needed for a single buffer pool.Otherwise, the default is 1.
On all other platforms, the default value is 8 when
innodb_buffer_pool_size
is greater than or equal to 1GB. Otherwise, the default is 1.For related information, see Section 15.8.3.1, “Configuring InnoDB Buffer Pool Size”.
-
Property Value Command-Line Format --innodb-buffer-pool-load-abort[={OFF|ON}]
System Variable innodb_buffer_pool_load_abort
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Boolean Default Value OFF
Interrupts the process of restoring
InnoDB
buffer pool contents triggered byinnodb_buffer_pool_load_at_startup
orinnodb_buffer_pool_load_now
.For more information, see Section 15.8.3.7, “Saving and Restoring the Buffer Pool State”.
innodb_buffer_pool_load_at_startup
Property Value Command-Line Format --innodb-buffer-pool-load-at-startup[={OFF|ON}]
System Variable innodb_buffer_pool_load_at_startup
Scope Global Dynamic No SET_VAR
Hint AppliesNo Type Boolean Default Value ON
Specifies that, on MySQL server startup, the
InnoDB
buffer pool is automatically warmed up by loading the same pages it held at an earlier time. Typically used in combination withinnodb_buffer_pool_dump_at_shutdown
.Both
innodb_buffer_pool_dump_at_shutdown
andinnodb_buffer_pool_load_at_startup
are enabled by default.For more information, see Section 15.8.3.7, “Saving and Restoring the Buffer Pool State”.
-
Property Value Command-Line Format --innodb-buffer-pool-load-now[={OFF|ON}]
System Variable innodb_buffer_pool_load_now
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Boolean Default Value OFF
Immediately warms up the
InnoDB
buffer pool by loading a set of data pages, without waiting for a server restart. Can be useful to bring cache memory back to a known state during benchmarking, or to ready the MySQL server to resume its normal workload after running queries for reports or maintenance.For more information, see Section 15.8.3.7, “Saving and Restoring the Buffer Pool State”.
-
Property Value Command-Line Format --innodb-buffer-pool-size=#
System Variable innodb_buffer_pool_size
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Integer Default Value 134217728
Minimum Value 5242880
Maximum Value (64-bit platforms) 2**64-1
Maximum Value (32-bit platforms) 2**32-1
The size in bytes of the buffer pool, the memory area where
InnoDB
caches table and index data. The default value is 134217728 bytes (128MB). The maximum value depends on the CPU architecture; the maximum is 4294967295 (232-1) on 32-bit systems and 18446744073709551615 (264-1) on 64-bit systems. On 32-bit systems, the CPU architecture and operating system may impose a lower practical maximum size than the stated maximum. When the size of the buffer pool is greater than 1GB, settinginnodb_buffer_pool_instances
to a value greater than 1 can improve the scalability on a busy server.A larger buffer pool requires less disk I/O to access the same table data more than once. On a dedicated database server, you might set the buffer pool size to 80% of the machine's physical memory size. Be aware of the following potential issues when configuring buffer pool size, and be prepared to scale back the size of the buffer pool if necessary.
Competition for physical memory can cause paging in the operating system.
InnoDB
reserves additional memory for buffers and control structures, so that the total allocated space is approximately 10% greater than the specified buffer pool size.Address space for the buffer pool must be contiguous, which can be an issue on Windows systems with DLLs that load at specific addresses.
The time to initialize the buffer pool is roughly proportional to its size. On instances with large buffer pools, initialization time might be significant. To reduce the initialization period, you can save the buffer pool state at server shutdown and restore it at server startup. See Section 15.8.3.7, “Saving and Restoring the Buffer Pool State”.
When you increase or decrease buffer pool size, the operation is performed in chunks. Chunk size is defined by the
innodb_buffer_pool_chunk_size
variable, which has a default of 128 MB.Buffer pool size must always be equal to or a multiple of
innodb_buffer_pool_chunk_size
*innodb_buffer_pool_instances
. If you alter the buffer pool size to a value that is not equal to or a multiple ofinnodb_buffer_pool_chunk_size
*innodb_buffer_pool_instances
, buffer pool size is automatically adjusted to a value that is equal to or a multiple ofinnodb_buffer_pool_chunk_size
*innodb_buffer_pool_instances
.innodb_buffer_pool_size
can be set dynamically, which allows you to resize the buffer pool without restarting the server. TheInnodb_buffer_pool_resize_status
status variable reports the status of online buffer pool resizing operations. See Section 15.8.3.1, “Configuring InnoDB Buffer Pool Size” for more information.If
innodb_dedicated_server
is enabled, theinnodb_buffer_pool_size
value is automatically configured if it is not explicitly defined. For more information, see Section 15.8.12, “Enabling Automatic Configuration for a Dedicated MySQL Server”. -
Property Value Command-Line Format --innodb-change-buffer-max-size=#
System Variable innodb_change_buffer_max_size
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Integer Default Value 25
Minimum Value 0
Maximum Value 50
Maximum size for the
InnoDB
change buffer, as a percentage of the total size of the buffer pool. You might increase this value for a MySQL server with heavy insert, update, and delete activity, or decrease it for a MySQL server with unchanging data used for reporting. For more information, see Section 15.5.2, “Change Buffer”. For general I/O tuning advice, see Section 8.5.8, “Optimizing InnoDB Disk I/O”. -
Property Value Command-Line Format --innodb-change-buffering=value
System Variable innodb_change_buffering
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Enumeration Default Value all
Valid Values none
inserts
deletes
changes
purges
all
Whether
InnoDB
performs change buffering, an optimization that delays write operations to secondary indexes so that the I/O operations can be performed sequentially. Permitted values are described in the following table. Values may also be specified numerically.Table 15.26 Permitted Values for innodb_change_buffering
Value Numeric Value Description none
0
Do not buffer any operations. inserts
1
Buffer insert operations. deletes
2
Buffer delete marking operations; strictly speaking, the writes that mark index records for later deletion during a purge operation. changes
3
Buffer inserts and delete-marking operations. purges
4
Buffer the physical deletion operations that happen in the background. all
5
The default. Buffer inserts, delete-marking operations, and purges. For more information, see Section 15.5.2, “Change Buffer”. For general I/O tuning advice, see Section 8.5.8, “Optimizing InnoDB Disk I/O”.
-
Property Value Command-Line Format --innodb-change-buffering-debug=#
System Variable innodb_change_buffering_debug
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Integer Default Value 0
Maximum Value 2
Sets a debug flag for
InnoDB
change buffering. A value of 1 forces all changes to the change buffer. A value of 2 causes a crash at merge. A default value of 0 indicates that the change buffering debug flag is not set. This option is only available when debugging support is compiled in using theWITH_DEBUG
CMake option. -
Property Value Command-Line Format --innodb-checkpoint-disabled[={OFF|ON}]
Introduced 8.0.2 System Variable innodb_checkpoint_disabled
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Boolean Default Value OFF
This is a debug option that is only intended for expert debugging use. It disables checkpoints so that a deliberate server exit always initiates
InnoDB
recovery. It should only be enabled for a short interval, typically before running DML operations that write redo log entries that would require recovery following a server exit. This option is only available if debugging support is compiled in using theWITH_DEBUG
CMake option. -
Property Value Command-Line Format --innodb-checksum-algorithm=value
System Variable innodb_checksum_algorithm
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Enumeration Default Value crc32
Valid Values innodb
crc32
none
strict_innodb
strict_crc32
strict_none
Specifies how to generate and verify the checksum stored in the disk blocks of
InnoDB
tablespaces. The default value forinnodb_checksum_algorithm
iscrc32
.Versions of MySQL Enterprise Backup up to 3.8.0 do not support backing up tablespaces that use CRC32 checksums. MySQL Enterprise Backup adds CRC32 checksum support in 3.8.1, with some limitations. Refer to the MySQL Enterprise Backup 3.8.1 Change History for more information.
The value
innodb
is backward-compatible with earlier versions of MySQL. The valuecrc32
uses an algorithm that is faster to compute the checksum for every modified block, and to check the checksums for each disk read. It scans blocks 32 bits at a time, which is faster than theinnodb
checksum algorithm, which scans blocks 8 bits at a time. The valuenone
writes a constant value in the checksum field rather than computing a value based on the block data. The blocks in a tablespace can use a mix of old, new, and no checksum values, being updated gradually as the data is modified; once blocks in a tablespace are modified to use thecrc32
algorithm, the associated tables cannot be read by earlier versions of MySQL.The strict form of a checksum algorithm reports an error if it encounters a valid but non-matching checksum value in a tablespace. It is recommended that you only use strict settings in a new instance, to set up tablespaces for the first time. Strict settings are somewhat faster, because they do not need to compute all checksum values during disk reads.
The following table shows the difference between the
none
,innodb
, andcrc32
option values, and their strict counterparts.none
,innodb
, andcrc32
write the specified type of checksum value into each data block, but for compatibility accept other checksum values when verifying a block during a read operation. Strict settings also accept valid checksum values but print an error message when a valid non-matching checksum value is encountered. Using the strict form can make verification faster if allInnoDB
data files in an instance are created under an identicalinnodb_checksum_algorithm
value.Table 15.27 Permitted innodb_checksum_algorithm Values
Value Generated checksum (when writing) Permitted checksums (when reading) none A constant number. Any of the checksums generated by none
,innodb
, orcrc32
.innodb A checksum calculated in software, using the original algorithm from InnoDB
.Any of the checksums generated by none
,innodb
, orcrc32
.crc32 A checksum calculated using the crc32
algorithm, possibly done with a hardware assist.Any of the checksums generated by none
,innodb
, orcrc32
.strict_none A constant number Any of the checksums generated by none
,innodb
, orcrc32
.InnoDB
prints an error message if a valid but non-matching checksum is encountered.strict_innodb A checksum calculated in software, using the original algorithm from InnoDB
.Any of the checksums generated by none
,innodb
, orcrc32
.InnoDB
prints an error message if a valid but non-matching checksum is encountered.strict_crc32 A checksum calculated using the crc32
algorithm, possibly done with a hardware assist.Any of the checksums generated by none
,innodb
, orcrc32
.InnoDB
prints an error message if a valid but non-matching checksum is encountered. -
Property Value Command-Line Format --innodb-cmp-per-index-enabled[={OFF|ON}]
System Variable innodb_cmp_per_index_enabled
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Boolean Default Value OFF
Enables per-index compression-related statistics in the
INFORMATION_SCHEMA.INNODB_CMP_PER_INDEX
table. Because these statistics can be expensive to gather, only enable this option on development, test, or slave instances during performance tuning related toInnoDB
compressed tables.For more information, see Section 25.39.7, “The INFORMATION_SCHEMA INNODB_CMP_PER_INDEX and INNODB_CMP_PER_INDEX_RESET Tables”, and Section 15.9.1.4, “Monitoring InnoDB Table Compression at Runtime”.
-
Property Value Command-Line Format --innodb-commit-concurrency=#
System Variable innodb_commit_concurrency
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Integer Default Value 0
Minimum Value 0
Maximum Value 1000
The number of threads that can commit at the same time. A value of 0 (the default) permits any number of transactions to commit simultaneously.
The value of
innodb_commit_concurrency
cannot be changed at runtime from zero to nonzero or vice versa. The value can be changed from one nonzero value to another. -
Property Value Command-Line Format --innodb-compress-debug=value
System Variable innodb_compress_debug
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Enumeration Default Value none
Valid Values none
zlib
lz4
lz4hc
Compresses all tables using a specified compression algorithm without having to define a
COMPRESSION
attribute for each table. This option is only available if debugging support is compiled in using theWITH_DEBUG
CMake option.For related information, see Section 15.9.2, “InnoDB Page Compression”.
innodb_compression_failure_threshold_pct
Property Value Command-Line Format --innodb-compression-failure-threshold-pct=#
System Variable innodb_compression_failure_threshold_pct
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Integer Default Value 5
Minimum Value 0
Maximum Value 100
Defines the compression failure rate threshold for a table, as a percentage, at which point MySQL begins adding padding within compressed pages to avoid expensive compression failures. When this threshold is passed, MySQL begins to leave additional free space within each new compressed page, dynamically adjusting the amount of free space up to the percentage of page size specified by
innodb_compression_pad_pct_max
. A value of zero disables the mechanism that monitors compression efficiency and dynamically adjusts the padding amount.For more information, see Section 15.9.1.6, “Compression for OLTP Workloads”.
-
Property Value Command-Line Format --innodb-compression-level=#
System Variable innodb_compression_level
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Integer Default Value 6
Minimum Value 0
Maximum Value 9
Specifies the level of zlib compression to use for
InnoDB
compressed tables and indexes. A higher value lets you fit more data onto a storage device, at the expense of more CPU overhead during compression. A lower value lets you reduce CPU overhead when storage space is not critical, or you expect the data is not especially compressible.For more information, see Section 15.9.1.6, “Compression for OLTP Workloads”.
innodb_compression_pad_pct_max
Property Value Command-Line Format --innodb-compression-pad-pct-max=#
System Variable innodb_compression_pad_pct_max
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Integer Default Value 50
Minimum Value 0
Maximum Value 75
Specifies the maximum percentage that can be reserved as free space within each compressed page, allowing room to reorganize the data and modification log within the page when a compressed table or index is updated and the data might be recompressed. Only applies when
innodb_compression_failure_threshold_pct
is set to a nonzero value, and the rate of compression failures passes the cutoff point.For more information, see Section 15.9.1.6, “Compression for OLTP Workloads”.
-
Property Value Command-Line Format --innodb-concurrency-tickets=#
System Variable innodb_concurrency_tickets
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Integer Default Value 5000
Minimum Value 1
Maximum Value 4294967295
Determines the number of threads that can enter
InnoDB
concurrently. A thread is placed in a queue when it tries to enterInnoDB
if the number of threads has already reached the concurrency limit. When a thread is permitted to enterInnoDB
, it is given a number of “ tickets” equal to the value ofinnodb_concurrency_tickets
, and the thread can enter and leaveInnoDB
freely until it has used up its tickets. After that point, the thread again becomes subject to the concurrency check (and possible queuing) the next time it tries to enterInnoDB
. The default value is 5000.With a small
innodb_concurrency_tickets
value, small transactions that only need to process a few rows compete fairly with larger transactions that process many rows. The disadvantage of a smallinnodb_concurrency_tickets
value is that large transactions must loop through the queue many times before they can complete, which extends the amount of time required to complete their task.With a large
innodb_concurrency_tickets
value, large transactions spend less time waiting for a position at the end of the queue (controlled byinnodb_thread_concurrency
) and more time retrieving rows. Large transactions also require fewer trips through the queue to complete their task. The disadvantage of a largeinnodb_concurrency_tickets
value is that too many large transactions running at the same time can starve smaller transactions by making them wait a longer time before executing.With a nonzero
innodb_thread_concurrency
value, you may need to adjust theinnodb_concurrency_tickets
value up or down to find the optimal balance between larger and smaller transactions. TheSHOW ENGINE INNODB STATUS
report shows the number of tickets remaining for an executing transaction in its current pass through the queue. This data may also be obtained from theTRX_CONCURRENCY_TICKETS
column of theINFORMATION_SCHEMA.INNODB_TRX
table.For more information, see Section 15.8.4, “Configuring Thread Concurrency for InnoDB”.
-
Property Value Command-Line Format --innodb-data-file-path=file_name
System Variable innodb_data_file_path
Scope Global Dynamic No SET_VAR
Hint AppliesNo Type String Default Value ibdata1:12M:autoextend
Defines the name, size, and attributes of
InnoDB
system tablespace data files. If you do not specify a value forinnodb_data_file_path
, the default behavior is to create a single auto-extending data file, slightly larger than 12MB, namedibdata1
.The full syntax for a data file specification includes the file name, file size, and
autoextend
andmax
attributes:file_name:file_size[:autoextend[:max:max_file_size]]
File sizes are specified KB, MB or GB (1024MB) by appending
K
,M
orG
to the size value. If specifying the data file size in kilobytes (KB), do so in multiples of 1024. Otherwise, KB values are rounded to nearest megabyte (MB) boundary. The sum of the sizes of the files must be at least slightly larger than 12MB.A minimum file size is enforced for the first system tablespace data file to ensure that there is enough space for doublewrite buffer pages:
For an
innodb_page_size
value of 16KB or less, the minimum file size is 3MB.For an
innodb_page_size
value of 32KB, the minimum file size is 6MB.For an
innodb_page_size
value of 64KB, the minimum file size is 12MB.
The size limit of individual files is determined by your operating system. You can set the file size to more than 4GB on operating systems that support large files. You can also use raw disk partitions as data files.
The
autoextend
andmax
attributes can be used only for the data file that is specified last in theinnodb_data_file_path
setting. For example:[mysqld] innodb_data_file_path=ibdata1:50M;ibdata2:12M:autoextend:max:500MB
If you specify the
autoextend
option,InnoDB
extends the data file if it runs out of free space. Theautoextend
increment is 64MB by default. To modify the increment, change theinnodb_autoextend_increment
system variable.The full directory path for system tablespace data files is formed by concatenating the paths defined by
innodb_data_home_dir
andinnodb_data_file_path
.For more information about configuring system tablespace data files, see Section 15.8.1, “InnoDB Startup Configuration”.
-
Property Value Command-Line Format --innodb-data-home-dir=dir_name
System Variable innodb_data_home_dir
Scope Global Dynamic No SET_VAR
Hint AppliesNo Type Directory name The common part of the directory path for
InnoDB
system tablespace data files. This setting does not affect the location of file-per-table tablespaces wheninnodb_file_per_table
is enabled. The default value is the MySQLdata
directory. If you specify the value as an empty string, you can specify an absolute file paths forinnodb_data_file_path
.A trailing slash is required when specifying a value for
innodb_data_home_dir
. For example:[mysqld] innodb_data_home_dir = /path/to/myibdata/
For related information, see Section 15.8.1, “InnoDB Startup Configuration”.
innodb_ddl_log_crash_reset_debug
Property Value Command-Line Format --innodb-ddl-log-crash-reset-debug[={OFF|ON}]
Introduced 8.0.3 System Variable innodb_ddl_log_crash_reset_debug
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Boolean Default Value OFF
Enable this debug option to reset DDL log crash injection counters to 1. This option is only available when debugging support is compiled in using the
WITH_DEBUG
CMake option.-
Property Value Command-Line Format --innodb-deadlock-detect[={OFF|ON}]
System Variable innodb_deadlock_detect
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Boolean Default Value ON
This option is used to disable deadlock detection. On high concurrency systems, deadlock detection can cause a slowdown when numerous threads wait for the same lock. At times, it may be more efficient to disable deadlock detection and rely on the
innodb_lock_wait_timeout
setting for transaction rollback when a deadlock occurs.For related information, see Section 15.7.5.2, “Deadlock Detection and Rollback”.
-
Property Value Command-Line Format --innodb-dedicated-server[={OFF|ON}]
Introduced 8.0.3 System Variable innodb_dedicated_server
Scope Global Dynamic No SET_VAR
Hint AppliesNo Type Boolean Default Value OFF
When
innodb_dedicated_server
is enabled,InnoDB
automatically configures the following options according to the amount of memory detected on the server:Only consider enabling this option if your MySQL instance runs on a dedicated server where the MySQL server is able to consume all available system resources. Enabling this option is not recommended if your MySQL instance shares system resources with other applications.
For more information, see Section 15.8.12, “Enabling Automatic Configuration for a Dedicated MySQL Server”.
-
Property Value Command-Line Format --innodb-default-row-format=value
System Variable innodb_default_row_format
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Enumeration Default Value DYNAMIC
Valid Values DYNAMIC
COMPACT
REDUNDANT
The
innodb_default_row_format
option defines the default row format forInnoDB
tables and user-created temporary tables. The default setting isDYNAMIC
. Other permitted values areCOMPACT
andREDUNDANT
. TheCOMPRESSED
row format, which is not supported for use in the system tablespace, cannot be defined as the default.Newly created tables use the row format defined by
innodb_default_row_format
when aROW_FORMAT
option is not specified explicitly or whenROW_FORMAT=DEFAULT
is used.When a
ROW_FORMAT
option is not specified explicitly or whenROW_FORMAT=DEFAULT
is used, any operation that rebuilds a table also silently changes the row format of the table to the format defined byinnodb_default_row_format
. For more information, see Defining the Row Format of a Table.Internal
InnoDB
temporary tables created by the server to process queries use theDYNAMIC
row format, regardless of theinnodb_default_row_format
setting. -
Property Value Command-Line Format --innodb-directories=dir_name
Introduced 8.0.4 System Variable innodb_directories
Scope Global Dynamic No SET_VAR
Hint AppliesNo Type Directory name Defines directories to scan at startup for tablespace files. This option is used when moving or restoring tablespace files to a new location while the server is offline. It is also used to specify directories of tablespace files created using an absolute path or that reside outside of the data directory (see Section 15.6.3.6, “Creating a Tablespace Outside of the Data Directory”).
Tablespace discovery during crash recovery relies on the
innodb_directories
setting to identify tablespaces referenced in the redo logs. For more information, see Tablespace Discovery During Crash Recovery.Directories defined by
innodb_data_home_dir
,innodb_undo_directory
, anddatadir
are automatically appended to theinnodb_directories
argument value, regardless of whether theinnodb_directories
option is specified explicitly.innodb_directories
may be specified as an option in a startup command or in a MySQL option file. Quotes are used around the argument value because otherwise a semicolon (;) is interpreted as a special character by some command interpreters. (Unix shells treat it as a command terminator, for example.)Startup command:
mysqld --innodb-directories="directory_path_1;directory_path_2"
MySQL option file:
[mysqld] innodb_directories="directory_path_1;directory_path_2"
Wildcard expressions cannot be used to specify directories.
The
innodb_directories
scan also traverses the subdirectories of specified directories. Duplicate directories and subdirectories are discarded from the list of directories to be scanned.For more information, see Section 15.6.3.8, “Moving Tablespace Files While the Server is Offline”.
innodb_disable_sort_file_cache
Property Value Command-Line Format --innodb-disable-sort-file-cache[={OFF|ON}]
System Variable innodb_disable_sort_file_cache
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Boolean Default Value OFF
Disables the operating system file system cache for merge-sort temporary files. The effect is to open such files with the equivalent of
O_DIRECT
.-
Property Value Command-Line Format --innodb-doublewrite[={OFF|ON}]
System Variable innodb_doublewrite
Scope Global Dynamic No SET_VAR
Hint AppliesNo Type Boolean Default Value ON
When enabled (the default),
InnoDB
stores all data twice, first to the doublewrite buffer, then to the actual data files. This variable can be turned off with--skip-innodb-doublewrite
for benchmarks or cases when top performance is needed rather than concern for data integrity or possible failures.If system tablespace data files (
ibdata*
files) are located on Fusion-io devices that support atomic writes, doublewrite buffering is automatically disabled and Fusion-io atomic writes are used for all data files. Because the doublewrite buffer setting is global, doublewrite buffering is also disabled for data files residing on non-Fusion-io hardware. This feature is only supported on Fusion-io hardware and only enabled for Fusion-io NVMFS on Linux. To take full advantage of this feature, aninnodb_flush_method
setting ofO_DIRECT
is recommended.For related information, see Section 15.6.4, “Doublewrite Buffer”.
-
Property Value Command-Line Format --innodb-fast-shutdown=#
System Variable innodb_fast_shutdown
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Integer Default Value 1
Valid Values 0
1
2
The
InnoDB
shutdown mode. If the value is 0,InnoDB
does a slow shutdown, a full purge and a change buffer merge before shutting down. If the value is 1 (the default),InnoDB
skips these operations at shutdown, a process known as a fast shutdown. If the value is 2,InnoDB
flushes its logs and shuts down cold, as if MySQL had crashed; no committed transactions are lost, but the crash recovery operation makes the next startup take longer.The slow shutdown can take minutes, or even hours in extreme cases where substantial amounts of data are still buffered. Use the slow shutdown technique before upgrading or downgrading between MySQL major releases, so that all data files are fully prepared in case the upgrade process updates the file format.
Use
innodb_fast_shutdown=2
in emergency or troubleshooting situations, to get the absolute fastest shutdown if data is at risk of corruption. innodb_fil_make_page_dirty_debug
Property Value Command-Line Format --innodb-fil-make-page-dirty-debug=#
System Variable innodb_fil_make_page_dirty_debug
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Integer Default Value 0
Maximum Value 2**32-1
By default, setting
innodb_fil_make_page_dirty_debug
to the ID of a tablespace immediately dirties the first page of the tablespace. Ifinnodb_saved_page_number_debug
is set to a non-default value, settinginnodb_fil_make_page_dirty_debug
dirties the specified page. Theinnodb_fil_make_page_dirty_debug
option is only available if debugging support is compiled in using theWITH_DEBUG
CMake option.-
Property Value Command-Line Format --innodb-file-per-table[={OFF|ON}]
System Variable innodb_file_per_table
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Boolean Default Value ON
When
innodb_file_per_table
is enabled, tables are created in file-per-table tablespaces by default. When disabled, tables are created in the system tablespace by default. For information about file-per-table tablespaces, see Section 15.6.3.2, “File-Per-Table Tablespaces”. For information about theInnoDB
system tablespace, see Section 15.6.3.1, “The System Tablespace”.The
innodb_file_per_table
variable can be configured at runtime using aSET GLOBAL
statement, specified on the command line at startup, or specified in an option file. Configuration at runtime requires privileges sufficient to set global system variables (see Section 5.1.9.1, “System Variable Privileges”) and immediately affects the operation of all connections.When a table that resides in a file-per-table tablespace is truncated or dropped, the freed space is returned to the operating system. Truncating or dropping a table that resides in the system tablespace only frees space in the system tablespace. Freed space in the system tablespace can be used again for
InnoDB
data but is not returned to the operating system, as system tablespace data files never shrink.The
innodb_file_per-table
setting does not affect the creation of temporary tables. As of MySQL 8.0.14, temporary tables are created in session temporary tablespaces, and in the global temporary tablespace before that. See Section 15.6.3.5, “Temporary Tablespaces”. -
Property Value Command-Line Format --innodb-fill-factor=#
System Variable innodb_fill_factor
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Integer Default Value 100
Minimum Value 10
Maximum Value 100
InnoDB
performs a bulk load when creating or rebuilding indexes. This method of index creation is known as a “sorted index build”.innodb_fill_factor
defines the percentage of space on each B-tree page that is filled during a sorted index build, with the remaining space reserved for future index growth. For example, settinginnodb_fill_factor
to 80 reserves 20 percent of the space on each B-tree page for future index growth. Actual percentages may vary. Theinnodb_fill_factor
setting is interpreted as a hint rather than a hard limit.An
innodb_fill_factor
setting of 100 leaves 1/16 of the space in clustered index pages free for future index growth.innodb_fill_factor
applies to both B-tree leaf and non-leaf pages. It does not apply to external pages used forTEXT
orBLOB
entries.For more information, see Section 15.6.2.3, “Sorted Index Builds”.
-
Property Value Command-Line Format --innodb-flush-log-at-timeout=#
System Variable innodb_flush_log_at_timeout
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Integer Default Value 1
Minimum Value 1
Maximum Value 2700
Write and flush the logs every
N
seconds.innodb_flush_log_at_timeout
allows the timeout period between flushes to be increased in order to reduce flushing and avoid impacting performance of binary log group commit. The default setting forinnodb_flush_log_at_timeout
is once per second. innodb_flush_log_at_trx_commit
Property Value Command-Line Format --innodb-flush-log-at-trx-commit=#
System Variable innodb_flush_log_at_trx_commit
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Enumeration Default Value 1
Valid Values 0
1
2
Controls the balance between strict ACID compliance for commit operations and higher performance that is possible when commit-related I/O operations are rearranged and done in batches. You can achieve better performance by changing the default value but then you can lose transactions in a crash.
The default setting of 1 is required for full ACID compliance. Logs are written and flushed to disk at each transaction commit.
With a setting of 0, logs are written and flushed to disk once per second. Transactions for which logs have not been flushed can be lost in a crash.
With a setting of 2, logs are written after each transaction commit and flushed to disk once per second. Transactions for which logs have not been flushed can be lost in a crash.
For settings 0 and 2, once-per-second flushing is not 100% guaranteed. Flushing may occur more frequently due to DDL changes and other internal
InnoDB
activities that cause logs to be flushed independently of theinnodb_flush_log_at_trx_commit
setting, and sometimes less frequently due to scheduling issues. If logs are flushed once per second, up to one second of transactions can be lost in a crash. If logs are flushed more or less frequently than once per second, the amount of transactions that can be lost varies accordingly.Log flushing frequency is controlled by
innodb_flush_log_at_timeout
, which allows you to set log flushing frequency toN
seconds (whereN
is1 ... 2700
, with a default value of 1). However, any mysqld process crash can erase up toN
seconds of transactions.DDL changes and other internal
InnoDB
activities flush the log independently of theinnodb_flush_log_at_trx_commit
setting.InnoDB
crash recovery works regardless of theinnodb_flush_log_at_trx_commit
setting. Transactions are either applied entirely or erased entirely.
For durability and consistency in a replication setup that uses
InnoDB
with transactions:If binary logging is enabled, set
sync_binlog=1
.Always set
innodb_flush_log_at_trx_commit=1
.
CautionMany operating systems and some disk hardware fool the flush-to-disk operation. They may tell mysqld that the flush has taken place, even though it has not. In this case, the durability of transactions is not guaranteed even with the recommended settings, and in the worst case, a power outage can corrupt
InnoDB
data. Using a battery-backed disk cache in the SCSI disk controller or in the disk itself speeds up file flushes, and makes the operation safer. You can also try to disable the caching of disk writes in hardware caches.-
Property Value Command-Line Format --innodb-flush-method=value
System Variable innodb_flush_method
Scope Global Dynamic No SET_VAR
Hint AppliesNo Type String Default Value (Windows) unbuffered
Default Value (Unix) fsync
Valid Values (Windows) unbuffered
normal
Valid Values (Unix) fsync
O_DSYNC
littlesync
nosync
O_DIRECT
O_DIRECT_NO_FSYNC
Defines the method used to flush data to
InnoDB
data files and log files, which can affect I/O throughput.On Unix-like systems, the default value is
fsync
. On Windows, the default value isunbuffered
.NoteIn MySQL 8.0,
innodb_flush_method
options may be specified numerically.The
innodb_flush_method
options for Unix-like systems include:fsync
or0
:InnoDB
uses thefsync()
system call to flush both the data and log files.fsync
is the default setting.O_DSYNC
or1
:InnoDB
usesO_SYNC
to open and flush the log files, andfsync()
to flush the data files.InnoDB
does not useO_DSYNC
directly because there have been problems with it on many varieties of Unix.littlesync
or2
: This option is used for internal performance testing and is currently unsupported. Use at your own risk.nosync
or3
: This option is used for internal performance testing and is currently unsupported. Use at your own risk.O_DIRECT
or4
:InnoDB
usesO_DIRECT
(ordirectio()
on Solaris) to open the data files, and usesfsync()
to flush both the data and log files. This option is available on some GNU/Linux versions, FreeBSD, and Solaris.O_DIRECT_NO_FSYNC
:InnoDB
usesO_DIRECT
during flushing I/O, but skips thefsync()
system call after each write operation.Prior to MySQL 8.0.14, this setting is not suitable for file systems such as XFS and EXT4, which require an
fsync()
system call to synchronize file system metadata changes. If you are not sure whether your file system requires anfsync()
system call to synchronize file system metadata changes, useO_DIRECT
instead.As of MySQL 8.0.14,
fsync()
is called after creating a new file, after increasing file size, and after closing a file, to ensure that file system metadata changes are synchronized. Thefsync()
system call is still skipped after each write operation.On storage devices with cache, data loss is possible if data files and redo log files reside on different storage devices, and a crash occurs before data file writes are flushed from the device cache. If you use or intend to use different storage devices for redo logs and data files, use
O_DIRECT
instead.
The
innodb_flush_method
options for Windows systems include:unbuffered
or0
:InnoDB
uses simulated asynchronous I/O and non-buffered I/O.normal
or1
:InnoDB
uses simulated asynchronous I/O and buffered I/O.
How each setting affects performance depends on hardware configuration and workload. Benchmark your particular configuration to decide which setting to use, or whether to keep the default setting. Examine the
Innodb_data_fsyncs
status variable to see the overall number offsync()
calls for each setting. The mix of read and write operations in your workload can affect how a setting performs. For example, on a system with a hardware RAID controller and battery-backed write cache,O_DIRECT
can help to avoid double buffering between theInnoDB
buffer pool and the operating system file system cache. On some systems whereInnoDB
data and log files are located on a SAN, the default value orO_DSYNC
might be faster for a read-heavy workload with mostlySELECT
statements. Always test this parameter with hardware and workload that reflect your production environment. For general I/O tuning advice, see Section 8.5.8, “Optimizing InnoDB Disk I/O”.If
innodb_dedicated_server
is enabled, theinnodb_flush_method
value is automatically configured if it is not explicitly defined. For more information, see Section 15.8.12, “Enabling Automatic Configuration for a Dedicated MySQL Server”. -
Property Value Command-Line Format --innodb-flush-neighbors=#
System Variable innodb_flush_neighbors
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Enumeration Default Value (>= 8.0.3) 0
Default Value (<= 8.0.2) 1
Valid Values 0
1
2
Specifies whether flushing a page from the
InnoDB
buffer pool also flushes other dirty pages in the same extent.A setting of 0 turns
innodb_flush_neighbors
off and no other dirty pages are flushed from the buffer pool.A setting of 1 flushes contiguous dirty pages in the same extent from the buffer pool.
A setting of 2 flushes dirty pages in the same extent from the buffer pool.
When the table data is stored on a traditional HDD storage device, flushing such neighbor pages in one operation reduces I/O overhead (primarily for disk seek operations) compared to flushing individual pages at different times. For table data stored on SSD, seek time is not a significant factor and you can set this option to 0 to spread out write operations. For related information, see Section 15.8.3.6, “Fine-tuning InnoDB Buffer Pool Flushing”.
-
Property Value Command-Line Format --innodb-flush-sync[={OFF|ON}]
System Variable innodb_flush_sync
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Boolean Default Value ON
The
innodb_flush_sync
parameter, which is enabled by default, causes theinnodb_io_capacity
setting to be ignored for bursts of I/O activity that occur at checkpoints. To adhere to the limit onInnoDB
background I/O activity defined by theinnodb_io_capacity
setting, disableinnodb_flush_sync
.For related information, see Section 15.8.7, “Configuring the InnoDB Master Thread I/O Rate”.
-
Property Value Command-Line Format --innodb-flushing-avg-loops=#
System Variable innodb_flushing_avg_loops
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Integer Default Value 30
Minimum Value 1
Maximum Value 1000
Number of iterations for which
InnoDB
keeps the previously calculated snapshot of the flushing state, controlling how quickly adaptive flushing responds to changing workloads. Increasing the value makes the rate of flush operations change smoothly and gradually as the workload changes. Decreasing the value makes adaptive flushing adjust quickly to workload changes, which can cause spikes in flushing activity if the workload increases and decreases suddenly.For related information, see Section 15.8.3.6, “Fine-tuning InnoDB Buffer Pool Flushing”.
-
Property Value Command-Line Format --innodb-force-load-corrupted[={OFF|ON}]
System Variable innodb_force_load_corrupted
Scope Global Dynamic No SET_VAR
Hint AppliesNo Type Boolean Default Value OFF
Permits
InnoDB
to load tables at startup that are marked as corrupted. Use only during troubleshooting, to recover data that is otherwise inaccessible. When troubleshooting is complete, disable this setting and restart the server. -
Property Value Command-Line Format --innodb-force-recovery=#
System Variable innodb_force_recovery
Scope Global Dynamic No SET_VAR
Hint AppliesNo Type Integer Default Value 0
Minimum Value 0
Maximum Value 6
The crash recovery mode, typically only changed in serious troubleshooting situations. Possible values are from 0 to 6. For the meanings of these values and important information about
innodb_force_recovery
, see Section 15.20.2, “Forcing InnoDB Recovery”.WarningOnly set this variable to a value greater than 0 in an emergency situation so that you can start
InnoDB
and dump your tables. As a safety measure,InnoDB
preventsINSERT
,UPDATE
, orDELETE
operations wheninnodb_force_recovery
is greater than 0. Aninnodb_force_recovery
setting of 4 or greater placesInnoDB
into read-only mode.These restrictions may cause replication administration commands to fail with an error, as replication stores the slave status logs in
InnoDB
tables. -
Property Value Command-Line Format --innodb-fsync-threshold=#
Introduced 8.0.13 System Variable innodb_fsync_threshold
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Integer Default Value 0
Minimum Value 0
Maximum Value 2**64-1
By default, when
InnoDB
creates a new data file, such as a new log file or tablespace file, it flushes the contents of the write buffer to disk only after the file is fully written, which can cause a large amount of disk write activity to occur at once. To force smaller, periodic flushes, useinnodb_fsync_threshold
to define a threshold size for the write buffer, in bytes. The contents of the write buffer are flushed to disk when the threshold size is reached. The default value of 0 forces the default behavior.Specifying a write buffer threshold size to force smaller, periodic flushes may be beneficial in cases where multiple MySQL instances use the same storage devices. For example, creating a new MySQL instance and its associated data files could cause large surges of disk write activity, impeding the performance of other MySQL instances that use the same storage devices. Configuring a write buffer threshold size helps avoid such surges in disk write activity.
-
Property Value System Variable innodb_ft_aux_table
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type String Specifies the qualified name of an
InnoDB
table containing aFULLTEXT
index. This variable is intended for diagnostic purposes and can only be set at runtime. For example:After you set this variable to a name in the format
, thedb_name
/table_name
INFORMATION_SCHEMA
tablesINNODB_FT_INDEX_TABLE
,INNODB_FT_INDEX_CACHE
,INNODB_FT_CONFIG
,INNODB_FT_DELETED
, andINNODB_FT_BEING_DELETED
show information about the search index for the specified table.For more information, see Section 15.14.4, “InnoDB INFORMATION_SCHEMA FULLTEXT Index Tables”.
-
Property Value Command-Line Format --innodb-ft-cache-size=#
System Variable innodb_ft_cache_size
Scope Global Dynamic No SET_VAR
Hint AppliesNo Type Integer Default Value 8000000
Minimum Value 1600000
Maximum Value 80000000
The memory allocated, in bytes, for the
InnoDB
FULLTEXT
search index cache, which holds a parsed document in memory while creating anInnoDB
FULLTEXT
index. Index inserts and updates are only committed to disk when theinnodb_ft_cache_size
size limit is reached.innodb_ft_cache_size
defines the cache size on a per table basis. To set a global limit for all tables, seeinnodb_ft_total_cache_size
.For more information, see InnoDB Full-Text Index Cache.
-
Property Value Command-Line Format --innodb-ft-enable-diag-print[={OFF|ON}]
System Variable innodb_ft_enable_diag_print
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Boolean Default Value OFF
Whether to enable additional full-text search (FTS) diagnostic output. This option is primarily intended for advanced FTS debugging and will not be of interest to most users. Output is printed to the error log and includes information such as:
FTS index sync progress (when the FTS cache limit is reached). For example:
FTS SYNC for table test, deleted count: 100 size: 10000 bytes SYNC words: 100
FTS optimize progress. For example:
FTS start optimize test FTS_OPTIMIZE: optimize "mysql" FTS_OPTIMIZE: processed "mysql"
FTS index build progress. For example:
Number of doc processed: 1000
For FTS queries, the query parsing tree, word weight, query processing time, and memory usage are printed. For example:
FTS Search Processing time: 1 secs: 100 millisec: row(s) 10000 Full Search Memory: 245666 (bytes), Row: 10000
-
Property Value Command-Line Format --innodb-ft-enable-stopword[={OFF|ON}]
System Variable innodb_ft_enable_stopword
Scope Global, Session Dynamic Yes SET_VAR
Hint AppliesNo Type Boolean Default Value ON
Specifies that a set of stopwords is associated with an
InnoDB
FULLTEXT
index at the time the index is created. If theinnodb_ft_user_stopword_table
option is set, the stopwords are taken from that table. Else, if theinnodb_ft_server_stopword_table
option is set, the stopwords are taken from that table. Otherwise, a built-in set of default stopwords is used.For more information, see Section 12.9.4, “Full-Text Stopwords”.
-
Property Value Command-Line Format --innodb-ft-max-token-size=#
System Variable innodb_ft_max_token_size
Scope Global Dynamic No SET_VAR
Hint AppliesNo Type Integer Default Value 84
Minimum Value 10
Maximum Value 84
Maximum character length of words that are stored in an
InnoDB
FULLTEXT
index. Setting a limit on this value reduces the size of the index, thus speeding up queries, by omitting long keywords or arbitrary collections of letters that are not real words and are not likely to be search terms.For more information, see Section 12.9.6, “Fine-Tuning MySQL Full-Text Search”.
-
Property Value Command-Line Format --innodb-ft-min-token-size=#
System Variable innodb_ft_min_token_size
Scope Global Dynamic No SET_VAR
Hint AppliesNo Type Integer Default Value 3
Minimum Value 0
Maximum Value 16
Minimum length of words that are stored in an
InnoDB
FULLTEXT
index. Increasing this value reduces the size of the index, thus speeding up queries, by omitting common words that are unlikely to be significant in a search context, such as the English words “a” and “to”. For content using a CJK (Chinese, Japanese, Korean) character set, specify a value of 1.For more information, see Section 12.9.6, “Fine-Tuning MySQL Full-Text Search”.
-
Property Value Command-Line Format --innodb-ft-num-word-optimize=#
System Variable innodb_ft_num_word_optimize
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Integer Default Value 2000
Number of words to process during each
OPTIMIZE TABLE
operation on anInnoDB
FULLTEXT
index. Because a bulk insert or update operation to a table containing a full-text search index could require substantial index maintenance to incorporate all changes, you might do a series ofOPTIMIZE TABLE
statements, each picking up where the last left off.For more information, see Section 12.9.6, “Fine-Tuning MySQL Full-Text Search”.
-
Property Value Command-Line Format --innodb-ft-result-cache-limit=#
System Variable innodb_ft_result_cache_limit
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Integer Default Value 2000000000
Minimum Value 1000000
Maximum Value 2**32-1
The
InnoDB
full-text search query result cache limit (defined in bytes) per full-text search query or per thread. Intermediate and finalInnoDB
full-text search query results are handled in memory. Useinnodb_ft_result_cache_limit
to place a size limit on the full-text search query result cache to avoid excessive memory consumption in case of very largeInnoDB
full-text search query results (millions or hundreds of millions of rows, for example). Memory is allocated as required when a full-text search query is processed. If the result cache size limit is reached, an error is returned indicating that the query exceeds the maximum allowed memory.The maximum value of
innodb_ft_result_cache_limit
for all platform types and bit sizes is 2**32-1. innodb_ft_server_stopword_table
Property Value Command-Line Format --innodb-ft-server-stopword-table=db_name/table_name
System Variable innodb_ft_server_stopword_table
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type String Default Value NULL
This option is used to specify your own
InnoDB
FULLTEXT
index stopword list for allInnoDB
tables. To configure your own stopword list for a specificInnoDB
table, useinnodb_ft_user_stopword_table
.Set
innodb_ft_server_stopword_table
to the name of the table containing a list of stopwords, in the format
.db_name
/table_name
The stopword table must exist before you configure
innodb_ft_server_stopword_table
.innodb_ft_enable_stopword
must be enabled andinnodb_ft_server_stopword_table
option must be configured before you create theFULLTEXT
index.The stopword table must be an
InnoDB
table, containing a singleVARCHAR
column namedvalue
.For more information, see Section 12.9.4, “Full-Text Stopwords”.
-
Property Value Command-Line Format --innodb-ft-sort-pll-degree=#
System Variable innodb_ft_sort_pll_degree
Scope Global Dynamic No SET_VAR
Hint AppliesNo Type Integer Default Value 2
Minimum Value 1
Maximum Value 32
Number of threads used in parallel to index and tokenize text in an
InnoDB
FULLTEXT
index when building a search index.For related information, see Section 15.6.2.4, “InnoDB FULLTEXT Indexes”, and
innodb_sort_buffer_size
. -
Property Value Command-Line Format --innodb-ft-total-cache-size=#
System Variable innodb_ft_total_cache_size
Scope Global Dynamic No SET_VAR
Hint AppliesNo Type Integer Default Value 640000000
Minimum Value 32000000
Maximum Value 1600000000
The total memory allocated, in bytes, for the
InnoDB
full-text search index cache for all tables. Creating numerous tables, each with aFULLTEXT
search index, could consume a significant portion of available memory.innodb_ft_total_cache_size
defines a global memory limit for all full-text search indexes to help avoid excessive memory consumption. If the global limit is reached by an index operation, a forced sync is triggered.For more information, see InnoDB Full-Text Index Cache.
-
Property Value Command-Line Format --innodb-ft-user-stopword-table=db_name/table_name
System Variable innodb_ft_user_stopword_table
Scope Global, Session Dynamic Yes SET_VAR
Hint AppliesNo Type String Default Value NULL
This option is used to specify your own
InnoDB
FULLTEXT
index stopword list on a specific table. To configure your own stopword list for allInnoDB
tables, useinnodb_ft_server_stopword_table
.Set
innodb_ft_user_stopword_table
to the name of the table containing a list of stopwords, in the format
.db_name
/table_name
The stopword table must exist before you configure
innodb_ft_user_stopword_table
.innodb_ft_enable_stopword
must be enabled andinnodb_ft_user_stopword_table
must be configured before you create theFULLTEXT
index.The stopword table must be an
InnoDB
table, containing a singleVARCHAR
column namedvalue
.For more information, see Section 12.9.4, “Full-Text Stopwords”.
-
Property Value Command-Line Format --innodb-io-capacity=#
System Variable innodb_io_capacity
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Integer Default Value 200
Minimum Value 100
Maximum Value (64-bit platforms) 2**64-1
Maximum Value (32-bit platforms) 2**32-1
The
innodb_io_capacity
parameter sets an upper limit on the number of I/O operations performed per second byInnoDB
background tasks, such as flushing pages from the buffer pool and merging data from the change buffer.The
innodb_io_capacity
limit is a total limit for all buffer pool instances. When dirty pages are flushed, the limit is divided equally among buffer pool instances.innodb_io_capacity
should be set to approximately the number of I/O operations that the system can perform per second. Ideally, keep the setting as low as practical, but not so low that background activities fall behind. If the value is too high, data is removed from the buffer pool and insert buffer too quickly for caching to provide a significant benefit.The default value is 200. For busy systems capable of higher I/O rates, you can set a higher value to help the server handle the background maintenance work associated with a high rate of row changes.
In general, you can increase the value as a function of the number of drives used for
InnoDB
I/O. For example, you can increase the value on systems that use multiple disks or solid-state disks (SSD).The default setting of 200 is generally sufficient for a lower-end SSD. For a higher-end, bus-attached SSD, consider a higher setting such as 1000, for example. For systems with individual 5400 RPM or 7200 RPM drives, you might lower the value to
100
, which represents an estimated proportion of the I/O operations per second (IOPS) available to older-generation disk drives that can perform about 100 IOPS.Although you can specify a very high value such as one million, in practice such large values have little if any benefit. Generally, a value of 20000 or higher is not recommended unless you have proven that lower values are insufficient for your workload.
Consider write workload when tuning
innodb_io_capacity
. Systems with large write workloads are likely to benefit from a higher setting. A lower setting may be sufficient for systems with a small write workload.You can set
innodb_io_capacity
to any number 100 or greater to a maximum defined byinnodb_io_capacity_max
.innodb_io_capacity
can be set in the MySQL option file (my.cnf
ormy.ini
) or changed dynamically using aSET GLOBAL
statement, which requires privileges sufficient to set global system variables. See Section 5.1.9.1, “System Variable Privileges”.The
innodb_flush_sync
variable causes theinnodb_io_capacity
setting to be ignored during bursts of I/O activity that occur at checkpoints.innodb_flush_sync
is enabled by default.See Section 15.8.7, “Configuring the InnoDB Master Thread I/O Rate” for more information. For general information about
InnoDB
I/O performance, see Section 8.5.8, “Optimizing InnoDB Disk I/O”. -
Property Value Command-Line Format --innodb-io-capacity-max=#
System Variable innodb_io_capacity_max
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Integer Default Value see description
Minimum Value 100
Maximum Value (Windows, 64-bit platforms) 2**32-1
Maximum Value (Unix, 64-bit platforms) 2**64-1
Maximum Value (32-bit platforms) 2**32-1
If flushing activity falls behind,
InnoDB
can flush more aggressively than the limit imposed byinnodb_io_capacity
.innodb_io_capacity_max
defines an upper limit the number of I/O operations performed per second byInnoDB
background tasks in such situations.The
innodb_io_capacity_max
setting is a total limit for all buffer pool instances.If you specify an
innodb_io_capacity
setting at startup but do not specify a value forinnodb_io_capacity_max
,innodb_io_capacity_max
defaults to twice the value ofinnodb_io_capacity
, with a minimum value of 2000.When configuring
innodb_io_capacity_max
, twice theinnodb_io_capacity
is often a good starting point. The default value of 2000 is intended for workloads that use a solid-state disk (SSD) or more than one regular disk drive. A setting of 2000 is likely too high for workloads that do not use SSD or multiple disk drives, and could allow too much flushing. For a single regular disk drive, a setting between 200 and 400 is recommended. For a high-end, bus-attached SSD, consider a higher setting such as 2500. As with theinnodb_io_capacity
setting, keep the setting as low as practical, but not so low thatInnoDB
cannot sufficiently extend beyond theinnodb_io_capacity
limit, if necessary.Consider write workload when tuning
innodb_io_capacity_max
. Systems with large write workloads may benefit from a higher setting. A lower setting may be sufficient for systems with a small write workload.innodb_io_capacity_max
cannot be set to a value lower than theinnodb_io_capacity
value.Setting
innodb_io_capacity_max
toDEFAULT
using aSET
statement (SET GLOBAL innodb_io_capacity_max=DEFAULT
) setsinnodb_io_capacity_max
to the maximum value.For related information, see Section 15.8.3.6, “Fine-tuning InnoDB Buffer Pool Flushing”.
innodb_limit_optimistic_insert_debug
Property Value Command-Line Format --innodb-limit-optimistic-insert-debug=#
System Variable innodb_limit_optimistic_insert_debug
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Integer Default Value 0
Minimum Value 0
Maximum Value 2**32-1
Limits the number of records per B-tree page. A default value of 0 means that no limit is imposed. This option is only available if debugging support is compiled in using the
WITH_DEBUG
CMake option.-
Property Value Command-Line Format --innodb-lock-wait-timeout=#
System Variable innodb_lock_wait_timeout
Scope Global, Session Dynamic Yes SET_VAR
Hint AppliesNo Type Integer Default Value 50
Minimum Value 1
Maximum Value 1073741824
The length of time in seconds an
InnoDB
transaction waits for a row lock before giving up. The default value is 50 seconds. A transaction that tries to access a row that is locked by anotherInnoDB
transaction waits at most this many seconds for write access to the row before issuing the following error:ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
When a lock wait timeout occurs, the current statement is rolled back (not the entire transaction). To have the entire transaction roll back, start the server with the
--innodb-rollback-on-timeout
option. See also Section 15.20.4, “InnoDB Error Handling”.You might decrease this value for highly interactive applications or OLTP systems, to display user feedback quickly or put the update into a queue for processing later. You might increase this value for long-running back-end operations, such as a transform step in a data warehouse that waits for other large insert or update operations to finish.
innodb_lock_wait_timeout
applies toInnoDB
row locks. A MySQL table lock does not happen insideInnoDB
and this timeout does not apply to waits for table locks.The lock wait timeout value does not apply to deadlocks when
innodb_deadlock_detect
is enabled (the default) becauseInnoDB
detects deadlocks immediately and rolls back one of the deadlocked transactions. Wheninnodb_deadlock_detect
is disabled,InnoDB
relies oninnodb_lock_wait_timeout
for transaction rollback when a deadlock occurs. See Section 15.7.5.2, “Deadlock Detection and Rollback”.innodb_lock_wait_timeout
can be set at runtime with theSET GLOBAL
orSET SESSION
statement. Changing theGLOBAL
setting requires privileges sufficient to set global system variables (see Section 5.1.9.1, “System Variable Privileges”) and affects the operation of all clients that subsequently connect. Any client can change theSESSION
setting forinnodb_lock_wait_timeout
, which affects only that client. -
Property Value Command-Line Format --innodb-log-buffer-size=#
System Variable (>= 8.0.11) innodb_log_buffer_size
System Variable (<= 8.0.4) innodb_log_buffer_size
Scope (>= 8.0.11) Global Scope (<= 8.0.4) Global Dynamic (>= 8.0.11) Yes Dynamic (<= 8.0.4) No SET_VAR
Hint Applies (>= 8.0.11)No SET_VAR
Hint Applies (<= 8.0.4)No Type Integer Default Value 16777216
Minimum Value 1048576
Maximum Value 4294967295
The size in bytes of the buffer that
InnoDB
uses to write to the log files on disk. The default is 16MB. A large log buffer enables large transactions to run without the need to write the log to disk before the transactions commit. Thus, if you have transactions that update, insert, or delete many rows, making the log buffer larger saves disk I/O. For related information, see Memory Configuration, and Section 8.5.4, “Optimizing InnoDB Redo Logging”. For general I/O tuning advice, see Section 8.5.8, “Optimizing InnoDB Disk I/O”. innodb_log_checkpoint_fuzzy_now
Property Value Command-Line Format --innodb-log-checkpoint-fuzzy-now[={OFF|ON}]
Introduced 8.0.13 System Variable innodb_log_checkpoint_fuzzy_now
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Boolean Default Value OFF
Enable this debug option to force
InnoDB
to write a fuzzy checkpoint. This option is only available if debugging support is compiled in using theWITH_DEBUG
CMake option.-
Property Value Command-Line Format --innodb-log-checkpoint-now[={OFF|ON}]
System Variable innodb_log_checkpoint_now
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Boolean Default Value OFF
Enable this debug option to force
InnoDB
to write a checkpoint. This option is only available if debugging support is compiled in using theWITH_DEBUG
CMake option. -
Property Value Command-Line Format --innodb-log-checksums[={OFF|ON}]
System Variable innodb_log_checksums
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Boolean Default Value ON
Enables or disables checksums for redo log pages.
innodb_log_checksums=ON
enables theCRC-32C
checksum algorithm for redo log pages. Wheninnodb_log_checksums
is disabled, the contents of the redo log page checksum field are ignored.Checksums on the redo log header page and redo log checkpoint pages are never disabled.
-
Property Value Command-Line Format --innodb-log-compressed-pages[={OFF|ON}]
System Variable innodb_log_compressed_pages
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Boolean Default Value ON
Specifies whether images of re-compressed pages are written to the redo log. Re-compression may occur when changes are made to compressed data.
innodb_log_compressed_pages
is enabled by default to prevent corruption that could occur if a different version of thezlib
compression algorithm is used during recovery. If you are certain that thezlib
version will not change, you can disableinnodb_log_compressed_pages
to reduce redo log generation for workloads that modify compressed data.To measure the effect of enabling or disabling
innodb_log_compressed_pages
, compare redo log generation for both settings under the same workload. Options for measuring redo log generation include observing theLog sequence number
(LSN) in theLOG
section ofSHOW ENGINE INNODB STATUS
output, or monitoringInnodb_os_log_written
status for the number of bytes written to the redo log files.For related information, see Section 15.9.1.6, “Compression for OLTP Workloads”.
-
Property Value Command-Line Format --innodb-log-file-size=#
System Variable innodb_log_file_size
Scope Global Dynamic No SET_VAR
Hint AppliesNo Type Integer Default Value 50331648
Minimum Value 4194304
Maximum Value 512GB / innodb_log_files_in_group
The size in bytes of each log file in a log group. The combined size of log files (
innodb_log_file_size
*innodb_log_files_in_group
) cannot exceed a maximum value that is slightly less than 512GB. A pair of 255 GB log files, for example, approaches the limit but does not exceed it. The default value is 48MB.Generally, the combined size of the log files should be large enough that the server can smooth out peaks and troughs in workload activity, which often means that there is enough redo log space to handle more than an hour of write activity. The larger the value, the less checkpoint flush activity is required in the buffer pool, saving disk I/O. Larger log files also make crash recovery slower, although improvements to recovery performance make log file size less of a consideration than it was in earlier versions of MySQL.
The minimum
innodb_log_file_size
is 4MB.For related information, see Redo Log File Configuration. For general I/O tuning advice, see Section 8.5.8, “Optimizing InnoDB Disk I/O”.
If
innodb_dedicated_server
is enabled, theinnodb_log_file_size
value is automatically configured if it is not explicitly defined. For more information, see Section 15.8.12, “Enabling Automatic Configuration for a Dedicated MySQL Server”. -
Property Value Command-Line Format --innodb-log-files-in-group=#
System Variable innodb_log_files_in_group
Scope Global Dynamic No SET_VAR
Hint AppliesNo Type Integer Default Value 2
Minimum Value 2
Maximum Value 100
The number of log files in the log group.
InnoDB
writes to the files in a circular fashion. The default (and recommended) value is 2. The location of the files is specified byinnodb_log_group_home_dir
. The combined size of log files (innodb_log_file_size
*innodb_log_files_in_group
) can be up to 512GB.For related information, see Redo Log File Configuration.
-
Property Value Command-Line Format --innodb-log-group-home-dir=dir_name
System Variable innodb_log_group_home_dir
Scope Global Dynamic No SET_VAR
Hint AppliesNo Type Directory name The directory path to the
InnoDB
redo log files, whose number is specified byinnodb_log_files_in_group
. If you do not specify anyInnoDB
log variables, the default is to create two files namedib_logfile0
andib_logfile1
in the MySQL data directory. Log file size is given by theinnodb_log_file_size
system variable.For related information, see Redo Log File Configuration.
-
Property Value Command-Line Format --innodb-log-spin-cpu-abs-lwm=#
Introduced 8.0.11 System Variable innodb_log_spin_cpu_abs_lwm
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Integer Default Value 80
Minimum Value 0
Maximum Value 4294967295
Defines the minimum amount of CPU usage below which user threads no longer spin while waiting for flushed redo. The value is expressed as a sum of CPU core usage. For example, The default value of 80 is 80% of a single CPU core. On a system with a multi-core processor, a value of 150 represents 100% usage of one CPU core plus 50% usage of a second CPU core.
For related information, see Section 8.5.4, “Optimizing InnoDB Redo Logging”.
-
Property Value Command-Line Format --innodb-log-spin-cpu-pct-hwm=#
Introduced 8.0.11 System Variable innodb_log_spin_cpu_pct_hwm
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Integer Default Value 50
Minimum Value 0
Maximum Value 100
Defines the maximum amount of CPU usage above which user threads no longer spin while waiting for flushed redo. The value is expressed as a percentage of the combined total processing power of all CPU cores. The default value is 50%. For example, 100% usage of two CPU cores is 50% of the combined CPU processing power on a server with four CPU cores.
The
innodb_log_spin_cpu_pct_hwm
variable respects processor affinity. For example, if a server has 48 cores but the mysqld process is pinned to only four CPU cores, the other 44 CPU cores are ignored.For related information, see Section 8.5.4, “Optimizing InnoDB Redo Logging”.
innodb_log_wait_for_flush_spin_hwm
Property Value Command-Line Format --innodb-log-wait-for-flush-spin-hwm=#
Introduced 8.0.11 System Variable innodb_log_wait_for_flush_spin_hwm
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Integer Default Value 400
Minimum Value 0
Maximum Value (64-bit platforms) 2**64-1
Maximum Value (32-bit platforms) 2**32-1
Defines the maximum average log flush time beyond which user threads no longer spin while waiting for flushed redo. The default value is 400 microseconds.
For related information, see Section 8.5.4, “Optimizing InnoDB Redo Logging”.
-
Property Value Command-Line Format --innodb-log-write-ahead-size=#
System Variable innodb_log_write_ahead_size
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Integer Default Value 8192
Minimum Value 512 (log file block size)
Maximum Value Equal to innodb_page_size
Defines the write-ahead block size for the redo log, in bytes. To avoid “read-on-write”, set
innodb_log_write_ahead_size
to match the operating system or file system cache block size. The default setting is 8192 bytes. Read-on-write occurs when redo log blocks are not entirely cached to the operating system or file system due to a mismatch between write-ahead block size for the redo log and operating system or file system cache block size.Valid values for
innodb_log_write_ahead_size
are multiples of theInnoDB
log file block size (2n). The minimum value is theInnoDB
log file block size (512). Write-ahead does not occur when the minimum value is specified. The maximum value is equal to theinnodb_page_size
value. If you specify a value forinnodb_log_write_ahead_size
that is larger than theinnodb_page_size
value, theinnodb_log_write_ahead_size
setting is truncated to theinnodb_page_size
value.Setting the
innodb_log_write_ahead_size
value too low in relation to the operating system or file system cache block size results in “read-on-write”. Setting the value too high may have a slight impact onfsync
performance for log file writes due to several blocks being written at once.For related information, see Section 8.5.4, “Optimizing InnoDB Redo Logging”.
-
Property Value Command-Line Format --innodb-lru-scan-depth=#
System Variable innodb_lru_scan_depth
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Integer Default Value 1024
Minimum Value 100
Maximum Value (64-bit platforms) 2**64-1
Maximum Value (32-bit platforms) 2**32-1
A parameter that influences the algorithms and heuristics for the flush operation for the
InnoDB
buffer pool. Primarily of interest to performance experts tuning I/O-intensive workloads. It specifies, per buffer pool instance, how far down the buffer pool LRU page list the page cleaner thread scans looking for dirty pages to flush. This is a background operation performed once per second.A setting smaller than the default is generally suitable for most workloads. A value that is much higher than necessary may impact performance. Only consider increasing the value if you have spare I/O capacity under a typical workload. Conversely, if a write-intensive workload saturates your I/O capacity, decrease the value, especially in the case of a large buffer pool.
When tuning
innodb_lru_scan_depth
, start with a low value and configure the setting upward with the goal of rarely seeing zero free pages. Also, consider adjustinginnodb_lru_scan_depth
when changing the number of buffer pool instances, sinceinnodb_lru_scan_depth
*innodb_buffer_pool_instances
defines the amount of work performed by the page cleaner thread each second.For related information, see Section 15.8.3.6, “Fine-tuning InnoDB Buffer Pool Flushing”. For general I/O tuning advice, see Section 8.5.8, “Optimizing InnoDB Disk I/O”.
-
Property Value Command-Line Format --innodb-max-dirty-pages-pct=#
System Variable innodb_max_dirty_pages_pct
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Numeric Default Value (>= 8.0.3) 90
Default Value (<= 8.0.2) 75
Minimum Value 0
Maximum Value 99.99
InnoDB
tries to flush data from the buffer pool so that the percentage of dirty pages does not exceed this value.The
innodb_max_dirty_pages_pct
setting establishes a target for flushing activity. It does not affect the rate of flushing. For information about managing the rate of flushing, see Section 15.8.3.5, “Configuring InnoDB Buffer Pool Flushing”.For related information, see Section 15.8.3.6, “Fine-tuning InnoDB Buffer Pool Flushing”. For general I/O tuning advice, see Section 8.5.8, “Optimizing InnoDB Disk I/O”.
innodb_max_dirty_pages_pct_lwm
Property Value Command-Line Format --innodb-max-dirty-pages-pct-lwm=#
System Variable innodb_max_dirty_pages_pct_lwm
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Numeric Default Value (>= 8.0.3) 10
Default Value (<= 8.0.2) 0
Minimum Value 0
Maximum Value 99.99
Defines a low water mark representing the percentage of dirty pages at which preflushing is enabled to control the dirty page ratio. A value of 0 disables the pre-flushing behavior entirely. For more information, see Section 15.8.3.6, “Fine-tuning InnoDB Buffer Pool Flushing”.
-
Property Value Command-Line Format --innodb-max-purge-lag=#
System Variable innodb_max_purge_lag
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Integer Default Value 0
Minimum Value 0
Maximum Value 4294967295
Defines the maximum length of the purge queue. The default value of 0 indicates no limit (no delays).
Use this option to impose a delay for
INSERT
,UPDATE
, andDELETE
operations when purge operations are lagging (see Section 15.3, “InnoDB Multi-Versioning”).The
InnoDB
transaction system maintains a list of transactions that have index records delete-marked byUPDATE
orDELETE
operations. The length of the list represents thepurge_lag
value. Whenpurge_lag
exceedsinnodb_max_purge_lag
,INSERT
,UPDATE
, andDELETE
operations are delayed. Prior to MySQL 8.0.14, the delay calculation is(purge_lag/innodb_max_purge_lag - 0.5) * 10000
, which results in a minimum delay of 5000 microseconds. As of MySQL 8.0.14, the delay calculation is(purge_lag/innodb_max_purge_lag - 0.9995) * 10000
, which results in a minimum delay of 5 microseconds.To prevent excessive delays in extreme situations where
purge_lag
becomes huge, you can limit the delay by setting theinnodb_max_purge_lag_delay
variable. The delay is computed at the beginning of a purge batch.A typical setting for a problematic workload might be 1 million, assuming that transactions are small, only 100 bytes in size, and it is permissible to have 100MB of unpurged
InnoDB
table rows.The lag value is displayed as the history list length in the
TRANSACTIONS
section of InnoDB Monitor output. The lag value is 20 in this example output:------------ TRANSACTIONS ------------ Trx id counter 0 290328385 Purge done for trx's n:o < 0 290315608 undo n:o < 0 17 History list length 20
For general I/O tuning advice, see Section 8.5.8, “Optimizing InnoDB Disk I/O”.
-
Property Value Command-Line Format --innodb-max-purge-lag-delay=#
System Variable innodb_max_purge_lag_delay
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Integer Default Value 0
Minimum Value 0
Specifies the maximum delay in microseconds for the delay imposed by the
innodb_max_purge_lag
variable. The specified value is the upper limit on the delay period computed from the formula based on the value ofinnodb_max_purge_lag
.For general I/O tuning advice, see Section 8.5.8, “Optimizing InnoDB Disk I/O”.
-
Property Value Command-Line Format --innodb-max-undo-log-size=#
System Variable innodb_max_undo_log_size
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Integer Default Value 1073741824
Minimum Value 10485760
Maximum Value 2**64-1
Defines a threshold size for undo tablespaces. If an undo tablespace exceeds the threshold, it can be marked for truncation when
innodb_undo_log_truncate
is enabled. The default value is 1073741824 bytes (1024 MiB).For more information, see Truncating Undo Tablespaces.
innodb_merge_threshold_set_all_debug
Property Value Command-Line Format --innodb-merge-threshold-set-all-debug=#
System Variable innodb_merge_threshold_set_all_debug
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Integer Default Value 50
Minimum Value 1
Maximum Value 50
Defines a page-full percentage value for index pages that overrides the current
MERGE_THRESHOLD
setting for all indexes that are currently in the dictionary cache. This option is only available if debugging support is compiled in using theWITH_DEBUG
CMake option. For related information, see Section 15.8.11, “Configuring the Merge Threshold for Index Pages”.-
Property Value Command-Line Format --innodb-monitor-disable={counter|module|pattern|all}
System Variable innodb_monitor_disable
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type String Disables
InnoDB
metrics counters. Counter data may be queried using theINFORMATION_SCHEMA.INNODB_METRICS
table. For usage information, see Section 15.14.6, “InnoDB INFORMATION_SCHEMA Metrics Table”.innodb_monitor_disable='latch'
disables statistics collection forSHOW ENGINE INNODB MUTEX
. For more information, see Section 13.7.6.15, “SHOW ENGINE Syntax”. -
Property Value Command-Line Format --innodb-monitor-enable={counter|module|pattern|all}
System Variable innodb_monitor_enable
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type String Enables
InnoDB
metrics counters. Counter data may be queried using theINFORMATION_SCHEMA.INNODB_METRICS
table. For usage information, see Section 15.14.6, “InnoDB INFORMATION_SCHEMA Metrics Table”.innodb_monitor_enable='latch'
enables statistics collection forSHOW ENGINE INNODB MUTEX
. For more information, see Section 13.7.6.15, “SHOW ENGINE Syntax”. -
Property Value Command-Line Format --innodb-monitor-reset={counter|module|pattern|all}
System Variable innodb_monitor_reset
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Enumeration Default Value empty string
Valid Values counter
module
pattern
all
Resets the count value for
InnoDB
metrics counters to zero. Counter data may be queried using theINFORMATION_SCHEMA.INNODB_METRICS
table. For usage information, see Section 15.14.6, “InnoDB INFORMATION_SCHEMA Metrics Table”.innodb_monitor_reset='latch'
resets statistics reported bySHOW ENGINE INNODB MUTEX
. For more information, see Section 13.7.6.15, “SHOW ENGINE Syntax”. -
Property Value Command-Line Format --innodb-monitor-reset-all={counter|module|pattern|all}
System Variable innodb_monitor_reset_all
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Enumeration Default Value empty string
Valid Values counter
module
pattern
all
Resets all values (minimum, maximum, and so on) for
InnoDB
metrics counters. Counter data may be queried using theINFORMATION_SCHEMA.INNODB_METRICS
table. For usage information, see Section 15.14.6, “InnoDB INFORMATION_SCHEMA Metrics Table”. -
Property Value Command-Line Format --innodb-numa-interleave[={OFF|ON}]
System Variable innodb_numa_interleave
Scope Global Dynamic No SET_VAR
Hint AppliesNo Type Boolean Default Value OFF
Enables the NUMA interleave memory policy for allocation of the
InnoDB
buffer pool. Wheninnodb_numa_interleave
is enabled, the NUMA memory policy is set toMPOL_INTERLEAVE
for the mysqld process. After theInnoDB
buffer pool is allocated, the NUMA memory policy is set back toMPOL_DEFAULT
. For theinnodb_numa_interleave
option to be available, MySQL must be compiled on a NUMA-enabled Linux system.CMake sets the default
WITH_NUMA
value based on whether the current platform hasNUMA
support. For more information, see Section 2.9.7, “MySQL Source-Configuration Options”. -
Property Value Command-Line Format --innodb-old-blocks-pct=#
System Variable innodb_old_blocks_pct
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Integer Default Value 37
Minimum Value 5
Maximum Value 95
Specifies the approximate percentage of the
InnoDB
buffer pool used for the old block sublist. The range of values is 5 to 95. The default value is 37 (that is, 3/8 of the pool). Often used in combination withinnodb_old_blocks_time
.For more information, see Section 15.8.3.3, “Making the Buffer Pool Scan Resistant”. For information about buffer pool management, the LRU algorithm, and eviction policies, see Section 15.5.1, “Buffer Pool”.
-
Property Value Command-Line Format --innodb-old-blocks-time=#
System Variable innodb_old_blocks_time
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Integer Default Value 1000
Minimum Value 0
Maximum Value 2**32-1
Non-zero values protect against the buffer pool being filled by data that is referenced only for a brief period, such as during a full table scan. Increasing this value offers more protection against full table scans interfering with data cached in the buffer pool.
Specifies how long in milliseconds a block inserted into the old sublist must stay there after its first access before it can be moved to the new sublist. If the value is 0, a block inserted into the old sublist moves immediately to the new sublist the first time it is accessed, no matter how soon after insertion the access occurs. If the value is greater than 0, blocks remain in the old sublist until an access occurs at least that many milliseconds after the first access. For example, a value of 1000 causes blocks to stay in the old sublist for 1 second after the first access before they become eligible to move to the new sublist.
The default value is 1000.
This variable is often used in combination with
innodb_old_blocks_pct
. For more information, see Section 15.8.3.3, “Making the Buffer Pool Scan Resistant”. For information about buffer pool management, the LRU algorithm, and eviction policies, see Section 15.5.1, “Buffer Pool”. innodb_online_alter_log_max_size
Property Value Command-Line Format --innodb-online-alter-log-max-size=#
System Variable innodb_online_alter_log_max_size
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Integer Default Value 134217728
Minimum Value 65536
Maximum Value 2**64-1
Specifies an upper limit in bytes on the size of the temporary log files used during online DDL operations for
InnoDB
tables. There is one such log file for each index being created or table being altered. This log file stores data inserted, updated, or deleted in the table during the DDL operation. The temporary log file is extended when needed by the value ofinnodb_sort_buffer_size
, up to the maximum specified byinnodb_online_alter_log_max_size
. If a temporary log file exceeds the upper size limit, theALTER TABLE
operation fails and all uncommitted concurrent DML operations are rolled back. Thus, a large value for this option allows more DML to happen during an online DDL operation, but also extends the period of time at the end of the DDL operation when the table is locked to apply the data from the log.-
Property Value Command-Line Format --innodb-open-files=#
System Variable innodb_open_files
Scope Global Dynamic No SET_VAR
Hint AppliesNo Type Integer Default Value -1
(signifies autosizing; do not assign this literal value)Minimum Value 10
Maximum Value 4294967295
This variable is only relevant if you use multiple
InnoDB
tablespaces. It specifies the maximum number of.ibd
files that MySQL can keep open at one time. The minimum value is 10. The default value is 300 ifinnodb_file_per_table
is not enabled, and the higher of 300 andtable_open_cache
otherwise.The file descriptors used for
.ibd
files are forInnoDB
tables only. They are independent of those specified by theopen_files_limit
system variable, and do not affect the operation of the table cache. For general I/O tuning advice, see Section 8.5.8, “Optimizing InnoDB Disk I/O”. -
Property Value Command-Line Format --innodb-optimize-fulltext-only[={OFF|ON}]
System Variable innodb_optimize_fulltext_only
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Boolean Default Value OFF
Changes the way
OPTIMIZE TABLE
operates onInnoDB
tables. Intended to be enabled temporarily, during maintenance operations forInnoDB
tables withFULLTEXT
indexes.By default,
OPTIMIZE TABLE
reorganizes data in the clustered index of the table. When this option is enabled,OPTIMIZE TABLE
skips the reorganization of table data, and instead processes newly added, deleted, and updated token data forInnoDB
FULLTEXT
indexes. For more information, see Optimizing InnoDB Full-Text Indexes. -
Property Value Command-Line Format --innodb-page-cleaners=#
System Variable innodb_page_cleaners
Scope Global Dynamic No SET_VAR
Hint AppliesNo Type Integer Default Value 4
Minimum Value 1
Maximum Value 64
The number of page cleaner threads that flush dirty pages from buffer pool instances. Page cleaner threads perform flush list and LRU flushing. When there are multiple page cleaner threads, buffer pool flushing tasks for each buffer pool instance are dispatched to idle page cleaner threads. The
innodb_page_cleaners
default value is 4. If the number of page cleaner threads exceeds the number of buffer pool instances,innodb_page_cleaners
is automatically set to the same value asinnodb_buffer_pool_instances
.If your workload is write-IO bound when flushing dirty pages from buffer pool instances to data files, and if your system hardware has available capacity, increasing the number of page cleaner threads may help improve write-IO throughput.
Multithreaded page cleaner support extends to shutdown and recovery phases.
The
setpriority()
system call is used on Linux platforms where it is supported, and where the mysqld execution user is authorized to givepage_cleaner
threads priority over other MySQL andInnoDB
threads to help page flushing keep pace with the current workload.setpriority()
support is indicated by thisInnoDB
startup message:[Note] InnoDB: If the mysqld execution user is authorized, page cleaner thread priority can be changed. See the man page of setpriority().
For systems where server startup and shutdown is not managed by systemd, mysqld execution user authorization can be configured in
/etc/security/limits.conf
. For example, if mysqld is run under themysql
user, you can authorize themysql
user by adding these lines to/etc/security/limits.conf
:mysql hard nice -20 mysql soft nice -20
For systemd managed systems, the same can be achieved by specifying
LimitNICE=-20
in a localized systemd configuration file. For example, create a file namedoverride.conf
in/etc/systemd/system/mysqld.service.d/override.conf
and add this entry:[Service] LimitNICE=-20
After creating or changing
override.conf
, reload the systemd configuration, then tell systemd to restart the MySQL service:systemctl daemon-reload systemctl restart mysqld # RPM platforms systemctl restart mysql # Debian platforms
For more information about using a localized systemd configuration file, see Configuring systemd for MySQL.
After authorizing the mysqld execution user, use the cat command to verify the configured
Nice
limits for the mysqld process:shell> cat /proc/mysqld_pid/limits | grep nice Max nice priority 18446744073709551596 18446744073709551596
-
Property Value Command-Line Format --innodb-page-size=#
System Variable innodb_page_size
Scope Global Dynamic No SET_VAR
Hint AppliesNo Type Enumeration Default Value 16384
Valid Values 4096
8192
16384
32768
65536
Specifies the page size for
InnoDB
tablespaces. Values can be specified in bytes or kilobytes. For example, a 16 kilobyte page size value can be specified as 16384, 16KB, or 16k.innodb_page_size
can only be configured prior to initializing the MySQL instance and cannot be changed afterward. If no value is specified, the instance is initialized using the default page size. See Section 15.8.1, “InnoDB Startup Configuration”.For both 32KB and 64KB page sizes, the maximum row length is approximately 16000 bytes.
ROW_FORMAT=COMPRESSED
is not supported wheninnodb_page_size
is set to 32KB or 64KB. Forinnodb_page_size=32KB
, extent size is 2MB. Forinnodb_page_size=64KB
, extent size is 4MB.innodb_log_buffer_size
should be set to at least 16M (the default) when using 32KB or 64KB page sizes.The default 16KB page size or larger is appropriate for a wide range of workloads, particularly for queries involving table scans and DML operations involving bulk updates. Smaller page sizes might be more efficient for OLTP workloads involving many small writes, where contention can be an issue when single pages contain many rows. Smaller pages might also be efficient with SSD storage devices, which typically use small block sizes. Keeping the
InnoDB
page size close to the storage device block size minimizes the amount of unchanged data that is rewritten to disk.The minimum file size for the first system tablespace data file (
ibdata1
) differs depending on theinnodb_page_size
value. See theinnodb_data_file_path
option description for more information.For general I/O tuning advice, see Section 8.5.8, “Optimizing InnoDB Disk I/O”.
-
Property Value Command-Line Format --innodb-parallel-read-threads=#
Introduced 8.0.14 System Variable innodb_parallel_read_threads
Scope Session Dynamic Yes SET_VAR
Hint AppliesNo Type Integer Default Value 4
Minimum Value 1
Maximum Value 256
Defines the number of threads that can be used for parallel clustered index reads. Parallel scanning of partitions is supported as of MySQL 8.0.17. Parallel read threads can improve
CHECK TABLE
performance.InnoDB
reads the clustered index twice during aCHECK TABLE
operation. The second read can be performed in parallel. This feature does not apply to secondary index scans. Theinnodb_parallel_read_threads
session variable must be set to a value greater than 1 for parallel clustered index reads to occur. The actual number of threads used to perform a parallel clustered index read is determined by theinnodb_parallel_read_threads
setting or the number of index subtrees to scan, whichever is smaller. The pages read into the buffer pool during the scan are kept at the tail of the buffer pool LRU list so that they can be discarded quickly when free buffer pool pages are required.As of MySQL 8.0.17, the maximum number of parallel read threads (256) is the total number of threads for all client connections. If the thread limit is reached, connections fall back to using a single thread.
-
Property Value Command-Line Format --innodb-print-all-deadlocks[={OFF|ON}]
System Variable innodb_print_all_deadlocks
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Boolean Default Value OFF
When this option is enabled, information about all deadlocks in
InnoDB
user transactions is recorded in themysqld
error log. Otherwise, you see information about only the last deadlock, using theSHOW ENGINE INNODB STATUS
command. An occasionalInnoDB
deadlock is not necessarily an issue, becauseInnoDB
detects the condition immediately and rolls back one of the transactions automatically. You might use this option to troubleshoot why deadlocks are occurring if an application does not have appropriate error-handling logic to detect the rollback and retry its operation. A large number of deadlocks might indicate the need to restructure transactions that issue DML orSELECT ... FOR UPDATE
statements for multiple tables, so that each transaction accesses the tables in the same order, thus avoiding the deadlock condition.For related information, see Section 15.7.5, “Deadlocks in InnoDB”.
-
Property Value Command-Line Format --innodb-print-ddl-logs[={OFF|ON}]
Introduced 8.0.3 System Variable innodb_print_ddl_logs
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Boolean Default Value OFF
Enabling this option causes MySQL to write DDL logs to
stderr
. For more information, see Viewing DDL Logs. -
Property Value Command-Line Format --innodb-purge-batch-size=#
System Variable innodb_purge_batch_size
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Integer Default Value 300
Minimum Value 1
Maximum Value 5000
Defines the number of undo log pages that purge parses and processes in one batch from the history list. In a multithreaded purge configuration, the coordinator purge thread divides
innodb_purge_batch_size
byinnodb_purge_threads
and assigns that number of pages to each purge thread. Theinnodb_purge_batch_size
option also defines the number of undo log pages that purge frees after every 128 iterations through the undo logs.The
innodb_purge_batch_size
option is intended for advanced performance tuning in combination with theinnodb_purge_threads
setting. Most MySQL users need not changeinnodb_purge_batch_size
from its default value.For related information, see Section 15.8.9, “Configuring InnoDB Purge Scheduling”.
-
Property Value Command-Line Format --innodb-purge-threads=#
System Variable innodb_purge_threads
Scope Global Dynamic No SET_VAR
Hint AppliesNo Type Integer Default Value 4
Minimum Value 1
Maximum Value 32
The number of background threads devoted to the
InnoDB
purge operation. A minimum value of 1 signifies that the purge operation is always performed by a background thread, never as part of the master thread. Running the purge operation in one or more background threads helps reduce internal contention withinInnoDB
, improving scalability. Increasing the value to greater than 1 creates that many separate purge threads, which can improve efficiency on systems where DML operations are performed on multiple tables. The maximum is 32.For related information, see Section 15.8.9, “Configuring InnoDB Purge Scheduling”.
innodb_purge_rseg_truncate_frequency
Property Value Command-Line Format --innodb-purge-rseg-truncate-frequency=#
System Variable innodb_purge_rseg_truncate_frequency
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Integer Default Value 128
Minimum Value 1
Maximum Value 128
Defines the frequency with which the purge system frees rollback segments in terms of the number of times that purge is invoked. An undo tablespace cannot be truncated until its rollback segments are freed. Normally, the purge system frees rollback segments once every 128 times that purge is invoked. The default value is 128. Reducing this value increases the frequency with which the purge thread frees rollback segments.
innodb_purge_rseg_truncate_frequency
is intended for use withinnodb_undo_log_truncate
. For more information, see Truncating Undo Tablespaces.-
Property Value Command-Line Format --innodb-random-read-ahead[={OFF|ON}]
System Variable innodb_random_read_ahead
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Boolean Default Value OFF
Enables the random read-ahead technique for optimizing
InnoDB
I/O.For details about performance considerations for different types of read-ahead requests, see Section 15.8.3.4, “Configuring InnoDB Buffer Pool Prefetching (Read-Ahead)”. For general I/O tuning advice, see Section 8.5.8, “Optimizing InnoDB Disk I/O”.
-
Property Value Command-Line Format --innodb-read-ahead-threshold=#
System Variable innodb_read_ahead_threshold
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Integer Default Value 56
Minimum Value 0
Maximum Value 64
Controls the sensitivity of linear read-ahead that
InnoDB
uses to prefetch pages into the buffer pool. IfInnoDB
reads at leastinnodb_read_ahead_threshold
pages sequentially from an extent (64 pages), it initiates an asynchronous read for the entire following extent. The permissible range of values is 0 to 64. A value of 0 disables read-ahead. For the default of 56,InnoDB
must read at least 56 pages sequentially from an extent to initiate an asynchronous read for the following extent.Knowing how many pages are read through the read-ahead mechanism, and how many of these pages are evicted from the buffer pool without ever being accessed, can be useful when fine-tuning the
innodb_read_ahead_threshold
setting.SHOW ENGINE INNODB STATUS
output displays counter information from theInnodb_buffer_pool_read_ahead
andInnodb_buffer_pool_read_ahead_evicted
global status variables, which report the number of pages brought into the buffer pool by read-ahead requests, and the number of such pages evicted from the buffer pool without ever being accessed, respectively. The status variables report global values since the last server restart.SHOW ENGINE INNODB STATUS
also shows the rate at which the read-ahead pages are read and the rate at which such pages are evicted without being accessed. The per-second averages are based on the statistics collected since the last invocation ofSHOW ENGINE INNODB STATUS
and are displayed in theBUFFER POOL AND MEMORY
section of theSHOW ENGINE INNODB STATUS
output.For more information, see Section 15.8.3.4, “Configuring InnoDB Buffer Pool Prefetching (Read-Ahead)”. For general I/O tuning advice, see Section 8.5.8, “Optimizing InnoDB Disk I/O”.
-
Property Value Command-Line Format --innodb-read-io-threads=#
System Variable innodb_read_io_threads
Scope Global Dynamic No SET_VAR
Hint AppliesNo Type Integer Default Value 4
Minimum Value 1
Maximum Value 64
The number of I/O threads for read operations in
InnoDB
. Its counterpart for write threads isinnodb_write_io_threads
. For more information, see Section 15.8.5, “Configuring the Number of Background InnoDB I/O Threads”. For general I/O tuning advice, see Section 8.5.8, “Optimizing InnoDB Disk I/O”.NoteOn Linux systems, running multiple MySQL servers (typically more than 12) with default settings for
innodb_read_io_threads
,innodb_write_io_threads
, and the Linuxaio-max-nr
setting can exceed system limits. Ideally, increase theaio-max-nr
setting; as a workaround, you might reduce the settings for one or both of the MySQL variables. -
Property Value Command-Line Format --innodb-read-only[={OFF|ON}]
System Variable innodb_read_only
Scope Global Dynamic No SET_VAR
Hint AppliesNo Type Boolean Default Value OFF
Starts
InnoDB
in read-only mode. For distributing database applications or data sets on read-only media. Can also be used in data warehouses to share the same data directory between multiple instances. For more information, see Section 15.8.2, “Configuring InnoDB for Read-Only Operation”.Previously, enabling the
innodb_read_only
system variable prevented creating and dropping tables only for theInnoDB
storage engine. As of MySQL 8.0, enablinginnodb_read_only
prevents these operations for all storage engines. Table creation and drop operations for any storage engine modify data dictionary tables in themysql
system database, but those tables use theInnoDB
storage engine and cannot be modified wheninnodb_read_only
is enabled. The same principle applies to other table operations that require modifying data dictionary tables. Examples:If the
innodb_read_only
system variable is enabled,ANALYZE TABLE
may fail because it cannot update statistics tables in the data dictionary, which useInnoDB
. ForANALYZE TABLE
operations that update the key distribution, failure may occur even if the operation updates the table itself (for example, if it is aMyISAM
table). To obtain the updated distribution statistics, setinformation_schema_stats_expiry=0
.ALTER TABLE
fails because it updates the storage engine designation, which is stored in the data dictionary.tbl_name
ENGINE=engine_name
In addition, other tables in the
mysql
system database use theInnoDB
storage engine in MySQL 8.0. Making those tables read only results in restrictions on operations that modify them. Examples:Account-management statements such as
CREATE USER
andGRANT
fail because the grant tables useInnoDB
.The
INSTALL PLUGIN
andUNINSTALL PLUGIN
plugin-management statements fail because theplugin
table usesInnoDB
.The
CREATE FUNCTION
andDROP FUNCTION
UDF-management statements fail because thefunc
table usesInnoDB
.
-
Property Value Command-Line Format --innodb-redo-log-archive-dirs
Introduced 8.0.17 System Variable innodb_redo_log_archive_dirs
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type String Default Value NULL
Defines labeled directories where redo log archive files can be created. You can define multiple labeled directories in a semicolon-separated list. For example:
innodb_redo_log_archive_dirs='label1:/backups1;label2:/backups2'
A label can be any string of characters, with the exception of colons (:), which are not permitted. An empty label is also permitted, but the colon (:) is still required in this case.
A path must be specified, and the directory must exist. The path can contain colons (':'), but semicolons (;) are not permitted.
-
Property Value Command-Line Format --innodb-redo-log-encrypt[={OFF|ON}]
Introduced 8.0.1 System Variable innodb_redo_log_encrypt
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Boolean Default Value OFF
Controls encryption of redo log data for tables encrypted using the
InnoDB
data-at-rest encryption feature. Encryption of redo log data is disabled by default. For more information, see Redo Log Encryption. -
Property Value Command-Line Format --innodb-replication-delay=#
System Variable innodb_replication_delay
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Integer Default Value 0
Minimum Value 0
Maximum Value 4294967295
The replication thread delay in milliseconds on a slave server if
innodb_thread_concurrency
is reached. -
Property Value Command-Line Format --innodb-rollback-on-timeout[={OFF|ON}]
System Variable innodb_rollback_on_timeout
Scope Global Dynamic No SET_VAR
Hint AppliesNo Type Boolean Default Value OFF
InnoDB
rolls back only the last statement on a transaction timeout by default. If--innodb-rollback-on-timeout
is specified, a transaction timeout causesInnoDB
to abort and roll back the entire transaction.NoteIf the start-transaction statement was
START TRANSACTION
orBEGIN
statement, rollback does not cancel that statement. Further SQL statements become part of the transaction until the occurrence ofCOMMIT
,ROLLBACK
, or some SQL statement that causes an implicit commit.For more information, see Section 15.20.4, “InnoDB Error Handling”.
-
Property Value Command-Line Format --innodb-rollback-segments=#
System Variable innodb_rollback_segments
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Integer Default Value 128
Minimum Value 1
Maximum Value 128
innodb_rollback_segments
defines the number of rollback segments allocated to each undo tablespace and the global temporary tablespace for transactions that generate undo records. The number of transactions that each rollback segment supports depends on theInnoDB
page size and the number of undo logs assigned to each transaction. For more information, see Section 15.6.6, “Undo Logs”.For related information, see Section 15.3, “InnoDB Multi-Versioning”. For information about undo tablespaces, see Section 15.6.3.4, “Undo Tablespaces”.
-
Property Value Command-Line Format --innodb-scan-directories=dir_name
Introduced 8.0.2 Removed 8.0.4 System Variable innodb_scan_directories
Scope Global Dynamic No SET_VAR
Hint AppliesNo Type Directory name Default Value NULL
This variable was replaced by
innodb_directories
in MySQL 8.0.4. innodb_saved_page_number_debug
Property Value Command-Line Format --innodb-saved-page-number-debug=#
System Variable innodb_saved_page_number_debug
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Integer Default Value 0
Maximum Value 2**23-1
Saves a page number. Setting the
innodb_fil_make_page_dirty_debug
option dirties the page defined byinnodb_saved_page_number_debug
. Theinnodb_saved_page_number_debug
option is only available if debugging support is compiled in using theWITH_DEBUG
CMake option.-
Property Value Command-Line Format --innodb-sort-buffer-size=#
System Variable innodb_sort_buffer_size
Scope Global Dynamic No SET_VAR
Hint AppliesNo Type Integer Default Value 1048576
Minimum Value 65536
Maximum Value 67108864
Specifies the size of sort buffers used to sort data during creation of an
InnoDB
index. The specified size defines the amount of data that is read into memory for internal sorting and then written out to disk. This process is referred to as a “run”. During the merge phase, pairs of buffers of the specified size are read and merged. The larger the setting, the fewer runs and merges there are.This sort area is only used for merge sorts during index creation, not during later index maintenance operations. Buffers are deallocated when index creation completes.
The value of this option also controls the amount by which the temporary log file is extended to record concurrent DML during online DDL operations.
Before this setting was made configurable, the size was hardcoded to 1048576 bytes (1MB), which remains the default.
During an
ALTER TABLE
orCREATE TABLE
statement that creates an index, 3 buffers are allocated, each with a size defined by this option. Additionally, auxiliary pointers are allocated to rows in the sort buffer so that the sort can run on pointers (as opposed to moving rows during the sort operation).For a typical sort operation, a formula such as this one can be used to estimate memory consumption:
(6 /*FTS_NUM_AUX_INDEX*/ * (3*@@GLOBAL.innodb_sort_buffer_size) + 2 * number_of_partitions * number_of_secondary_indexes_created * (@@GLOBAL.innodb_sort_buffer_size/dict_index_get_min_size(index)*/) * 8 /*64-bit sizeof *buf->tuples*/")
@@GLOBAL.innodb_sort_buffer_size/dict_index_get_min_size(index)
indicates the maximum tuples held.2 * (@@GLOBAL.innodb_sort_buffer_size/*dict_index_get_min_size(index)*/) * 8 /*64-bit size of *buf->tuples*/
indicates auxiliary pointers allocated.NoteFor 32-bit, multiply by 4 instead of 8.
For parallel sorts on a full-text index, multiply by the
innodb_ft_sort_pll_degree
setting:(6 /*FTS_NUM_AUX_INDEX*/ * @@GLOBAL.innodb_ft_sort_pll_degree)
-
Property Value Command-Line Format --innodb-spin-wait-delay=#
System Variable innodb_spin_wait_delay
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Integer Default Value 6
Minimum Value 0
Maximum Value (64-bit platforms, <= 8.0.13) 2**64-1
Maximum Value (32-bit platforms, <= 8.0.13) 2**32-1
Maximum Value (>= 8.0.14) 1000
The maximum delay between polls for a spin lock. The low-level implementation of this mechanism varies depending on the combination of hardware and operating system, so the delay does not correspond to a fixed time interval.
Can be used in combination with the
innodb_spin_wait_pause_multiplier
variable for greater control over the duration of spin-lock polling delays.For more information, see Section 15.8.8, “Configuring Spin Lock Polling”.
innodb_spin_wait_pause_multiplier
Property Value Command-Line Format --innodb-spin-wait-pause-multiplier=#
Introduced 8.0.16 System Variable innodb_spin_wait_pause_multiplier
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Integer Default Value 50
Minimum Value 1
Maximum Value 100
Defines a multiplier value used to determine the number of PAUSE instructions in spin-wait loops that occur when a thread waits to acquire a mutex or rw-lock.
For more information, see Section 15.8.8, “Configuring Spin Lock Polling”.
-
Property Value Command-Line Format --innodb-stats-auto-recalc[={OFF|ON}]
System Variable innodb_stats_auto_recalc
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Boolean Default Value ON
Causes
InnoDB
to automatically recalculate persistent statistics after the data in a table is changed substantially. The threshold value is 10% of the rows in the table. This setting applies to tables created when theinnodb_stats_persistent
option is enabled. Automatic statistics recalculation may also be configured by specifyingSTATS_PERSISTENT=1
in aCREATE TABLE
orALTER TABLE
statement. The amount of data sampled to produce the statistics is controlled by theinnodb_stats_persistent_sample_pages
variable.For more information, see Section 15.8.10.1, “Configuring Persistent Optimizer Statistics Parameters”.
innodb_stats_include_delete_marked
Property Value Command-Line Format --innodb-stats-include-delete-marked[={OFF|ON}]
Introduced 8.0.1 System Variable innodb_stats_include_delete_marked
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Boolean Default Value OFF
By default,
InnoDB
reads uncommitted data when calculating statistics. In the case of an uncommitted transaction that deletes rows from a table,InnoDB
excludes records that are delete-marked when calculating row estimates and index statistics, which can lead to non-optimal execution plans for other transactions that are operating on the table concurrently using a transaction isolation level other thanREAD UNCOMMITTED
. To avoid this scenario,innodb_stats_include_delete_marked
can be enabled to ensure thatInnoDB
includes delete-marked records when calculating persistent optimizer statistics.When
innodb_stats_include_delete_marked
is enabled,ANALYZE TABLE
considers delete-marked records when recalculating statistics.innodb_stats_include_delete_marked
is a global setting that affects allInnoDB
tables. It is only applicable to persistent optimizer statistics.For related information, see Section 15.8.10.1, “Configuring Persistent Optimizer Statistics Parameters”.
-
Property Value Command-Line Format --innodb-stats-method=value
System Variable innodb_stats_method
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Enumeration Default Value nulls_equal
Valid Values nulls_equal
nulls_unequal
nulls_ignored
How the server treats
NULL
values when collecting statistics about the distribution of index values forInnoDB
tables. Permitted values arenulls_equal
,nulls_unequal
, andnulls_ignored
. Fornulls_equal
, allNULL
index values are considered equal and form a single value group with a size equal to the number ofNULL
values. Fornulls_unequal
,NULL
values are considered unequal, and eachNULL
forms a distinct value group of size 1. Fornulls_ignored
,NULL
values are ignored.The method used to generate table statistics influences how the optimizer chooses indexes for query execution, as described in Section 8.3.8, “InnoDB and MyISAM Index Statistics Collection”.
-
Property Value Command-Line Format --innodb-stats-on-metadata[={OFF|ON}]
System Variable innodb_stats_on_metadata
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Boolean Default Value OFF
This option only applies when optimizer statistics are configured to be non-persistent. Optimizer statistics are not persisted to disk when
innodb_stats_persistent
is disabled or when individual tables are created or altered withSTATS_PERSISTENT=0
. For more information, see Section 15.8.10.2, “Configuring Non-Persistent Optimizer Statistics Parameters”.When
innodb_stats_on_metadata
is enabled,InnoDB
updates non-persistent statistics when metadata statements such asSHOW TABLE STATUS
or when accessing theINFORMATION_SCHEMA.TABLES
orINFORMATION_SCHEMA.STATISTICS
tables. (These updates are similar to what happens forANALYZE TABLE
.) When disabled,InnoDB
does not update statistics during these operations. Leaving the setting disabled can improve access speed for schemas that have a large number of tables or indexes. It can also improve the stability of execution plans for queries that involveInnoDB
tables.To change the setting, issue the statement
SET GLOBAL innodb_stats_on_metadata=
, wheremode
is eithermode
ON
orOFF
(or1
or0
). Changing the setting requires privileges sufficient to set global system variables (see Section 5.1.9.1, “System Variable Privileges”) and immediately affects the operation of all connections. -
Property Value Command-Line Format --innodb-stats-persistent[={OFF|ON}]
System Variable innodb_stats_persistent
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Boolean Default Value ON
Specifies whether
InnoDB
index statistics are persisted to disk. Otherwise, statistics may be recalculated frequently which can lead to variations in query execution plans. This setting is stored with each table when the table is created. You can setinnodb_stats_persistent
at the global level before creating a table, or use theSTATS_PERSISTENT
clause of theCREATE TABLE
andALTER TABLE
statements to override the system-wide setting and configure persistent statistics for individual tables.For more information, see Section 15.8.10.1, “Configuring Persistent Optimizer Statistics Parameters”.
innodb_stats_persistent_sample_pages
Property Value Command-Line Format --innodb-stats-persistent-sample-pages=#
System Variable innodb_stats_persistent_sample_pages
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Integer Default Value 20
The number of index pages to sample when estimating cardinality and other statistics for an indexed column, such as those calculated by
ANALYZE TABLE
. Increasing the value improves the accuracy of index statistics, which can improve the query execution plan, at the expense of increased I/O during the execution ofANALYZE TABLE
for anInnoDB
table. For more information, see Section 15.8.10.1, “Configuring Persistent Optimizer Statistics Parameters”.NoteSetting a high value for
innodb_stats_persistent_sample_pages
could result in lengthyANALYZE TABLE
execution time. To estimate the number of database pages accessed byANALYZE TABLE
, see Section 15.8.10.3, “Estimating ANALYZE TABLE Complexity for InnoDB Tables”.innodb_stats_persistent_sample_pages
only applies wheninnodb_stats_persistent
is enabled for a table; wheninnodb_stats_persistent
is disabled,innodb_stats_transient_sample_pages
applies instead.innodb_stats_transient_sample_pages
Property Value Command-Line Format --innodb-stats-transient-sample-pages=#
System Variable innodb_stats_transient_sample_pages
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Integer Default Value 8
The number of index pages to sample when estimating cardinality and other statistics for an indexed column, such as those calculated by
ANALYZE TABLE
. The default value is 8. Increasing the value improves the accuracy of index statistics, which can improve the query execution plan, at the expense of increased I/O when opening anInnoDB
table or recalculating statistics. For more information, see Section 15.8.10.2, “Configuring Non-Persistent Optimizer Statistics Parameters”.NoteSetting a high value for
innodb_stats_transient_sample_pages
could result in lengthyANALYZE TABLE
execution time. To estimate the number of database pages accessed byANALYZE TABLE
, see Section 15.8.10.3, “Estimating ANALYZE TABLE Complexity for InnoDB Tables”.innodb_stats_transient_sample_pages
only applies wheninnodb_stats_persistent
is disabled for a table; wheninnodb_stats_persistent
is enabled,innodb_stats_persistent_sample_pages
applies instead. Takes the place ofinnodb_stats_sample_pages
. For more information, see Section 15.8.10.2, “Configuring Non-Persistent Optimizer Statistics Parameters”.-
Property Value Command-Line Format --innodb-status-output[={OFF|ON}]
System Variable innodb_status_output
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Boolean Default Value OFF
Enables or disables periodic output for the standard
InnoDB
Monitor. Also used in combination withinnodb_status_output_locks
to enable or disable periodic output for theInnoDB
Lock Monitor. For more information, see Section 15.16.2, “Enabling InnoDB Monitors”. -
Property Value Command-Line Format --innodb-status-output-locks[={OFF|ON}]
System Variable innodb_status_output_locks
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Boolean Default Value OFF
Enables or disables the
InnoDB
Lock Monitor. When enabled, theInnoDB
Lock Monitor prints additional information about locks inSHOW ENGINE INNODB STATUS
output and in periodic output printed to the MySQL error log. Periodic output for theInnoDB
Lock Monitor is printed as part of the standardInnoDB
Monitor output. The standardInnoDB
Monitor must therefore be enabled for theInnoDB
Lock Monitor to print data to the MySQL error log periodically. For more information, see Section 15.16.2, “Enabling InnoDB Monitors”. -
Property Value Command-Line Format --innodb-strict-mode[={OFF|ON}]
System Variable innodb_strict_mode
Scope Global, Session Dynamic Yes SET_VAR
Hint AppliesNo Type Boolean Default Value ON
When
innodb_strict_mode
is enabled,InnoDB
returns errors rather than warnings for certain conditions.Strict mode helps guard against ignored typos and syntax errors in SQL, or other unintended consequences of various combinations of operational modes and SQL statements. When
innodb_strict_mode
is enabled,InnoDB
raises error conditions in certain cases, rather than issuing a warning and processing the specified statement (perhaps with unintended behavior). This is analogous tosql_mode
in MySQL, which controls what SQL syntax MySQL accepts, and determines whether it silently ignores errors, or validates input syntax and data values.The
innodb_strict_mode
setting affects the handling of syntax errors forCREATE TABLE
,ALTER TABLE
,CREATE INDEX
, andOPTIMIZE TABLE
statements.innodb_strict_mode
also enables a record size check, so that anINSERT
orUPDATE
never fails due to the record being too large for the selected page size.Oracle recommends enabling
innodb_strict_mode
when usingROW_FORMAT
andKEY_BLOCK_SIZE
clauses inCREATE TABLE
,ALTER TABLE
, andCREATE INDEX
statements. Wheninnodb_strict_mode
is disabled,InnoDB
ignores conflicting clauses and creates the table or index with only a warning in the message log. The resulting table might have different characteristics than intended, such as lack of compression support when attempting to create a compressed table. Wheninnodb_strict_mode
is enabled, such problems generate an immediate error and the table or index is not created.You can enable or disable
innodb_strict_mode
on the command line when startingmysqld
, or in a MySQL configuration file. You can also enable or disableinnodb_strict_mode
at runtime with the statementSET [GLOBAL|SESSION] innodb_strict_mode=
, wheremode
is eithermode
ON
orOFF
. Changing theGLOBAL
setting requires privileges sufficient to set global system variables (see Section 5.1.9.1, “System Variable Privileges”) and affects the operation of all clients that subsequently connect. Any client can change theSESSION
setting forinnodb_strict_mode
, and the setting affects only that client.innodb_strict_mode
is not applicable to general tablespaces. Tablespace management rules for general tablespaces are strictly enforced independently ofinnodb_strict_mode
. For more information, see Section 13.1.21, “CREATE TABLESPACE Syntax”. -
Property Value Command-Line Format --innodb-sync-array-size=#
System Variable innodb_sync_array_size
Scope Global Dynamic No SET_VAR
Hint AppliesNo Type Integer Default Value 1
Minimum Value 1
Maximum Value 1024
Defines the size of the mutex/lock wait array. Increasing the value splits the internal data structure used to coordinate threads, for higher concurrency in workloads with large numbers of waiting threads. This setting must be configured when the MySQL instance is starting up, and cannot be changed afterward. Increasing the value is recommended for workloads that frequently produce a large number of waiting threads, typically greater than 768.
-
Property Value Command-Line Format --innodb-sync-spin-loops=#
System Variable innodb_sync_spin_loops
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Integer Default Value 30
Minimum Value 0
Maximum Value 4294967295
The number of times a thread waits for an
InnoDB
mutex to be freed before the thread is suspended. -
Property Value Command-Line Format --innodb-sync-debug[={OFF|ON}]
System Variable innodb_sync_debug
Scope Global Dynamic No SET_VAR
Hint AppliesNo Type Boolean Default Value OFF
Enables sync debug checking for the
InnoDB
storage engine. This option is only available if debugging support is compiled in using theWITH_DEBUG
CMake option. -
Property Value Command-Line Format --innodb-table-locks[={OFF|ON}]
System Variable innodb_table_locks
Scope Global, Session Dynamic Yes SET_VAR
Hint AppliesNo Type Boolean Default Value ON
If
autocommit = 0
,InnoDB
honorsLOCK TABLES
; MySQL does not return fromLOCK TABLES ... WRITE
until all other threads have released all their locks to the table. The default value ofinnodb_table_locks
is 1, which means thatLOCK TABLES
causes InnoDB to lock a table internally ifautocommit = 0
.In MySQL 8.0,
innodb_table_locks = 0
has no effect for tables locked explicitly withLOCK TABLES ... WRITE
. It does have an effect for tables locked for read or write byLOCK TABLES ... WRITE
implicitly (for example, through triggers) or byLOCK TABLES ... READ
.For related information, see Section 15.7, “InnoDB Locking and Transaction Model”.
-
Property Value Command-Line Format --innodb-temp-data-file-path=file_name
System Variable innodb_temp_data_file_path
Scope Global Dynamic No SET_VAR
Hint AppliesNo Type String Default Value ibtmp1:12M:autoextend
Defines the relative path, name, size, and attributes of global temporary tablespace data files. The global temporary tablespace stores rollback segments for changes made to user-created temporary tables.
If no value is specified for
innodb_temp_data_file_path
, the default behavior is to create a single auto-extending data file namedibtmp1
in theinnodb_data_home_dir
directory. The initial file size is slightly larger than 12MB.The syntax for a global temporary tablespace data file specification includes the file name, file size, and
autoextend
andmax
attributes:file_name:file_size[:autoextend[:max:max_file_size]]
The global temporary tablespace data file cannot have the same name as another
InnoDB
data file. Any inability or error creating the global temporary tablespace data file is treated as fatal and server startup is refused.File sizes are specified in KB, MB, or GB by appending
K
,M
orG
to the size value. The sum of file sizes must be slightly larger than 12MB.The size limit of individual files is determined by the operating system. File size can be more than 4GB on operating systems that support large files. Use of raw disk partitions for global temporary tablespace data files is not supported.
The
autoextend
andmax
attributes can be used only for the data file specified last in theinnodb_temp_data_file_path
setting. For example:[mysqld] innodb_temp_data_file_path=ibtmp1:50M;ibtmp2:12M:autoextend:max:500MB
The
autoextend
option causes the data file to automatically increase in size when it runs out of free space. Theautoextend
increment is 64MB by default. To modify the increment, change theinnodb_autoextend_increment
variable setting.The directory path for global temporary tablespace data files is formed by concatenating the paths defined by
innodb_data_home_dir
andinnodb_temp_data_file_path
.Before running
InnoDB
in read-only mode, setinnodb_temp_data_file_path
to a location outside of the data directory. The path must be relative to the data directory. For example:--innodb-temp-data-file-path=../../../tmp/ibtmp1:12M:autoextend
For more information, see Global Temporary Tablespace.
-
Property Value Command-Line Format --innodb-temp-tablespaces-dir=dir_name
Introduced 8.0.13 System Variable innodb_temp_tablespaces_dir
Scope Global Dynamic No SET_VAR
Hint AppliesNo Type Directory name Default Value #innodb_temp
Defines the location where
InnoDB
creates a pool of session temporary tablespaces at startup. The default location is the#innodb_temp
directory in the data directory. A fully qualified path or path relative to the data directory is permitted.As of MySQL 8.0.16, session temporary tablespaces always store user-created temporary tables and internal temporary tables created by the optimizer using
InnoDB
. (Previously, the on-disk storage engine for internal temporary tables was determined by theinternal_tmp_disk_storage_engine
system variable, which is no longer supported. See Storage Engine for On-Disk Internal Temporary Tables.)For more information, see Session Temporary Tablespaces.
-
Property Value Command-Line Format --innodb-thread-concurrency=#
System Variable innodb_thread_concurrency
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Integer Default Value 0
Minimum Value 0
Maximum Value 1000
InnoDB
tries to keep the number of operating system threads concurrently insideInnoDB
less than or equal to the limit given by this variable (InnoDB
uses operating system threads to process user transactions). Once the number of threads reaches this limit, additional threads are placed into a wait state within a “First In, First Out” (FIFO) queue for execution. Threads waiting for locks are not counted in the number of concurrently executing threads.The range of this variable is 0 to 1000. A value of 0 (the default) is interpreted as infinite concurrency (no concurrency checking). Disabling thread concurrency checking enables
InnoDB
to create as many threads as it needs. A value of 0 also disables thequeries inside InnoDB
andqueries in queue counters
in theROW OPERATIONS
section ofSHOW ENGINE INNODB STATUS
output.Consider setting this variable if your MySQL instance shares CPU resources with other applications, or if your workload or number of concurrent users is growing. The correct setting depends on workload, computing environment, and the version of MySQL that you are running. You will need to test a range of values to determine the setting that provides the best performance.
innodb_thread_concurrency
is a dynamic variable, which allows you to experiment with different settings on a live test system. If a particular setting performs poorly, you can quickly setinnodb_thread_concurrency
back to 0.Use the following guidelines to help find and maintain an appropriate setting:
If the number of concurrent user threads for a workload is less than 64, set
innodb_thread_concurrency=0
.If your workload is consistently heavy or occasionally spikes, start by setting
innodb_thread_concurrency=128
and then lowering the value to 96, 80, 64, and so on, until you find the number of threads that provides the best performance. For example, suppose your system typically has 40 to 50 users, but periodically the number increases to 60, 70, or even 200. You find that performance is stable at 80 concurrent users but starts to show a regression above this number. In this case, you would setinnodb_thread_concurrency=80
to avoid impacting performance.If you do not want
InnoDB
to use more than a certain number of virtual CPUs for user threads (20 virtual CPUs, for example), setinnodb_thread_concurrency
to this number (or possibly lower, depending on performance results). If your goal is to isolate MySQL from other applications, you may consider binding themysqld
process exclusively to the virtual CPUs. Be aware, however, that exclusive binding could result in non-optimal hardware usage if themysqld
process is not consistently busy. In this case, you might bind themysqld
process to the virtual CPUs but also allow other applications to use some or all of the virtual CPUs.NoteFrom an operating system perspective, using a resource management solution to manage how CPU time is shared among applications may be preferable to binding the
mysqld
process. For example, you could assign 90% of virtual CPU time to a given application while other critical processes are not running, and scale that value back to 40% when other critical processes are running.innodb_thread_concurrency
values that are too high can cause performance regression due to increased contention on system internals and resources.In some cases, the optimal
innodb_thread_concurrency
setting can be smaller than the number of virtual CPUs.Monitor and analyze your system regularly. Changes to workload, number of users, or computing environment may require that you adjust the
innodb_thread_concurrency
setting.
For related information, see Section 15.8.4, “Configuring Thread Concurrency for InnoDB”.
-
Property Value Command-Line Format --innodb-thread-sleep-delay=#
System Variable innodb_thread_sleep_delay
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Integer Default Value 10000
Minimum Value 0
Maximum Value 1000000
How long
InnoDB
threads sleep before joining theInnoDB
queue, in microseconds. The default value is 10000. A value of 0 disables sleep. You can setinnodb_adaptive_max_sleep_delay
to the highest value you would allow forinnodb_thread_sleep_delay
, andInnoDB
automatically adjustsinnodb_thread_sleep_delay
up or down depending on current thread-scheduling activity. This dynamic adjustment helps the thread scheduling mechanism to work smoothly during times when the system is lightly loaded or when it is operating near full capacity.For more information, see Section 15.8.4, “Configuring Thread Concurrency for InnoDB”.
-
Property Value Command-Line Format --innodb-tmpdir=dir_name
System Variable innodb_tmpdir
Scope Global, Session Dynamic Yes SET_VAR
Hint AppliesNo Type Directory name Default Value NULL
Used to define an alternate directory for temporary sort files created during online
ALTER TABLE
operations that rebuild the table.Online
ALTER TABLE
operations that rebuild the table also create an intermediate table file in the same directory as the original table. Theinnodb_tmpdir
option is not applicable to intermediate table files.A valid value is any directory path other than the MySQL data directory path. If the value is NULL (the default), temporary files are created MySQL temporary directory (
$TMPDIR
on Unix,%TEMP%
on Windows, or the directory specified by the--tmpdir
configuration option). If a directory is specified, existence of the directory and permissions are only checked wheninnodb_tmpdir
is configured using aSET
statement. If a symlink is provided in a directory string, the symlink is resolved and stored as an absolute path. The path should not exceed 512 bytes. An onlineALTER TABLE
operation reports an error ifinnodb_tmpdir
is set to an invalid directory.innodb_tmpdir
overrides the MySQLtmpdir
setting but only for onlineALTER TABLE
operations.The
FILE
privilege is required to configureinnodb_tmpdir
.The
innodb_tmpdir
option was introduced to help avoid overflowing a temporary file directory located on atmpfs
file system. Such overflows could occur as a result of large temporary sort files created during onlineALTER TABLE
operations that rebuild the table.In replication environments, only consider replicating the
innodb_tmpdir
setting if all servers have the same operating system environment. Otherwise, replicating theinnodb_tmpdir
setting could result in a replication failure when running onlineALTER TABLE
operations that rebuild the table. If server operating environments differ, it is recommended that you configureinnodb_tmpdir
on each server individually.For more information, see Section 15.12.3, “Online DDL Space Requirements”. For information about online
ALTER TABLE
operations, see Section 15.12, “InnoDB and Online DDL”. innodb_trx_purge_view_update_only_debug
Property Value Command-Line Format --innodb-trx-purge-view-update-only-debug[={OFF|ON}]
System Variable innodb_trx_purge_view_update_only_debug
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Boolean Default Value OFF
Pauses purging of delete-marked records while allowing the purge view to be updated. This option artificially creates a situation in which the purge view is updated but purges have not yet been performed. This option is only available if debugging support is compiled in using the
WITH_DEBUG
CMake option.-
Property Value Command-Line Format --innodb-trx-rseg-n-slots-debug=#
System Variable innodb_trx_rseg_n_slots_debug
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Integer Default Value 0
Maximum Value 1024
Sets a debug flag that limits
TRX_RSEG_N_SLOTS
to a given value for thetrx_rsegf_undo_find_free
function that looks for free slots for undo log segments. This option is only available if debugging support is compiled in using theWITH_DEBUG
CMake option. -
Property Value Command-Line Format --innodb-undo-directory=dir_name
System Variable innodb_undo_directory
Scope Global Dynamic No SET_VAR
Hint AppliesNo Type Directory name The path where
InnoDB
creates undo tablespaces. Typically used to place undo tablespaces on a different storage device.There is no default value (it is NULL). If the
innodb_undo_directory
variable is undefined, undo tablespaces are created in the data directory.The default undo tablespaces (
innodb_undo_001
andinnodb_undo_002
) created when the MySQL instance is initialized always reside in the directory defined by theinnodb_undo_directory
variable.Undo tablespaces created using
CREATE UNDO TABLESPACE
syntax are created in the directory defined by theinnodb_undo_directory
variable if a different path is not specified.For more information, see Section 15.6.3.4, “Undo Tablespaces”.
-
Property Value Command-Line Format --innodb-undo-log-encrypt[={OFF|ON}]
Introduced 8.0.1 System Variable innodb_undo_log_encrypt
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Boolean Default Value OFF
Controls encryption of undo log data for tables encrypted using the
InnoDB
data-at-rest encryption feature. Only applies to undo logs that reside in separate undo tablespaces. See Section 15.6.3.4, “Undo Tablespaces”. Encryption is not supported for undo log data that resides in the system tablespace. For more information, see Undo Log Encryption. -
Property Value Command-Line Format --innodb-undo-log-truncate[={OFF|ON}]
System Variable innodb_undo_log_truncate
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Boolean Default Value (>= 8.0.2) ON
Default Value (<= 8.0.1) OFF
When enabled, undo tablespaces that exceed the threshold value defined by
innodb_max_undo_log_size
are marked for truncation. Only undo tablespaces can be truncated. Truncating undo logs that reside in the system tablespace is not supported. For truncation to occur, there must be at least two undo tablespaces.The
innodb_purge_rseg_truncate_frequency
variable can be used to expedite truncation of undo tablespaces.For more information, see Truncating Undo Tablespaces.
-
Property Value Command-Line Format --innodb-undo-logs=#
Deprecated Yes (removed in 8.0.2) System Variable innodb_undo_logs
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Integer Default Value 128
Minimum Value 1
Maximum Value 128
Noteinnodb_undo_logs
was removed in MySQL 8.0.2.The
innodb_undo_logs
option is an alias forinnodb_rollback_segments
. For more information, see the description ofinnodb_rollback_segments
. -
Property Value Command-Line Format --innodb-undo-tablespaces=#
Deprecated 8.0.4 System Variable innodb_undo_tablespaces
Scope Global Dynamic (>= 8.0.2) Yes Dynamic (<= 8.0.1) No SET_VAR
Hint AppliesNo Type Integer Default Value (>= 8.0.2) 2
Default Value (<= 8.0.1) 0
Minimum Value (>= 8.0.3) 2
Minimum Value (<= 8.0.2) 0
Maximum Value (>= 8.0.2) 127
Maximum Value (<= 8.0.1) 95
Defines the number of undo tablespaces used by
InnoDB
. The default and minimum value is 2.NoteThe
innodb_undo_tablespaces
variable is deprecated and is no longer configurable as of MySQL 8.0.14. It will be removed in a future release.For more information, see Section 15.6.3.4, “Undo Tablespaces”.
-
Property Value Command-Line Format --innodb-use-native-aio[={OFF|ON}]
System Variable innodb_use_native_aio
Scope Global Dynamic No SET_VAR
Hint AppliesNo Type Boolean Default Value ON
Specifies whether to use the Linux asynchronous I/O subsystem. This variable applies to Linux systems only, and cannot be changed while the server is running. Normally, you do not need to configure this option, because it is enabled by default.
The asynchronous I/O capability that
InnoDB
has on Windows systems is available on Linux systems. (Other Unix-like systems continue to use synchronous I/O calls.) This feature improves the scalability of heavily I/O-bound systems, which typically show many pending reads/writes inSHOW ENGINE INNODB STATUS\G
output.Running with a large number of
InnoDB
I/O threads, and especially running multiple such instances on the same server machine, can exceed capacity limits on Linux systems. In this case, you may receive the following error:EAGAIN: The specified maxevents exceeds the user's limit of available events.
You can typically address this error by writing a higher limit to
/proc/sys/fs/aio-max-nr
.However, if a problem with the asynchronous I/O subsystem in the OS prevents
InnoDB
from starting, you can start the server withinnodb_use_native_aio=0
. This option may also be disabled automatically during startup ifInnoDB
detects a potential problem such as a combination oftmpdir
location,tmpfs
file system, and Linux kernel that does not support AIO ontmpfs
.For more information, see Section 15.8.6, “Using Asynchronous I/O on Linux”.
The
InnoDB
version number. In MySQL 8.0, separate version numbering forInnoDB
does not apply and this value is the same theversion
number of the server.-
Property Value Command-Line Format --innodb-write-io-threads=#
System Variable innodb_write_io_threads
Scope Global Dynamic No SET_VAR
Hint AppliesNo Type Integer Default Value 4
Minimum Value 1
Maximum Value 64
The number of I/O threads for write operations in
InnoDB
. The default value is 4. Its counterpart for read threads isinnodb_read_io_threads
. For more information, see Section 15.8.5, “Configuring the Number of Background InnoDB I/O Threads”. For general I/O tuning advice, see Section 8.5.8, “Optimizing InnoDB Disk I/O”.NoteOn Linux systems, running multiple MySQL servers (typically more than 12) with default settings for
innodb_read_io_threads
,innodb_write_io_threads
, and the Linuxaio-max-nr
setting can exceed system limits. Ideally, increase theaio-max-nr
setting; as a workaround, you might reduce the settings for one or both of the MySQL variables.Also take into consideration the value of
sync_binlog
, which controls synchronization of the binary log to disk.For general I/O tuning advice, see Section 8.5.8, “Optimizing InnoDB Disk I/O”.
Document created the 26/06/2006, last modified the 26/10/2018
Source of the printed document:https://www.gaudry.be/en/mysql-rf-innodb-parameters.html
The infobrol is a personal site whose content is my sole responsibility. The text is available under CreativeCommons license (BY-NC-SA). More info on the terms of use and the author.
References
These references and links indicate documents consulted during the writing of this page, or which may provide additional information, but the authors of these sources can not be held responsible for the content of this page.
The author This site is solely responsible for the way in which the various concepts, and the freedoms that are taken with the reference works, are presented here. Remember that you must cross multiple source information to reduce the risk of errors.