MySQL 8.0 Reference Manual Including MySQL NDB Cluster 8.0
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 the InnoDB
adaptive hash index, you
can use
--innodb-adaptive-hash-index
or
--skip-innodb-adaptive-hash-index
on the command line, or
innodb_adaptive_hash_index
or
skip_innodb_adaptive_hash_index
in an
option file.
Some variable descriptions refer to “enabling” or
“disabling” a variable. These variables can be
enabled with the
SET
statement by setting them to ON
or
1
, or disabled by setting them to
OFF
or 0
. Boolean
variables can be set at startup to the values
ON
, TRUE
,
OFF
, and FALSE
(not
case-sensitive), as well as 1
and
0
. See Section 6.2.2.4, “Program Option Modifiers”.
System variables that take a numeric value can be specified as
--
on the command line or as
var_name
=value
in option files.
var_name
=value
Many system variables can be changed at runtime (see Section 7.1.9.2, “Dynamic System Variables”).
For information about GLOBAL
and
SESSION
variable scope modifiers, refer to
the
SET
statement documentation.
Certain options control the locations and layout of the
InnoDB
data files.
Section 17.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 6.2.2, “Specifying Program Options”.
Table 17.24 InnoDB Option and Variable Reference
Command-Line Format | --innodb[=value] |
---|---|
Deprecated | Yes |
Type | Enumeration |
Default Value | ON |
Valid Values |
|
Controls loading of the InnoDB
storage
engine, if the server was compiled with
InnoDB
support. This option has a tristate
format, with possible values of OFF
,
ON
, or FORCE
. See
Section 7.6.1, “Installing and Uninstalling Plugins”.
To disable InnoDB
, use
--innodb=OFF
or
--skip-innodb
.
In this case, because the default storage engine is
InnoDB
, 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 and
TEMPORARY
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. Expect these options to be removed in a future
MySQL release.
Command-Line Format | --innodb-dedicated-server[={OFF|ON}] |
---|---|
System Variable | innodb_dedicated_server |
Scope | Global |
Dynamic | No |
SET_VAR Hint Applies |
No |
Type | Boolean |
Default Value | OFF |
When this option is set by starting the server with
--innodb-dedicated-server
or
--innodb-dedicated-server=ON
, either on the
command line or in a my.cnf
file,
InnoDB
automatically calculates and sets
the values of the following variables:
innodb_redo_log_capacity
or, prior to MySQL 8.0.30,
innodb_log_file_size
and
innodb_log_files_in_group
.
innodb_log_file_size
and
innodb_log_files_in_group
are deprecated
in MySQL 8.0.30. These variables are superseded by
innodb_redo_log_capacity
. See
Section 17.6.5, “Redo Log”.
You should consider using
--innodb-dedicated-server
only if the MySQL
instance resides on a dedicated server where it can use all
available system resources. Using this option is not
recommended if the MySQL instance shares system resources with
other applications.
It is strongly recommended that you read Section 17.8.12, “Enabling Automatic InnoDB Configuration for a Dedicated MySQL Server”, before using this option in production.
Command-Line Format | --innodb-status-file[={OFF|ON}] |
---|---|
Type | Boolean |
Default Value | OFF |
The --innodb-status-file
startup option
controls whether InnoDB
creates a file
named
innodb_status.
in the data directory and writes
pid
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 the
pid
--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, as
SHOW ENGINE
INNODB STATUS
output generation can affect
performance, and the
innodb_status.
file can become quite large over time.
pid
For related information, see Section 17.17.2, “Enabling InnoDB Monitors”.
Disable the InnoDB
storage engine. See the
description of --innodb
.
daemon_memcached_enable_binlog
Command-Line Format | --daemon-memcached-enable-binlog[={OFF|ON}] |
---|---|
Deprecated | 8.0.22 |
System Variable | daemon_memcached_enable_binlog |
Scope | Global |
Dynamic | No |
SET_VAR Hint Applies |
No |
Type | Boolean |
Default Value | OFF |
Enable this option on the source 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 source server using the
--log-bin
option.
For more information, see Section 17.20.7, “The InnoDB memcached Plugin and Replication”.
daemon_memcached_engine_lib_name
Command-Line Format | --daemon-memcached-engine-lib-name=file_name |
---|---|
Deprecated | 8.0.22 |
System Variable | daemon_memcached_engine_lib_name |
Scope | Global |
Dynamic | No |
SET_VAR Hint Applies |
No |
Type | File name |
Default Value | innodb_engine.so |
Specifies the shared library that implements the
InnoDB
memcached plugin.
For more information, see Section 17.20.3, “Setting Up the InnoDB memcached Plugin”.
daemon_memcached_engine_lib_path
Command-Line Format | --daemon-memcached-engine-lib-path=dir_name |
---|---|
Deprecated | 8.0.22 |
System Variable | daemon_memcached_engine_lib_path |
Scope | Global |
Dynamic | No |
SET_VAR Hint Applies |
No |
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 a
memcached
plugin for a different storage
engine that is located outside of the MySQL plugin directory.
For more information, see Section 17.20.3, “Setting Up the InnoDB memcached Plugin”.
Command-Line Format | --daemon-memcached-option=options |
---|---|
Deprecated | 8.0.22 |
System Variable | daemon_memcached_option |
Scope | Global |
Dynamic | No |
SET_VAR Hint Applies |
No |
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 17.20.3, “Setting Up the InnoDB memcached Plugin” for usage details. For information about memcached options, refer to the memcached man page.
Command-Line Format | --daemon-memcached-r-batch-size=# |
---|---|
Deprecated | 8.0.22 |
System Variable | daemon_memcached_r_batch_size |
Scope | Global |
Dynamic | No |
SET_VAR Hint Applies |
No |
Type | Integer |
Default Value | 1 |
Minimum Value | 1 |
Maximum Value | 1073741824 |
Specifies how many memcached read
operations (get
operations) to perform
before doing a COMMIT
to start
a new transaction. Counterpart of
daemon_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 17.20.3, “Setting Up the InnoDB memcached Plugin”.
Command-Line Format | --daemon-memcached-w-batch-size=# |
---|---|
Deprecated | 8.0.22 |
System Variable | daemon_memcached_w_batch_size |
Scope | Global |
Dynamic | No |
SET_VAR Hint Applies |
No |
Type | Integer |
Default Value | 1 |
Minimum Value | 1 |
Maximum Value | 1048576 |
Specifies how many memcached write
operations, such as add
,
set
, and incr
, to
perform before doing a COMMIT
to start a new transaction. Counterpart of
daemon_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 an unexpected exit occurs.
For more information, see Section 17.20.3, “Setting Up the InnoDB memcached Plugin”.
Command-Line Format | --innodb-adaptive-flushing[={OFF|ON}] |
---|---|
System Variable | innodb_adaptive_flushing |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
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 17.8.3.5, “Configuring Buffer Pool Flushing” for
more information. For general I/O tuning advice, see
Section 10.5.8, “Optimizing InnoDB Disk I/O”.
Command-Line Format | --innodb-adaptive-flushing-lwm=# |
---|---|
System Variable | innodb_adaptive_flushing_lwm |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
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 17.8.3.5, “Configuring Buffer Pool Flushing”.
Command-Line Format | --innodb-adaptive-hash-index[={OFF|ON}] |
---|---|
System Variable | innodb_adaptive_hash_index |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
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 17.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 7.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
Command-Line Format | --innodb-adaptive-hash-index-parts=# |
---|---|
System Variable | innodb_adaptive_hash_index_parts |
Scope | Global |
Dynamic | No |
SET_VAR Hint Applies |
No |
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 17.5.3, “Adaptive Hash Index”.
innodb_adaptive_max_sleep_delay
Command-Line Format | --innodb-adaptive-max-sleep-delay=# |
---|---|
System Variable | innodb_adaptive_max_sleep_delay |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
Type | Integer |
Default Value | 150000 |
Minimum Value | 0 |
Maximum Value | 1000000 |
Unit | microseconds |
Permits InnoDB
to automatically adjust the
value of
innodb_thread_sleep_delay
up
or down according to the current workload. Any nonzero value
enables automated, dynamic adjustment of the
innodb_thread_sleep_delay
value, up to the maximum value specified in the
innodb_adaptive_max_sleep_delay
option. The value represents the number of microseconds. This
option can be useful in busy systems, with greater than 16
InnoDB
threads. (In practice, it is most
valuable for MySQL systems with hundreds or thousands of
simultaneous connections.)
For more information, see Section 17.8.4, “Configuring Thread Concurrency for InnoDB”.
Command-Line Format | --innodb-api-bk-commit-interval=# |
---|---|
Deprecated | 8.0.22 |
System Variable | innodb_api_bk_commit_interval |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
Type | Integer |
Default Value | 5 |
Minimum Value | 1 |
Maximum Value | 1073741824 |
Unit | seconds |
How often to auto-commit idle connections that use the
InnoDB
memcached
interface, in seconds. For more information, see
Section 17.20.6.4, “Controlling Transactional Behavior of the InnoDB memcached Plugin”.
Command-Line Format | --innodb-api-disable-rowlock[={OFF|ON}] |
---|---|
Deprecated | 8.0.22 |
System Variable | innodb_api_disable_rowlock |
Scope | Global |
Dynamic | No |
SET_VAR Hint Applies |
No |
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 for get
and
set
operations. When
innodb_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 17.20.6.4, “Controlling Transactional Behavior of the InnoDB memcached Plugin”.
Command-Line Format | --innodb-api-enable-binlog[={OFF|ON}] |
---|---|
Deprecated | 8.0.22 |
System Variable | innodb_api_enable_binlog |
Scope | Global |
Dynamic | No |
SET_VAR Hint Applies |
No |
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.
Command-Line Format | --innodb-api-enable-mdl[={OFF|ON}] |
---|---|
Deprecated | 8.0.22 |
System Variable | innodb_api_enable_mdl |
Scope | Global |
Dynamic | No |
SET_VAR Hint Applies |
No |
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 17.20.6.4, “Controlling Transactional Behavior of the InnoDB memcached Plugin”.
Command-Line Format | --innodb-api-trx-level=# |
---|---|
Deprecated | 8.0.22 |
System Variable | innodb_api_trx_level |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
Type | Integer |
Default Value | 0 |
Minimum Value | 0 |
Maximum Value | 3 |
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 17.20.6.4, “Controlling Transactional Behavior of the InnoDB memcached Plugin”.
Command-Line Format | --innodb-autoextend-increment=# |
---|---|
System Variable | innodb_autoextend_increment |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
Type | Integer |
Default Value | 64 |
Minimum Value | 1 |
Maximum Value | 1000 |
Unit | megabytes |
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 the
innodb_autoextend_increment
setting. The initial extensions are by small amounts, after
which extensions occur in increments of 4MB.
Command-Line Format | --innodb-autoinc-lock-mode=# |
---|---|
System Variable | innodb_autoinc_lock_mode |
Scope | Global |
Dynamic | No |
SET_VAR Hint Applies |
No |
Type | Integer |
Default Value | 2 |
Valid Values |
|
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
Command-Line Format | --innodb-background-drop-list-empty[={OFF|ON}] |
---|---|
System Variable | innodb_background_drop_list_empty |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
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 table t1
on the
background drop list, test case B waits until the background
drop list is empty before creating table
t1
.
Command-Line Format | --innodb-buffer-pool-chunk-size=# |
---|---|
System Variable | innodb_buffer_pool_chunk_size |
Scope | Global |
Dynamic | No |
SET_VAR Hint Applies |
No |
Type | Integer |
Default Value | 134217728 |
Minimum Value | 1048576 |
Maximum Value | innodb_buffer_pool_size / innodb_buffer_pool_instances |
Unit | bytes |
innodb_buffer_pool_chunk_size
defines the chunk size for InnoDB
buffer
pool resizing operations.
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 of
innodb_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 to
innodb_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 alter
innodb_buffer_pool_chunk_size
,
innodb_buffer_pool_size
is automatically rounded to a value that is equal to or a
multiple of
innodb_buffer_pool_chunk_size
*
innodb_buffer_pool_instances
.
The adjustment occurs when the buffer pool is initialized.
Care should be taken when changing
innodb_buffer_pool_chunk_size
,
as changing this value can automatically increase the size
of the buffer pool. Before changing
innodb_buffer_pool_chunk_size
,
calculate its effect on
innodb_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.
The innodb_buffer_pool_size
variable is dynamic, which permits resizing the buffer pool
while the server is online. However, the buffer pool size must
be equal to or a multiple of
innodb_buffer_pool_chunk_size
*
innodb_buffer_pool_instances
,
and changing either of those variable settings requires
restarting the server.
See Section 17.8.3.1, “Configuring InnoDB Buffer Pool Size” for more information.
Command-Line Format | --innodb-buffer-pool-debug[={OFF|ON}] |
---|---|
System Variable | innodb_buffer_pool_debug |
Scope | Global |
Dynamic | No |
SET_VAR Hint Applies |
No |
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
.
The innodb_buffer_pool_debug
option is only available if debugging support is compiled in
using the WITH_DEBUG
CMake option.
innodb_buffer_pool_dump_at_shutdown
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 Applies |
No |
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 with
innodb_buffer_pool_load_at_startup
.
The
innodb_buffer_pool_dump_pct
option defines the percentage of most recently used buffer
pool pages to dump.
Both
innodb_buffer_pool_dump_at_shutdown
and
innodb_buffer_pool_load_at_startup
are enabled by default.
For more information, see Section 17.8.3.6, “Saving and Restoring the Buffer Pool State”.
Command-Line Format | --innodb-buffer-pool-dump-now[={OFF|ON}] |
---|---|
System Variable | innodb_buffer_pool_dump_now |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
Type | Boolean |
Default Value | OFF |
Immediately makes a record of pages cached in the
InnoDB
buffer pool. Typically
used in combination with
innodb_buffer_pool_load_now
.
Enabling
innodb_buffer_pool_dump_now
triggers the recording action but does not alter the variable
setting, which always remains OFF
or
0
. To view buffer pool dump status after
triggering a dump, query the
Innodb_buffer_pool_dump_status
variable.
Enabling
innodb_buffer_pool_dump_now
triggers the dump action but does not alter the variable
setting, which always remains OFF
or
0
. To view buffer pool dump status after
triggering a dump, query the
Innodb_buffer_pool_dump_status
variable.
For more information, see Section 17.8.3.6, “Saving and Restoring the Buffer Pool State”.
Command-Line Format | --innodb-buffer-pool-dump-pct=# |
---|---|
System Variable | innodb_buffer_pool_dump_pct |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
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.
Command-Line Format | --innodb-buffer-pool-filename=file_name |
---|---|
System Variable | innodb_buffer_pool_filename |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
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
or
innodb_buffer_pool_dump_now
.
Tablespace IDs and page IDs are saved in the following format:
space, page_id
. By default, the file is
named ib_buffer_pool
and is located in
the InnoDB
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:
SET GLOBAL innodb_buffer_pool_filename='file_name'
;
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
returns a startup error indicating
that there is no such file or directory.
For more information, see Section 17.8.3.6, “Saving and Restoring the Buffer Pool State”.
innodb_buffer_pool_in_core_file
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 Applies |
No |
Type | Boolean |
Default Value | ON |
Disabling the
innodb_buffer_pool_in_core_file
variable reduces the size of core files by excluding
InnoDB
buffer pool pages. To use this
variable, the core_file
variable must be enabled and the operating system must support
the MADV_DONTDUMP
non-POSIX extension to
madvise()
, which is supported in Linux 3.4
and later. For more information, see
Section 17.8.3.7, “Excluding Buffer Pool Pages from Core Files”.
Command-Line Format | --innodb-buffer-pool-instances=# |
---|---|
System Variable | innodb_buffer_pool_instances |
Scope | Global |
Dynamic | No |
SET_VAR Hint Applies |
No |
Type | Integer |
Default Value (Windows, 32-bit platforms) | see description |
Default Value (Other) | 8 (or 1 if innodb_buffer_pool_size < 1GB) |
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
of
innodb_buffer_pool_instances
and innodb_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 for
innodb_buffer_pool_instances
is
innodb_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 17.8.3.1, “Configuring InnoDB Buffer Pool Size”.
Command-Line Format | --innodb-buffer-pool-load-abort[={OFF|ON}] |
---|---|
System Variable | innodb_buffer_pool_load_abort |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
Type | Boolean |
Default Value | OFF |
Interrupts the process of restoring InnoDB
buffer pool contents
triggered by
innodb_buffer_pool_load_at_startup
or
innodb_buffer_pool_load_now
.
Enabling
innodb_buffer_pool_load_abort
triggers the abort action but does not alter the variable
setting, which always remains OFF
or
0
. To view buffer pool load status after
triggering an abort action, query the
Innodb_buffer_pool_load_status
variable.
For more information, see Section 17.8.3.6, “Saving and Restoring the Buffer Pool State”.
innodb_buffer_pool_load_at_startup
Command-Line Format | --innodb-buffer-pool-load-at-startup[={OFF|ON}] |
---|---|
System Variable | innodb_buffer_pool_load_at_startup |
Scope | Global |
Dynamic | No |
SET_VAR Hint Applies |
No |
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 with
innodb_buffer_pool_dump_at_shutdown
.
Both
innodb_buffer_pool_dump_at_shutdown
and
innodb_buffer_pool_load_at_startup
are enabled by default.
For more information, see Section 17.8.3.6, “Saving and Restoring the Buffer Pool State”.
Command-Line Format | --innodb-buffer-pool-load-now[={OFF|ON}] |
---|---|
System Variable | innodb_buffer_pool_load_now |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
Type | Boolean |
Default Value | OFF |
Immediately warms up the
InnoDB
buffer pool by loading
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.
Enabling
innodb_buffer_pool_load_now
triggers the load action but does not alter the variable
setting, which always remains OFF
or
0
. To view buffer pool load progress after
triggering a load, query the
Innodb_buffer_pool_load_status
variable.
For more information, see Section 17.8.3.6, “Saving and Restoring the Buffer Pool State”.
Command-Line Format | --innodb-buffer-pool-size=# |
---|---|
System Variable | innodb_buffer_pool_size |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
Type | Integer |
Default Value | 134217728 |
Minimum Value | 5242880 |
Maximum Value (64-bit platforms) | 2**64-1 |
Maximum Value (32-bit platforms) | 2**32-1 |
Unit | bytes |
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, setting
innodb_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 17.8.3.6, “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 of
innodb_buffer_pool_chunk_size
*
innodb_buffer_pool_instances
,
buffer pool size is automatically adjusted to a value that is
equal to or a multiple of
innodb_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. The
Innodb_buffer_pool_resize_status
status variable reports the status of online buffer pool
resizing operations. See
Section 17.8.3.1, “Configuring InnoDB Buffer Pool Size” for more
information.
If the server is started with
--innodb-dedicated-server
, the
innodb_buffer_pool_size
value
is determined automatically if it is not explicitly defined.
For more information, see
Section 17.8.12, “Enabling Automatic InnoDB Configuration for a Dedicated MySQL Server”.
Command-Line Format | --innodb-change-buffer-max-size=# |
---|---|
System Variable | innodb_change_buffer_max_size |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
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 17.5.2, “Change Buffer”. For general I/O
tuning advice, see Section 10.5.8, “Optimizing InnoDB Disk I/O”.
Command-Line Format | --innodb-change-buffering=value |
---|---|
System Variable | innodb_change_buffering |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
Type | Enumeration |
Default Value | all |
Valid Values |
|
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 17.25 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 17.5.2, “Change Buffer”. For general I/O tuning advice, see Section 10.5.8, “Optimizing InnoDB Disk I/O”.
Command-Line Format | --innodb-change-buffering-debug=# |
---|---|
System Variable | innodb_change_buffering_debug |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
Type | Integer |
Default Value | 0 |
Minimum 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 an unexpected exit 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 the
WITH_DEBUG
CMake option.
Command-Line Format | --innodb-checkpoint-disabled[={OFF|ON}] |
---|---|
System Variable | innodb_checkpoint_disabled |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
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 the WITH_DEBUG
CMake option.
Command-Line Format | --innodb-checksum-algorithm=value |
---|---|
System Variable | innodb_checksum_algorithm |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
Type | Enumeration |
Default Value | crc32 |
Valid Values |
|
Specifies how to generate and verify the
checksum stored in the
disk blocks of InnoDB
tablespaces. The
default value for
innodb_checksum_algorithm
is
crc32
.
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 value
crc32
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 64 bits at a
time, which is faster than the innodb
checksum algorithm, which scans blocks 8 bits at a time. The
value none
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 the crc32
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
, and
crc32
option values, and their strict
counterparts. none
,
innodb
, and crc32
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 all
InnoDB
data files in an instance are
created under an identical
innodb_checksum_algorithm
value.
Table 17.26 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 , or crc32 . |
innodb | A checksum calculated in software, using the original algorithm from
InnoDB . |
Any of the checksums generated by none ,
innodb , or crc32 . |
crc32 | A checksum calculated using the crc32 algorithm,
possibly done with a hardware assist. |
Any of the checksums generated by none ,
innodb , or crc32 . |
strict_none | A constant number | Any of the checksums generated by none ,
innodb , or crc32 .
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 , or crc32 .
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 , or crc32 .
InnoDB prints an error message if a
valid but non-matching checksum is encountered. |
Command-Line Format | --innodb-cmp-per-index-enabled[={OFF|ON}] |
---|---|
System Variable | innodb_cmp_per_index_enabled |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
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 replica instances
during performance tuning related to InnoDB
compressed tables.
For more information, see Section 28.4.8, “The INFORMATION_SCHEMA INNODB_CMP_PER_INDEX and INNODB_CMP_PER_INDEX_RESET Tables”, and Section 17.9.1.4, “Monitoring InnoDB Table Compression at Runtime”.
Command-Line Format | --innodb-commit-concurrency=# |
---|---|
System Variable | innodb_commit_concurrency |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
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.
Command-Line Format | --innodb-compress-debug=value |
---|---|
System Variable | innodb_compress_debug |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
Type | Enumeration |
Default Value | none |
Valid Values |
|
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 the
WITH_DEBUG
CMake option.
For related information, see Section 17.9.2, “InnoDB Page Compression”.
innodb_compression_failure_threshold_pct
Command-Line Format | --innodb-compression-failure-threshold-pct=# |
---|---|
System Variable | innodb_compression_failure_threshold_pct |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
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 17.9.1.6, “Compression for OLTP Workloads”.
Command-Line Format | --innodb-compression-level=# |
---|---|
System Variable | innodb_compression_level |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
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 17.9.1.6, “Compression for OLTP Workloads”.
innodb_compression_pad_pct_max
Command-Line Format | --innodb-compression-pad-pct-max=# |
---|---|
System Variable | innodb_compression_pad_pct_max |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
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 17.9.1.6, “Compression for OLTP Workloads”.
Command-Line Format | --innodb-concurrency-tickets=# |
---|---|
System Variable | innodb_concurrency_tickets |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
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 enter InnoDB
if
the number of threads has already reached the concurrency
limit. When a thread is permitted to enter
InnoDB
, it is given a number of “
tickets” equal to the value of
innodb_concurrency_tickets
,
and the thread can enter and leave InnoDB
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 enter
InnoDB
. 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 small
innodb_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 by
innodb_thread_concurrency
)
and more time retrieving rows. Large transactions also require
fewer trips through the queue to complete their task. The
disadvantage of a large
innodb_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 the
innodb_concurrency_tickets
value up or down to find the optimal balance between larger
and smaller transactions. The SHOW 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 the
TRX_CONCURRENCY_TICKETS
column of the
Information Schema INNODB_TRX
table.
For more information, see Section 17.8.4, “Configuring Thread Concurrency for InnoDB”.
Command-Line Format | --innodb-data-file-path=file_name |
---|---|
System Variable | innodb_data_file_path |
Scope | Global |
Dynamic | No |
SET_VAR Hint Applies |
No |
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 for
innodb_data_file_path
, the
default behavior is to create a single auto-extending data
file, slightly larger than 12MB, named
ibdata1
.
The full syntax for a data file specification includes the
file name, file size, autoextend
attribute,
and max
attribute:
file_name
:file_size
[:autoextend[:max:max_file_size
]]
File sizes are specified in kilobytes, megabytes, or gigabytes
by appending K
, M
or
G
to the size value. If specifying the data
file size in kilobytes, do so in multiples of 1024. Otherwise,
KB values are rounded to nearest megabyte (MB) boundary. The
sum of file sizes must be, at a minimum, slightly larger than
12MB.
For additional configuration information, see System Tablespace Data File Configuration. For resizing instructions, see Resizing the System Tablespace.
Command-Line Format | --innodb-data-home-dir=dir_name |
---|---|
System Variable | innodb_data_home_dir |
Scope | Global |
Dynamic | No |
SET_VAR Hint Applies |
No |
Type | Directory name |
The common part of the directory path for
InnoDB
system
tablespace data files. The default value is the MySQL
data
directory. The setting is
concatenated with the
innodb_data_file_path
setting, unless that setting is defined with an absolute 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/
This setting does not affect the location of file-per-table tablespaces.
For related information, see Section 17.8.1, “InnoDB Startup Configuration”.
Command-Line Format | --innodb-ddl-buffer-size=# |
---|---|
Introduced | 8.0.27 |
System Variable | innodb_ddl_buffer_size |
Scope | Session |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
Type | Integer |
Default Value | 1048576 |
Minimum Value | 65536 |
Maximum Value | 4294967295 |
Unit | bytes |
Defines the maximum buffer size for DDL operations. The
default setting is 1048576 bytes (approximately 1 MB). Applies
to online DDL operations that create or rebuild secondary
indexes. See Section 17.12.4, “Online DDL Memory Management”.
The maximum buffer size per DDL thread is the maximum buffer
size divided by the number of DDL threads
(innodb_ddl_buffer_size
/innodb_ddl_threads
).
innodb_ddl_log_crash_reset_debug
Command-Line Format | --innodb-ddl-log-crash-reset-debug[={OFF|ON}] |
---|---|
System Variable | innodb_ddl_log_crash_reset_debug |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
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.
Command-Line Format | --innodb-ddl-threads=# |
---|---|
Introduced | 8.0.27 |
System Variable | innodb_ddl_threads |
Scope | Session |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
Type | Integer |
Default Value | 4 |
Minimum Value | 1 |
Maximum Value | 64 |
Defines the maximum number of parallel threads for the sort and build phases of index creation. Applies to online DDL operations that create or rebuild secondary indexes. For related information, see Section 17.12.5, “Configuring Parallel Threads for Online DDL Operations”, and Section 17.12.4, “Online DDL Memory Management”.
Command-Line Format | --innodb-deadlock-detect[={OFF|ON}] |
---|---|
System Variable | innodb_deadlock_detect |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
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 17.7.5.2, “Deadlock Detection”.
Command-Line Format | --innodb-default-row-format=value |
---|---|
System Variable | innodb_default_row_format |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
Type | Enumeration |
Default Value | DYNAMIC |
Valid Values |
|
The innodb_default_row_format
option defines the default row format for
InnoDB
tables and user-created temporary
tables. The default setting is DYNAMIC
.
Other permitted values are COMPACT
and
REDUNDANT
. The
COMPRESSED
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 a ROW_FORMAT
option is not specified
explicitly or when ROW_FORMAT=DEFAULT
is
used.
When a ROW_FORMAT
option is not specified
explicitly or when ROW_FORMAT=DEFAULT
is
used, any operation that rebuilds a table also silently
changes the row format of the table to the format defined by
innodb_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 the
DYNAMIC
row format, regardless of the
innodb_default_row_format
setting.
Command-Line Format | --innodb-directories=dir_name |
---|---|
System Variable | innodb_directories |
Scope | Global |
Dynamic | No |
SET_VAR Hint Applies |
No |
Type | Directory name |
Default Value | NULL |
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.
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.
The default value is NULL, but directories defined by
innodb_data_home_dir
,
innodb_undo_directory
, and
datadir
are always appended
to the innodb_directories
argument value when InnoDB
builds a list of
directories to scan at startup. These directories are appended
regardless of whether an
innodb_directories
setting is
specified explicitly.
innodb_directories
may be
specified as an option in a startup command or in a MySQL
option file. Quotes surround the argument value because
otherwise some command interpreters interpret semicolon
(;
) as a special character. (For example,
Unix shells treat it as a command terminator.)
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 17.6.3.6, “Moving Tablespace Files While the Server is Offline”.
innodb_disable_sort_file_cache
Command-Line Format | --innodb-disable-sort-file-cache[={OFF|ON}] |
---|---|
System Variable | innodb_disable_sort_file_cache |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
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
.
Command-Line Format |
|
---|---|
System Variable | innodb_doublewrite |
Scope | Global |
Dynamic (≥ 8.0.30) | Yes |
Dynamic (≤ 8.0.29) | No |
SET_VAR Hint Applies |
No |
Type (≥ 8.0.30) | Enumeration |
Type (≤ 8.0.29) | Boolean |
Default Value | ON |
Valid Values |
|
The innodb_doublewrite
variable controls doublewrite buffering. Doublewrite buffering
is enabled by default in most cases.
Prior to MySQL 8.0.30, you can set
innodb_doublewrite
to
ON
or OFF
when starting
the server to enable or disable doublewrite buffering,
respectively. From MySQL 8.0.30,
innodb_doublewrite
also
supports DETECT_AND_RECOVER
and
DETECT_ONLY
settings.
The DETECT_AND_RECOVER
setting is the same
as the ON
setting. With this setting, the
doublewrite buffer is fully enabled, with database page
content written to the doublewrite buffer where it is accessed
during recovery to fix incomplete page writes.
With the DETECT_ONLY
setting, only metadata
is written to the doublewrite buffer. Database page content is
not written to the doublewrite buffer, and recovery does not
use the doublewrite buffer to fix incomplete page writes. This
lightweight setting is intended for detecting incomplete page
writes only.
MySQL 8.0.30 onwards supports dynamic changes to the
innodb_doublewrite
setting
that enables the doublewrite buffer, between
ON
, DETECT_AND_RECOVER
,
and DETECT_ONLY
. MySQL does not support
dynamic changes between a setting that enables the doublewrite
buffer and OFF
or vice versa.
If the doublewrite buffer is located on a Fusion-io device
that supports atomic writes, the doublewrite buffer is
automatically disabled and data file writes are performed
using Fusion-io atomic writes instead. However, be aware that
the innodb_doublewrite
setting is global. When the doublewrite buffer is disabled, it
is disabled for all data files including those that do not
reside on Fusion-io hardware. This feature is only supported
on Fusion-io hardware and is only enabled for Fusion-io NVMFS
on Linux. To take full advantage of this feature, an
innodb_flush_method
setting
of O_DIRECT
is recommended.
For related information, see Section 17.6.4, “Doublewrite Buffer”.
Command-Line Format | --innodb-doublewrite-batch-size=# |
---|---|
Introduced | 8.0.20 |
System Variable | innodb_doublewrite_batch_size |
Scope | Global |
Dynamic | No |
SET_VAR Hint Applies |
No |
Type | Integer |
Default Value | 0 |
Minimum Value | 0 |
Maximum Value | 256 |
This variable was intended to represent the number of
doublewrite pages to write in a batch. This functionality was
replaced by
innodb_doublewrite_pages
.
For more information, see Section 17.6.4, “Doublewrite Buffer”.
Command-Line Format | --innodb-doublewrite-dir=dir_name |
---|---|
Introduced | 8.0.20 |
System Variable | innodb_doublewrite_dir |
Scope | Global |
Dynamic | No |
SET_VAR Hint Applies |
No |
Type | Directory name |
Defines the directory for doublewrite files. If no directory
is specified, doublewrite files are created in the
innodb_data_home_dir
directory, which defaults to the data directory if
unspecified.
For more information, see Section 17.6.4, “Doublewrite Buffer”.
Command-Line Format | --innodb-doublewrite-files=# |
---|---|
Introduced | 8.0.20 |
System Variable | innodb_doublewrite_files |
Scope | Global |
Dynamic | No |
SET_VAR Hint Applies |
No |
Type | Integer |
Default Value | innodb_buffer_pool_instances * 2 |
Minimum Value | 1 |
Maximum Value | 256 |
Defines the number of doublewrite files. By default, two doublewrite files are created for each buffer pool instance.
At a minimum, there are two doublewrite files. The maximum
number of doublewrite files is two times the number of buffer
pool instances. (The number of buffer pool instances is
controlled by the
innodb_buffer_pool_instances
variable.)
For more information, see Section 17.6.4, “Doublewrite Buffer”.
Command-Line Format | --innodb-doublewrite-pages=# |
---|---|
Introduced | 8.0.20 |
System Variable | innodb_doublewrite_pages |
Scope | Global |
Dynamic | No |
SET_VAR Hint Applies |
No |
Type | Integer |
Default Value | innodb_write_io_threads value |
Minimum Value | innodb_write_io_threads value |
Maximum Value | 512 |
Defines the maximum number of doublewrite pages per thread for
a batch write. If no value is specified,
innodb_doublewrite_pages
is
set to the
innodb_write_io_threads
value.
The default value changed from 4 (copied from
innodb_write_io_threads
in
8.0) to 128 in MySQL 8.4.0. This small value could cause too
many fsync operations for doublewrite operations. For related
information, see Section 10.5.8, “Optimizing InnoDB Disk I/O”.
For more information, see Section 17.6.4, “Doublewrite Buffer”.
Command-Line Format | --innodb=extend-and-initialize[={OFF|ON}] |
---|---|
Introduced | 8.0.22 |
System Variable | innodb_extend_and_initialize |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
Type | Boolean |
Default Value | ON |
Controls how space is allocated to file-per-table and general tablespaces on Linux systems.
When enabled, InnoDB
writes NULLs to newly
allocated pages. When disabled, space is allocated using
posix_fallocate()
calls, which reserve
space without physically writing NULLs.
For more information, see Section 17.6.3.8, “Optimizing Tablespace Space Allocation on Linux”.
Command-Line Format | --innodb-fast-shutdown=# |
---|---|
System Variable | innodb_fast_shutdown |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
Type | Integer |
Default Value | 1 |
Valid Values |
|
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
Command-Line Format | --innodb-fil-make-page-dirty-debug=# |
---|---|
System Variable | innodb_fil_make_page_dirty_debug |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
Type | Integer |
Default Value | 0 |
Minimum Value | 0 |
Maximum Value | 2**32-1 |
By default, setting
innodb_fil_make_page_dirty_debug
to the ID of a tablespace immediately dirties the first page
of the tablespace. If
innodb_saved_page_number_debug
is set to a non-default value, setting
innodb_fil_make_page_dirty_debug
dirties the specified page. The
innodb_fil_make_page_dirty_debug
option is only available if debugging support is compiled in
using the WITH_DEBUG
CMake option.
Command-Line Format | --innodb-file-per-table[={OFF|ON}] |
---|---|
System Variable | innodb_file_per_table |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
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 17.6.3.2, “File-Per-Table Tablespaces”. For
information about the InnoDB
system
tablespace, see Section 17.6.3.1, “The System Tablespace”.
The innodb_file_per_table
variable can be configured at runtime using a
SET
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 7.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 17.6.3.5, “Temporary Tablespaces”.
Command-Line Format | --innodb-fill-factor=# |
---|---|
System Variable | innodb_fill_factor |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
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, setting
innodb_fill_factor
to 80
reserves 20 percent of the space on each B-tree page for
future index growth. Actual percentages may vary. The
innodb_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 for TEXT
or
BLOB
entries.
For more information, see Section 17.6.2.3, “Sorted Index Builds”.
Command-Line Format | --innodb-flush-log-at-timeout=# |
---|---|
System Variable | innodb_flush_log_at_timeout |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
Type | Integer |
Default Value | 1 |
Minimum Value | 1 |
Maximum Value | 2700 |
Unit | seconds |
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 for
innodb_flush_log_at_timeout
is once per second.
innodb_flush_log_at_trx_commit
Command-Line Format | --innodb-flush-log-at-trx-commit=# |
---|---|
System Variable | innodb_flush_log_at_trx_commit |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
Type | Enumeration |
Default Value | 1 |
Valid Values |
|
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
the
innodb_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 to
N
seconds (where
N
is 1 ...
2700
, with a default value of 1). However, any
unexpected mysqld process exit can
erase up to N
seconds of
transactions.
DDL changes and other internal InnoDB
activities flush the log independently of the
innodb_flush_log_at_trx_commit
setting.
InnoDB
crash recovery
works regardless of the
innodb_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
.
For information on the combination of settings on a replica that is most resilient to unexpected halts, see Section 19.4.2, “Handling an Unexpected Halt of a Replica”.
Many 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.
Command-Line Format | --innodb-flush-method=value |
---|---|
System Variable | innodb_flush_method |
Scope | Global |
Dynamic | No |
SET_VAR Hint Applies |
No |
Type | String |
Default Value (Unix) | fsync |
Default Value (Windows) | unbuffered |
Valid Values (Unix) |
|
Valid Values (Windows) |
|
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 is
unbuffered
.
In MySQL 8.0,
innodb_flush_method
options
can be specified numerically.
The innodb_flush_method
options for Unix-like systems include:
fsync
or 0
:
InnoDB
uses the
fsync()
system call to flush both the
data and log files. fsync
is the
default setting.
O_DSYNC
or 1
:
InnoDB
uses O_SYNC
to open and flush the log files, and
fsync()
to flush the data files.
InnoDB
does not use
O_DSYNC
directly because there have
been problems with it on many varieties of Unix.
littlesync
or 2
:
This option is used for internal performance testing and
is currently unsupported. Use at your own risk.
nosync
or 3
: This
option is used for internal performance testing and is
currently unsupported. Use at your own risk.
O_DIRECT
or 4
:
InnoDB
uses O_DIRECT
(or directio()
on Solaris) to open the
data files, and uses fsync()
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
uses O_DIRECT
during flushing I/O, but skips the
fsync()
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 an fsync()
system
call to synchronize file system metadata changes, use
O_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. The fsync()
system call is still skipped after each write operation.
Data loss is possible if redo log files and data files
reside on different storage devices, and an unexpected
exit occurs before data file writes are flushed from a
device cache that is not battery-backed. If you use or
intend to use different storage devices for redo log files
and data files, and your data files reside on a device
with a cache that is not battery-backed, use
O_DIRECT
instead.
On platforms that support fdatasync()
system calls, the
innodb_use_fdatasync
variable, introduced in MySQL 8.0.26, permits
innodb_flush_method
options
that use fsync()
to use
fdatasync()
instead. An
fdatasync()
system call does not flush
changes to file metadata unless required for subsequent data
retrieval, providing a potential performance benefit.
The innodb_flush_method
options for Windows systems include:
unbuffered
or 0
:
InnoDB
uses non-buffered I/O.
Running MySQL server on a 4K sector hard drive on
Windows is not supported with
unbuffered
. The workaround is to use
innodb_flush_method=normal
.
normal
or 1
:
InnoDB
uses 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 of
fsync()
calls (or
fdatasync()
calls if
innodb_use_fdatasync
is
enabled) 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 the
InnoDB
buffer pool and the operating system
file system cache. On some systems where
InnoDB
data and log files are located on a
SAN, the default value or O_DSYNC
might be
faster for a read-heavy workload with mostly
SELECT
statements. Always test this
parameter with hardware and workload that reflect your
production environment. For general I/O tuning advice, see
Section 10.5.8, “Optimizing InnoDB Disk I/O”.
If the server is started with
--innodb-dedicated-server
, the
value of innodb_flush_method
is set automatically if it is not explicitly defined. For more
information, see Section 17.8.12, “Enabling Automatic InnoDB Configuration for a Dedicated MySQL Server”.
Command-Line Format | --innodb-flush-neighbors=# |
---|---|
System Variable | innodb_flush_neighbors |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
Type | Enumeration |
Default Value | 0 |
Valid Values |
|
Specifies whether flushing a
page from the InnoDB
buffer pool also
flushes other dirty
pages in the same
extent.
A setting of 0 disables
innodb_flush_neighbors
.
Dirty pages in the same extent are not flushed.
A setting of 1 flushes contiguous dirty pages in the same extent.
A setting of 2 flushes dirty pages in the same extent.
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 17.8.3.5, “Configuring Buffer Pool Flushing”.
Command-Line Format | --innodb-flush-sync[={OFF|ON}] |
---|---|
System Variable | innodb_flush_sync |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
Type | Boolean |
Default Value | ON |
The innodb_flush_sync
variable, which is enabled by default, causes the
innodb_io_capacity
and
innodb_io_capacity_max
settings to be ignored during bursts of I/O activity that
occur at checkpoints.
To adhere to the I/O rate defined by
innodb_io_capacity
and
innodb_io_capacity_max
,
disable innodb_flush_sync
.
For information about configuring the
innodb_flush_sync
variable,
see Section 17.8.7, “Configuring InnoDB I/O Capacity”.
Command-Line Format | --innodb-flushing-avg-loops=# |
---|---|
System Variable | innodb_flushing_avg_loops |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
Type | Integer |
Default Value | 30 |
Minimum Value | 1 |
Maximum Value | 1000 |
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 17.8.3.5, “Configuring Buffer Pool Flushing”.
Command-Line Format | --innodb-force-load-corrupted[={OFF|ON}] |
---|---|
System Variable | innodb_force_load_corrupted |
Scope | Global |
Dynamic | No |
SET_VAR Hint Applies |
No |
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.
Command-Line Format | --innodb-force-recovery=# |
---|---|
System Variable | innodb_force_recovery |
Scope | Global |
Dynamic | No |
SET_VAR Hint Applies |
No |
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 17.21.3, “Forcing InnoDB Recovery”.
Only 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
prevents
INSERT
,
UPDATE
, or
DELETE
operations when
innodb_force_recovery
is
greater than 0. An
innodb_force_recovery
setting of 4 or greater places InnoDB
into read-only mode.
These restrictions may cause replication administration
commands to fail with an error, as replication stores the
replica status logs in InnoDB
tables.
Command-Line Format | --innodb-fsync-threshold=# |
---|---|
Introduced | 8.0.13 |
System Variable | innodb_fsync_threshold |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
Type | Integer |
Default Value | 0 |
Minimum Value | 0 |
Maximum Value | 2**64-1 |
By default, when InnoDB
creates a new data
file, such as a new log file or tablespace file, the file is
fully written to the operating system cache before it is
flushed to disk, which can cause a large amount of disk write
activity to occur at once. To force smaller, periodic flushes
of data from the operating system cache, you can use the
innodb_fsync_threshold
variable to define a threshold value, in bytes. When the byte
threshold is reached, the contents of the operating system
cache are flushed to disk. The default value of 0 forces the
default behavior, which is to flush data to disk only after a
file is fully written to the cache.
Specifying a threshold 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 threshold helps avoid such surges in write activity.
System Variable | innodb_ft_aux_table |
---|---|
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
Type | String |
Specifies the qualified name of an InnoDB
table containing a FULLTEXT
index. This
variable is intended for diagnostic purposes and can only be
set at runtime. For example:
SET GLOBAL innodb_ft_aux_table = 'test/t1';
After you set this variable to a name in the format
,
the db_name
/table_name
INFORMATION_SCHEMA
tables
INNODB_FT_INDEX_TABLE
,
INNODB_FT_INDEX_CACHE
,
INNODB_FT_CONFIG
,
INNODB_FT_DELETED
, and
INNODB_FT_BEING_DELETED
show
information about the search index for the specified table.
For more information, see Section 17.15.4, “InnoDB INFORMATION_SCHEMA FULLTEXT Index Tables”.
Command-Line Format | --innodb-ft-cache-size=# |
---|---|
System Variable | innodb_ft_cache_size |
Scope | Global |
Dynamic | No |
SET_VAR Hint Applies |
No |
Type | Integer |
Default Value | 8000000 |
Minimum Value | 1600000 |
Maximum Value | 80000000 |
Unit | bytes |
The memory allocated, in bytes, for the
InnoDB
FULLTEXT
search
index cache, which holds a parsed document in memory while
creating an InnoDB
FULLTEXT
index. Index inserts and updates
are only committed to disk when the
innodb_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, see
innodb_ft_total_cache_size
.
For more information, see InnoDB Full-Text Index Cache.
Command-Line Format | --innodb-ft-enable-diag-print[={OFF|ON}] |
---|---|
System Variable | innodb_ft_enable_diag_print |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
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 is not 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
Command-Line Format | --innodb-ft-enable-stopword[={OFF|ON}] |
---|---|
System Variable | innodb_ft_enable_stopword |
Scope | Global, Session |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
Type | Boolean |
Default Value | ON |
Specifies that a set of
stopwords is associated
with an InnoDB
FULLTEXT
index at the time the index is created. If the
innodb_ft_user_stopword_table
option is set, the stopwords are taken from that table. Else,
if the
innodb_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 14.9.4, “Full-Text Stopwords”.
Command-Line Format | --innodb-ft-max-token-size=# |
---|---|
System Variable | innodb_ft_max_token_size |
Scope | Global |
Dynamic | No |
SET_VAR Hint Applies |
No |
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 14.9.6, “Fine-Tuning MySQL Full-Text Search”.
Command-Line Format | --innodb-ft-min-token-size=# |
---|---|
System Variable | innodb_ft_min_token_size |
Scope | Global |
Dynamic | No |
SET_VAR Hint Applies |
No |
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 14.9.6, “Fine-Tuning MySQL Full-Text Search”.
Command-Line Format | --innodb-ft-num-word-optimize=# |
---|---|
System Variable | innodb_ft_num_word_optimize |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
Type | Integer |
Default Value | 2000 |
Minimum Value | 1000 |
Maximum Value | 10000 |
Number of words to process during each
OPTIMIZE TABLE
operation on an
InnoDB
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 of OPTIMIZE TABLE
statements, each picking up where the last left off.
For more information, see Section 14.9.6, “Fine-Tuning MySQL Full-Text Search”.
Command-Line Format | --innodb-ft-result-cache-limit=# |
---|---|
System Variable | innodb_ft_result_cache_limit |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
Type | Integer |
Default Value | 2000000000 |
Minimum Value | 1000000 |
Maximum Value | 2**32-1 |
Unit | bytes |
The InnoDB
full-text search query result
cache limit (defined in bytes) per full-text search query or
per thread. Intermediate and final InnoDB
full-text search query results are handled in memory. Use
innodb_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
large InnoDB
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
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 Applies |
No |
Type | String |
Default Value | NULL |
This option is used to specify your own
InnoDB
FULLTEXT
index
stopword list for all InnoDB
tables. To
configure your own stopword list for a specific
InnoDB
table, use
innodb_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 and
innodb_ft_server_stopword_table
option must be configured before you create the
FULLTEXT
index.
The stopword table must be an InnoDB
table,
containing a single VARCHAR
column named
value
.
For more information, see Section 14.9.4, “Full-Text Stopwords”.
Command-Line Format | --innodb-ft-sort-pll-degree=# |
---|---|
System Variable | innodb_ft_sort_pll_degree |
Scope | Global |
Dynamic | No |
SET_VAR Hint Applies |
No |
Type | Integer |
Default Value | 2 |
Minimum Value | 1 |
Maximum Value | 16 |
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 17.6.2.4, “InnoDB Full-Text Indexes”, and
innodb_sort_buffer_size
.
Command-Line Format | --innodb-ft-total-cache-size=# |
---|---|
System Variable | innodb_ft_total_cache_size |
Scope | Global |
Dynamic | No |
SET_VAR Hint Applies |
No |
Type | Integer |
Default Value | 640000000 |
Minimum Value | 32000000 |
Maximum Value | 1600000000 |
Unit | bytes |
The total memory allocated, in bytes, for the
InnoDB
full-text search index cache for all
tables. Creating numerous tables, each with a
FULLTEXT
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.
Command-Line Format | --innodb-ft-user-stopword-table=db_name/table_name |
---|---|
System Variable | innodb_ft_user_stopword_table |
Scope | Global, Session |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
Type | String |
Default Value | NULL |
This option is used to specify your own
InnoDB
FULLTEXT
index
stopword list on a specific table. To configure your own
stopword list for all InnoDB
tables, use
innodb_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 and
innodb_ft_user_stopword_table
must be configured before you create the
FULLTEXT
index.
The stopword table must be an InnoDB
table,
containing a single VARCHAR
column named
value
.
For more information, see Section 14.9.4, “Full-Text Stopwords”.
Command-Line Format | --innodb-idle-flush-pct=# |
---|---|
Introduced | 8.0.18 |
System Variable | innodb_idle_flush_pct |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
Type | Integer |
Default Value | 100 |
Minimum Value | 0 |
Maximum Value | 100 |
Limits page flushing when InnoDB
is idle.
The innodb_idle_flush_pct
value is a percentage of the
innodb_io_capacity
setting,
which defines the number of I/O operations per second
available to InnoDB
. For more information,
see Limiting Buffer Flushing During Idle Periods.
Command-Line Format | --innodb-io-capacity=# |
---|---|
System Variable | innodb_io_capacity |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
Type | Integer |
Default Value | 200 |
Minimum Value | 100 |
Maximum Value (64-bit platforms, ≤ 8.0.37) | 2**64-1 |
Maximum Value | 2**32-1 |
The innodb_io_capacity
variable defines the number of I/O operations per second
(IOPS) available to InnoDB
background
tasks, such as flushing
pages from the buffer
pool and merging data from the
change buffer.
For information about configuring the
innodb_io_capacity
variable,
see Section 17.8.7, “Configuring InnoDB I/O Capacity”.
Command-Line Format | --innodb-io-capacity-max=# |
---|---|
System Variable | innodb_io_capacity_max |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
Type | Integer |
Default Value | 2 * innodb_io_capacity, min of 2000 |
Minimum Value | 100 |
Maximum Value (Unix, 64-bit platforms, ≤ 8.0.28) | 2**64-1 |
Maximum Value (Other) | 2**32-1 |
If flushing activity falls behind, InnoDB
can flush more aggressively, at a higher rate of I/O
operations per second (IOPS) than defined by the
innodb_io_capacity
variable.
The innodb_io_capacity_max
variable defines a maximum number of IOPS performed by
InnoDB
background tasks in such situations.
This option does not control
innodb_flush_sync
behavior.
For information about configuring the
innodb_io_capacity_max
variable, see
Section 17.8.7, “Configuring InnoDB I/O Capacity”.
innodb_limit_optimistic_insert_debug
Command-Line Format | --innodb-limit-optimistic-insert-debug=# |
---|---|
System Variable | innodb_limit_optimistic_insert_debug |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
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.
Command-Line Format | --innodb-lock-wait-timeout=# |
---|---|
System Variable | innodb_lock_wait_timeout |
Scope | Global, Session |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
Type | Integer |
Default Value | 50 |
Minimum Value | 1 |
Maximum Value | 1073741824 |
Unit | seconds |
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 another
InnoDB
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 17.21.5, “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 to InnoDB
row locks. A MySQL
table lock does not
happen inside InnoDB
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) because InnoDB
detects deadlocks immediately and rolls back one of the
deadlocked transactions. When
innodb_deadlock_detect
is
disabled, InnoDB
relies on
innodb_lock_wait_timeout
for
transaction rollback when a deadlock occurs. See
Section 17.7.5.2, “Deadlock Detection”.
innodb_lock_wait_timeout
can
be set at runtime with the SET GLOBAL
or
SET SESSION
statement. Changing the
GLOBAL
setting requires privileges
sufficient to set global system variables (see
Section 7.1.9.1, “System Variable Privileges”) and affects the
operation of all clients that subsequently connect. Any client
can change the SESSION
setting for
innodb_lock_wait_timeout
,
which affects only that client.
Command-Line Format | --innodb-log-buffer-size=# |
---|---|
System Variable | innodb_log_buffer_size |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
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 10.5.4, “Optimizing InnoDB Redo Logging”. For general I/O
tuning advice, see Section 10.5.8, “Optimizing InnoDB Disk I/O”.
innodb_log_checkpoint_fuzzy_now
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 Applies |
No |
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 the
WITH_DEBUG
CMake option.
Command-Line Format | --innodb-log-checkpoint-now[={OFF|ON}] |
---|---|
System Variable | innodb_log_checkpoint_now |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
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 the
WITH_DEBUG
CMake option.
Command-Line Format | --innodb-log-checksums[={OFF|ON}] |
---|---|
System Variable | innodb_log_checksums |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
Type | Boolean |
Default Value | ON |
Enables or disables checksums for redo log pages.
innodb_log_checksums=ON
enables the CRC-32C
checksum algorithm for
redo log pages. When
innodb_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.
Command-Line Format | --innodb-log-compressed-pages[={OFF|ON}] |
---|---|
System Variable | innodb_log_compressed_pages |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
Type | Boolean |
Default Value | ON |
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 the zlib
compression algorithm is used during recovery. If you are
certain that the zlib
version is not
subject to change, you can disable
innodb_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 the Log sequence number
(LSN) in
the LOG
section of
SHOW ENGINE
INNODB STATUS
output, or monitoring
Innodb_os_log_written
status
for the number of bytes written to the redo log files.
For related information, see Section 17.9.1.6, “Compression for OLTP Workloads”.
Command-Line Format | --innodb-log-file-size=# |
---|---|
Deprecated | 8.0.30 |
System Variable | innodb_log_file_size |
Scope | Global |
Dynamic | No |
SET_VAR Hint Applies |
No |
Type | Integer |
Default Value | 50331648 |
Minimum Value | 4194304 |
Maximum Value | 512GB / innodb_log_files_in_group |
Unit | bytes |
innodb_log_file_size
and
innodb_log_files_in_group
are deprecated in MySQL 8.0.30. These variables are
superseded by
innodb_redo_log_capacity
.
For more information, see Section 17.6.5, “Redo Log”.
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.
The minimum
innodb_log_file_size
is 4MB.
For related information, see Redo Log Configuration. For general I/O tuning advice, see Section 10.5.8, “Optimizing InnoDB Disk I/O”.
If the server is started with
--innodb-dedicated-server
, the
value of innodb_log_file_size
is set automatically if it is not explicitly defined. For more
information, see Section 17.8.12, “Enabling Automatic InnoDB Configuration for a Dedicated MySQL Server”.
Command-Line Format | --innodb-log-files-in-group=# |
---|---|
Deprecated | 8.0.30 |
System Variable | innodb_log_files_in_group |
Scope | Global |
Dynamic | No |
SET_VAR Hint Applies |
No |
Type | Integer |
Default Value | 2 |
Minimum Value | 2 |
Maximum Value | 100 |
innodb_log_file_size
and
innodb_log_files_in_group
are deprecated in MySQL 8.0.30. These variables are
superseded by
innodb_redo_log_capacity
.
For more information, see Section 17.6.5, “Redo Log”.
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 by
innodb_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 Configuration.
If the server is started with
--innodb-dedicated-server
, the
value of
innodb_log_files_in_group
is
set automatically if it is not explicitly defined. For more
information, see Section 17.8.12, “Enabling Automatic InnoDB Configuration for a Dedicated MySQL Server”.
Command-Line Format | --innodb-log-group-home-dir=dir_name |
---|---|
System Variable | innodb_log_group_home_dir |
Scope | Global |
Dynamic | No |
SET_VAR Hint Applies |
No |
Type | Directory name |
The directory path to the InnoDB
redo log files.
For related information, see Redo Log Configuration.
Command-Line Format | --innodb-log-spin-cpu-abs-lwm=# |
---|---|
System Variable | innodb_log_spin_cpu_abs_lwm |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
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 10.5.4, “Optimizing InnoDB Redo Logging”.
Command-Line Format | --innodb-log-spin-cpu-pct-hwm=# |
---|---|
System Variable | innodb_log_spin_cpu_pct_hwm |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
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 10.5.4, “Optimizing InnoDB Redo Logging”.
innodb_log_wait_for_flush_spin_hwm
Command-Line Format | --innodb-log-wait-for-flush-spin-hwm=# |
---|---|
System Variable | innodb_log_wait_for_flush_spin_hwm |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
Type | Integer |
Default Value | 400 |
Minimum Value | 0 |
Maximum Value (64-bit platforms, ≤ 8.0.37) | 2**64-1 |
Maximum Value | 2**32-1 |
Unit | microseconds |
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 10.5.4, “Optimizing InnoDB Redo Logging”.
Command-Line Format | --innodb-log-write-ahead-size=# |
---|---|
System Variable | innodb_log_write_ahead_size |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
Type | Integer |
Default Value | 8192 |
Minimum Value | 512 (log file block size) |
Maximum Value | Equal to innodb_page_size |
Unit | bytes |
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 the InnoDB
log file block
size (2n). The minimum value is the
InnoDB
log file block size (512).
Write-ahead does not occur when the minimum value is
specified. The maximum value is equal to the
innodb_page_size
value. If
you specify a value for
innodb_log_write_ahead_size
that is larger than the
innodb_page_size
value, the
innodb_log_write_ahead_size
setting is truncated to the
innodb_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 on fsync
performance
for log file writes due to several blocks being written at
once.
For related information, see Section 10.5.4, “Optimizing InnoDB Redo Logging”.
Command-Line Format | --innodb-log-writer-threads[={OFF|ON}] |
---|---|
Introduced | 8.0.22 |
System Variable | innodb_log_writer_threads |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
Type | Boolean |
Default Value | ON |
Enables dedicated log writer threads for writing redo log records from the log buffer to the system buffers and flushing the system buffers to the redo log files. Dedicated log writer threads can improve performance on high-concurrency systems, but for low-concurrency systems, disabling dedicated log writer threads provides better performance.
For more information, see Section 10.5.4, “Optimizing InnoDB Redo Logging”.
Command-Line Format | --innodb-lru-scan-depth=# |
---|---|
System Variable | innodb_lru_scan_depth |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
Type | Integer |
Default Value | 1024 |
Minimum Value | 100 |
Maximum Value (64-bit platforms, ≤ 8.0.37) | 2**64-1 |
Maximum Value | 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
adjusting
innodb_lru_scan_depth
when
changing the number of buffer pool instances, since
innodb_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 17.8.3.5, “Configuring Buffer Pool Flushing”. For general I/O tuning advice, see Section 10.5.8, “Optimizing InnoDB Disk I/O”.
Command-Line Format | --innodb-max-dirty-pages-pct=# |
---|---|
System Variable | innodb_max_dirty_pages_pct |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
Type | Numeric |
Default Value | 90 |
Minimum Value | 0 |
Maximum Value | 99.999 |
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 17.8.3.5, “Configuring Buffer Pool Flushing”.
For related information, see Section 17.8.3.5, “Configuring Buffer Pool Flushing”. For general I/O tuning advice, see Section 10.5.8, “Optimizing InnoDB Disk I/O”.
innodb_max_dirty_pages_pct_lwm
Command-Line Format | --innodb-max-dirty-pages-pct-lwm=# |
---|---|
System Variable | innodb_max_dirty_pages_pct_lwm |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
Type | Numeric |
Default Value | 10 |
Minimum Value | 0 |
Maximum Value | 99.999 |
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. The
configured value should always be lower than the
innodb_max_dirty_pages_pct
value. For more information, see
Section 17.8.3.5, “Configuring Buffer Pool Flushing”.
Command-Line Format | --innodb-max-purge-lag=# |
---|---|
System Variable | innodb_max_purge_lag |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
Type | Integer |
Default Value | 0 |
Minimum Value | 0 |
Maximum Value | 4294967295 |
Defines the desired maximum purge lag. If this value is
exceeded, a delay is imposed on
INSERT
,
UPDATE
, and
DELETE
operations to allow time
for purge to catch up. The default value is 0, which means
there is no maximum purge lag and no delay.
For more information, see Section 17.8.9, “Purge Configuration”.
Command-Line Format | --innodb-max-purge-lag-delay=# |
---|---|
System Variable | innodb_max_purge_lag_delay |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
Type | Integer |
Default Value | 0 |
Minimum Value | 0 |
Maximum Value | 10000000 |
Unit | microseconds |
Specifies the maximum delay in microseconds for the delay
imposed when the
innodb_max_purge_lag
threshold is exceeded. The specified
innodb_max_purge_lag_delay
value is an upper limit on the delay period calculated by the
innodb_max_purge_lag
formula.
For more information, see Section 17.8.9, “Purge Configuration”.
Command-Line Format | --innodb-max-undo-log-size=# |
---|---|
System Variable | innodb_max_undo_log_size |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
Type | Integer |
Default Value | 1073741824 |
Minimum Value | 10485760 |
Maximum Value | 2**64-1 |
Unit | bytes |
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
Command-Line Format | --innodb-merge-threshold-set-all-debug=# |
---|---|
System Variable | innodb_merge_threshold_set_all_debug |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
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 the WITH_DEBUG
CMake option. For related information, see
Section 17.8.11, “Configuring the Merge Threshold for Index Pages”.
Command-Line Format | --innodb-monitor-disable={counter|module|pattern|all} |
---|---|
System Variable | innodb_monitor_disable |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
Type | String |
This variable acts as a switch, disabling
InnoDB
metrics counters.
Counter data may be queried using the Information Schema
INNODB_METRICS
table. For usage
information, see
Section 17.15.6, “InnoDB INFORMATION_SCHEMA Metrics Table”.
innodb_monitor_disable='latch'
disables statistics collection for
SHOW ENGINE
INNODB MUTEX
. For more information, see
Section 15.7.7.15, “SHOW ENGINE Statement”.
Command-Line Format | --innodb-monitor-enable={counter|module|pattern|all} |
---|---|
System Variable | innodb_monitor_enable |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
Type | String |
This variable acts as a switch, enabling
InnoDB
metrics counters.
Counter data may be queried using the Information Schema
INNODB_METRICS
table. For usage
information, see
Section 17.15.6, “InnoDB INFORMATION_SCHEMA Metrics Table”.
innodb_monitor_enable='latch'
enables statistics collection for
SHOW ENGINE
INNODB MUTEX
. For more information, see
Section 15.7.7.15, “SHOW ENGINE Statement”.
Command-Line Format | --innodb-monitor-reset={counter|module|pattern|all} |
---|---|
System Variable | innodb_monitor_reset |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
Type | Enumeration |
Default Value | NULL |
Valid Values |
|
This variable acts as a switch, resetting the count value for
InnoDB
metrics counters
to zero. Counter data may be queried using the Information
Schema INNODB_METRICS
table. For
usage information, see
Section 17.15.6, “InnoDB INFORMATION_SCHEMA Metrics Table”.
innodb_monitor_reset='latch'
resets statistics reported by
SHOW ENGINE
INNODB MUTEX
. For more information, see
Section 15.7.7.15, “SHOW ENGINE Statement”.
Command-Line Format | --innodb-monitor-reset-all={counter|module|pattern|all} |
---|---|
System Variable | innodb_monitor_reset_all |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
Type | Enumeration |
Default Value | NULL |
Valid Values |
|
This variable acts as a switch, resetting all values (minimum,
maximum, and so on) for InnoDB
metrics counters.
Counter data may be queried using the Information Schema
INNODB_METRICS
table. For usage
information, see
Section 17.15.6, “InnoDB INFORMATION_SCHEMA Metrics Table”.
Command-Line Format | --innodb-numa-interleave[={OFF|ON}] |
---|---|
System Variable | innodb_numa_interleave |
Scope | Global |
Dynamic | No |
SET_VAR Hint Applies |
No |
Type | Boolean |
Default Value | OFF |
Enables the NUMA interleave memory policy for allocation of
the InnoDB
buffer pool. When
innodb_numa_interleave
is
enabled, the NUMA memory policy is set to
MPOL_INTERLEAVE
for the
mysqld process. After the
InnoDB
buffer pool is allocated, the NUMA
memory policy is set back to MPOL_DEFAULT
.
For the
innodb_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 has NUMA
support. For
more information, see
Section 2.8.7, “MySQL Source-Configuration Options”.
Command-Line Format | --innodb-old-blocks-pct=# |
---|---|
System Variable | innodb_old_blocks_pct |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
Type | Integer |
Default Value | 37 |
Minimum Value | 5 |
Maximum Value | 95 |
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 with
innodb_old_blocks_time
.
For more information, see Section 17.8.3.3, “Making the Buffer Pool Scan Resistant”. For information about buffer pool management, the LRU algorithm, and eviction policies, see Section 17.5.1, “Buffer Pool”.
Command-Line Format | --innodb-old-blocks-time=# |
---|---|
System Variable | innodb_old_blocks_time |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
Type | Integer |
Default Value | 1000 |
Minimum Value | 0 |
Maximum Value | 2**32-1 |
Unit | milliseconds |
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 17.8.3.3, “Making the Buffer Pool Scan Resistant”. For
information about buffer pool management, the
LRU algorithm, and
eviction policies, see
Section 17.5.1, “Buffer Pool”.
innodb_online_alter_log_max_size
Command-Line Format | --innodb-online-alter-log-max-size=# |
---|---|
System Variable | innodb_online_alter_log_max_size |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
Type | Integer |
Default Value | 134217728 |
Minimum Value | 65536 |
Maximum Value | 2**64-1 |
Unit | bytes |
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 of
innodb_sort_buffer_size
, up
to the maximum specified by
innodb_online_alter_log_max_size
.
If a temporary log file exceeds the upper size limit, the
ALTER 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.
Command-Line Format | --innodb-open-files=# |
---|---|
System Variable | innodb_open_files |
Scope | Global |
Dynamic (≥ 8.0.28) | Yes |
Dynamic (≤ 8.0.27) | No |
SET_VAR Hint Applies |
No |
Type | Integer |
Default Value | -1 (signifies autosizing; do not assign this literal value) |
Minimum Value | 10 |
Maximum Value | 2147483647 |
Specifies the maximum number of files that
InnoDB
can have open at one time. The
minimum value is 10. If
innodb_file_per_table
is
disabled, the default value is 300; otherwise, the default
value is 300 or the
table_open_cache
setting,
whichever is higher.
As of MySQL 8.0.28, the
innodb_open_files
limit can
be set at runtime using a SELECT
innodb_set_open_files_limit(
statement, where N
)N
is the desired
innodb_open_files
limit; for
example:
mysql> SELECT innodb_set_open_files_limit(1000);
The statement executes a stored procedure that sets the new limit. If the procedure is successful, it returns the value of the newly set limit; otherwise, a failure message is returned.
It is not permitted to set
innodb_open_files
using a
SET
statement. To set
innodb_open_files
at runtime,
use the SELECT
innodb_set_open_files_limit(
statement described above.
N
)
Setting
innodb_open_files=default
is
not supported. Only integer values are permitted.
As of MySQL 8.0.28, to prevent non-LRU manged files from
consuming the entire
innodb_open_files
limit,
non-LRU managed files are limited to 90 percent of the
innodb_open_files
limit,
which reserves 10 percent of the
innodb_open_files
limit for
LRU managed files.
Temporary tablespace files were not counted toward the
innodb_open_files
limit from
MySQL 8.0.24 to MySQL 8.0.27.
Command-Line Format | --innodb-optimize-fulltext-only[={OFF|ON}] |
---|---|
System Variable | innodb_optimize_fulltext_only |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
Type | Boolean |
Default Value | OFF |
Changes the way OPTIMIZE TABLE
operates on InnoDB
tables. Intended to be
enabled temporarily, during maintenance operations for
InnoDB
tables with
FULLTEXT
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 for
InnoDB
FULLTEXT
indexes.
For more information, see Optimizing InnoDB Full-Text Indexes.
Command-Line Format | --innodb-page-cleaners=# |
---|---|
System Variable | innodb_page_cleaners |
Scope | Global |
Dynamic | No |
SET_VAR Hint Applies |
No |
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 as
innodb_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 give
page_cleaner
threads priority over other
MySQL and InnoDB
threads to help page
flushing keep pace with the current workload.
setpriority()
support is indicated by this
InnoDB
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 the
mysql
user, you can authorize the
mysql
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 named
override.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:
$> cat /proc/mysqld_pid
/limits | grep nice
Max nice priority 18446744073709551596 18446744073709551596
Command-Line Format | --innodb-page-size=# |
---|---|
System Variable | innodb_page_size |
Scope | Global |
Dynamic | No |
SET_VAR Hint Applies |
No |
Type | Enumeration |
Default Value | 16384 |
Valid Values |
|
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 17.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 when
innodb_page_size
is set to
32KB or 64KB. For
innodb_page_size=32KB
, extent
size is 2MB. For
innodb_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 the
innodb_page_size
value. See
the innodb_data_file_path
option description for more information.
A MySQL instance using a particular InnoDB
page size cannot use data files or log files from an instance
that uses a different page size.
For general I/O tuning advice, see Section 10.5.8, “Optimizing InnoDB Disk I/O”.
Command-Line Format | --innodb-parallel-read-threads=# |
---|---|
Introduced | 8.0.14 |
System Variable | innodb_parallel_read_threads |
Scope | Session |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
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 a CHECK
TABLE
operation. The second read can be performed in
parallel. This feature does not apply to secondary index
scans. The
innodb_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 the
innodb_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.
Command-Line Format | --innodb-print-all-deadlocks[={OFF|ON}] |
---|---|
System Variable | innodb_print_all_deadlocks |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
Type | Boolean |
Default Value | OFF |
When this option is enabled, information about all
deadlocks in
InnoDB
user transactions is recorded in the
mysqld
error
log. Otherwise, you see information about only the last
deadlock, using the SHOW ENGINE INNODB
STATUS
command. An occasional
InnoDB
deadlock is not necessarily an
issue, because InnoDB
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 or SELECT ... 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 17.7.5, “Deadlocks in InnoDB”.
Command-Line Format | --innodb-print-ddl-logs[={OFF|ON}] |
---|---|
System Variable | innodb_print_ddl_logs |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
Type | Boolean |
Default Value | OFF |
Enabling this option causes MySQL to write DDL logs to
stderr
. For more information, see
Viewing DDL Logs.
Command-Line Format | --innodb-purge-batch-size=# |
---|---|
System Variable | innodb_purge_batch_size |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
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
by
innodb_purge_threads
and
assigns that number of pages to each purge thread. The
innodb_purge_batch_size
variable 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 the
innodb_purge_threads
setting.
Most users need not change
innodb_purge_batch_size
from
its default value.
For related information, see Section 17.8.9, “Purge Configuration”.
Command-Line Format | --innodb-purge-threads=# |
---|---|
System Variable | innodb_purge_threads |
Scope | Global |
Dynamic | No |
SET_VAR Hint Applies |
No |
Type | Integer |
Default Value | 4 |
Minimum Value | 1 |
Maximum Value | 32 |
The number of background threads devoted to the
InnoDB
purge operation. Increasing
the value creates additional purge threads, which can improve
efficiency on systems where
DML operations are performed
on multiple tables.
For related information, see Section 17.8.9, “Purge Configuration”.
innodb_purge_rseg_truncate_frequency
Command-Line Format | --innodb-purge-rseg-truncate-frequency=# |
---|---|
System Variable | innodb_purge_rseg_truncate_frequency |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
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 with
innodb_undo_log_truncate
. For
more information, see
Truncating Undo Tablespaces.
Command-Line Format | --innodb-random-read-ahead[={OFF|ON}] |
---|---|
System Variable | innodb_random_read_ahead |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
Type | Boolean |
Default Value | OFF |
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 17.8.3.4, “Configuring InnoDB Buffer Pool Prefetching (Read-Ahead)”. For general I/O tuning advice, see Section 10.5.8, “Optimizing InnoDB Disk I/O”.
Command-Line Format | --innodb-read-ahead-threshold=# |
---|---|
System Variable | innodb_read_ahead_threshold |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
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. If
InnoDB
reads at least
innodb_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 the
Innodb_buffer_pool_read_ahead
and
Innodb_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 of
SHOW ENGINE INNODB STATUS
and are displayed
in the BUFFER POOL AND MEMORY
section of
the SHOW ENGINE
INNODB STATUS
output.
For more information, see Section 17.8.3.4, “Configuring InnoDB Buffer Pool Prefetching (Read-Ahead)”. For general I/O tuning advice, see Section 10.5.8, “Optimizing InnoDB Disk I/O”.
Command-Line Format | --innodb-read-io-threads=# |
---|---|
System Variable | innodb_read_io_threads |
Scope | Global |
Dynamic | No |
SET_VAR Hint Applies |
No |
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
is innodb_write_io_threads
.
For more information, see
Section 17.8.5, “Configuring the Number of Background InnoDB I/O Threads”. For
general I/O tuning advice, see
Section 10.5.8, “Optimizing InnoDB Disk I/O”.
On Linux systems, running multiple MySQL servers (typically
more than 12) with default settings for
innodb_read_io_threads
,
innodb_write_io_threads
,
and the Linux aio-max-nr
setting can
exceed system limits. Ideally, increase the
aio-max-nr
setting; as a workaround, you
might reduce the settings for one or both of the MySQL
variables.
Command-Line Format | --innodb-read-only[={OFF|ON}] |
---|---|
System Variable | innodb_read_only |
Scope | Global |
Dynamic | No |
SET_VAR Hint Applies |
No |
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 17.8.2, “Configuring InnoDB for Read-Only Operation”.
Previously, enabling the
innodb_read_only
system
variable prevented creating and dropping tables only for the
InnoDB
storage engine. As of MySQL
8.0, enabling
innodb_read_only
prevents
these operations for all storage engines. Table creation and
drop operations for any storage engine modify data dictionary
tables in the mysql
system database, but
those tables use the InnoDB
storage engine
and cannot be modified when
innodb_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 use
InnoDB
. For
ANALYZE TABLE
operations
that update the key distribution, failure may occur even
if the operation updates the table itself (for example, if
it is a MyISAM
table). To obtain the
updated distribution statistics, set
information_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 the InnoDB
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
and
GRANT
fail because the
grant tables use InnoDB
.
The INSTALL PLUGIN
and
UNINSTALL PLUGIN
plugin-management statements fail because the
mysql.plugin
system table uses
InnoDB
.
The
CREATE
FUNCTION
and
DROP
FUNCTION
loadable function-management statements
fail because the mysql.func
system
table uses InnoDB
.
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 Applies |
No |
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.
Command-Line Format | --innodb-redo-log-capacity=# |
---|---|
Introduced | 8.0.30 |
System Variable | innodb_redo_log_capacity |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
Type | Integer |
Default Value | 104857600 |
Minimum Value | 8388608 |
Maximum Value (≥ 8.0.34) | 549755813888 |
Maximum Value (≥ 8.0.30, ≤ 8.0.33) | 137438953472 |
Unit | bytes |
Defines the amount of disk space occupied by redo log files.
innodb_redo_log_capacity
supercedes the
innodb_log_files_in_group
and
innodb_log_file_size
variables, which are both ignored if
innodb_redo_log_capacity
is defined.
If innodb_redo_log_capacity
is not defined,
and if neither innodb_log_file_size
or
innodb_log_files_in_group
are defined, then
the default innodb_redo_log_capacity
value
is used.
If innodb_redo_log_capacity
is not defined,
and if innodb_log_file_size
and/or
innodb_log_files_in_group
is defined, then
the InnoDB redo log capacity is calculated as
(innodb_log_files_in_group *
innodb_log_file_size). This calculation does not
modify the unused innodb_redo_log_capacity
setting's value.
The
Innodb_redo_log_capacity_resized
server status variable indicates the total redo log capacity
for all redo log files.
If the server is started with
--innodb-dedicated-server
, the
value of
innodb_redo_log_capacity
is
set automatically if it is not explicitly defined. For more
information, see Section 17.8.12, “Enabling Automatic InnoDB Configuration for a Dedicated MySQL Server”.
For more information, see Section 17.6.5, “Redo Log”.
Command-Line Format | --innodb-redo-log-encrypt[={OFF|ON}] |
---|---|
System Variable | innodb_redo_log_encrypt |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
Type | Boolean |
Default Value | OFF |
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.
Command-Line Format | --innodb-replication-delay=# |
---|---|
System Variable | innodb_replication_delay |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
Type | Integer |
Default Value | 0 |
Minimum Value | 0 |
Maximum Value | 4294967295 |
Unit | milliseconds |
The replication thread delay in milliseconds on a replica
server if
innodb_thread_concurrency
is
reached.
Command-Line Format | --innodb-rollback-on-timeout[={OFF|ON}] |
---|---|
System Variable | innodb_rollback_on_timeout |
Scope | Global |
Dynamic | No |
SET_VAR Hint Applies |
No |
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 causes
InnoDB
to abort and roll back the entire
transaction.
For more information, see Section 17.21.5, “InnoDB Error Handling”.
Command-Line Format | --innodb-rollback-segments=# |
---|---|
System Variable | innodb_rollback_segments |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
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 the InnoDB
page size and the
number of undo logs assigned to each transaction. For more
information, see Section 17.6.6, “Undo Logs”.
For related information, see Section 17.3, “InnoDB Multi-Versioning”. For information about undo tablespaces, see Section 17.6.3.4, “Undo Tablespaces”.
innodb_saved_page_number_debug
Command-Line Format | --innodb-saved-page-number-debug=# |
---|---|
System Variable | innodb_saved_page_number_debug |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
Type | Integer |
Default Value | 0 |
Minimum Value | 0 |
Maximum Value | 2**32-1 |
Saves a page number. Setting the
innodb_fil_make_page_dirty_debug
option dirties the page defined by
innodb_saved_page_number_debug
.
The
innodb_saved_page_number_debug
option is only available if debugging support is compiled in
using the WITH_DEBUG
CMake option.
Command-Line Format | --innodb-segment-reserve-factor=# |
---|---|
Introduced | 8.0.26 |
System Variable | innodb_segment_reserve_factor |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
Type | Numeric |
Default Value | 12.5 |
Minimum Value | 0.03 |
Maximum Value | 40 |
Defines the percentage of tablespace file segment pages
reserved as empty pages. The setting is applicable to
file-per-table and general tablespaces. The
innodb_segment_reserve_factor
default setting is 12.5 percent, which is the same percentage
of pages reserved in previous MySQL releases.
For more information, see Configuring the Percentage of Reserved File Segment Pages.
Command-Line Format | --innodb-sort-buffer-size=# |
---|---|
System Variable | innodb_sort_buffer_size |
Scope | Global |
Dynamic | No |
SET_VAR Hint Applies |
No |
Type | Integer |
Default Value | 1048576 |
Minimum Value | 65536 |
Maximum Value | 67108864 |
Unit | bytes |
This variable defines:
The sort buffer size for online DDL operations that create
or rebuild secondary indexes. However, as of MySQL 8.0.27,
this responsibility is subsumed by the
innodb_ddl_buffer_size
variable.
The amount by which the temporary log file is extended when recording concurrent DML during an online DDL operation, and the size of the temporary log file read buffer and write buffer.
For related information, see Section 17.12.3, “Online DDL Space Requirements”.
Command-Line Format | --innodb-spin-wait-delay=# |
---|---|
System Variable | innodb_spin_wait_delay |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
Type | Integer |
Default Value | 6 |
Minimum Value | 0 |
Maximum Value (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 17.8.8, “Configuring Spin Lock Polling”.
innodb_spin_wait_pause_multiplier
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 Applies |
No |
Type | Integer |
Default Value | 50 |
Minimum Value | 0 |
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 17.8.8, “Configuring Spin Lock Polling”.
Command-Line Format | --innodb-stats-auto-recalc[={OFF|ON}] |
---|---|
System Variable | innodb_stats_auto_recalc |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
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 the
innodb_stats_persistent
option is enabled. Automatic statistics recalculation may also
be configured by specifying
STATS_AUTO_RECALC=1
in a
CREATE TABLE
or
ALTER TABLE
statement. The
amount of data sampled to produce the statistics is controlled
by the
innodb_stats_persistent_sample_pages
variable.
For more information, see Section 17.8.10.1, “Configuring Persistent Optimizer Statistics Parameters”.
innodb_stats_include_delete_marked
Command-Line Format | --innodb-stats-include-delete-marked[={OFF|ON}] |
---|---|
System Variable | innodb_stats_include_delete_marked |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
Type | Boolean |
Default Value | OFF |
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 than
READ UNCOMMITTED
. To avoid
this scenario,
innodb_stats_include_delete_marked
can be enabled to ensure that InnoDB
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 all InnoDB
tables. It is only applicable to persistent optimizer
statistics.
For related information, see Section 17.8.10.1, “Configuring Persistent Optimizer Statistics Parameters”.
Command-Line Format | --innodb-stats-method=value |
---|---|
System Variable | innodb_stats_method |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
Type | Enumeration |
Default Value | nulls_equal |
Valid Values |
|
How the server treats NULL
values when
collecting statistics
about the distribution of index values for
InnoDB
tables. Permitted values are
nulls_equal
,
nulls_unequal
, and
nulls_ignored
. For
nulls_equal
, all NULL
index values are considered equal and form a single value
group with a size equal to the number of
NULL
values. For
nulls_unequal
, NULL
values are considered unequal, and each
NULL
forms a distinct value group of size
1. For nulls_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 10.3.8, “InnoDB and MyISAM Index Statistics Collection”.
Command-Line Format | --innodb-stats-on-metadata[={OFF|ON}] |
---|---|
System Variable | innodb_stats_on_metadata |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
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 with
STATS_PERSISTENT=0
. For more information,
see Section 17.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 as SHOW TABLE
STATUS
or when accessing the Information Schema
TABLES
or
STATISTICS
tables. (These updates
are similar to what happens for ANALYZE
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 involve
InnoDB
tables.
To change the setting, issue the statement SET GLOBAL
innodb_stats_on_metadata=
,
where mode
is
either mode
ON
or OFF
(or
1
or 0
). Changing the
setting requires privileges sufficient to set global system
variables (see Section 7.1.9.1, “System Variable Privileges”)
and immediately affects the operation of all connections.
Command-Line Format | --innodb-stats-persistent[={OFF|ON}] |
---|---|
System Variable | innodb_stats_persistent |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
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 set
innodb_stats_persistent
at
the global level before creating a table, or use the
STATS_PERSISTENT
clause of the
CREATE TABLE
and
ALTER TABLE
statements to
override the system-wide setting and configure persistent
statistics for individual tables.
For more information, see Section 17.8.10.1, “Configuring Persistent Optimizer Statistics Parameters”.
innodb_stats_persistent_sample_pages
Command-Line Format | --innodb-stats-persistent-sample-pages=# |
---|---|
System Variable | innodb_stats_persistent_sample_pages |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
Type | Integer |
Default Value | 20 |
Minimum Value | 1 |
Maximum Value | 18446744073709551615 |
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 of ANALYZE TABLE
for an InnoDB
table. For more information,
see Section 17.8.10.1, “Configuring Persistent Optimizer Statistics Parameters”.
Setting a high value for
innodb_stats_persistent_sample_pages
could result in lengthy ANALYZE
TABLE
execution time. To estimate the number of
database pages accessed by ANALYZE
TABLE
, see
Section 17.8.10.3, “Estimating ANALYZE TABLE Complexity for InnoDB Tables”.
innodb_stats_persistent_sample_pages
only applies when
innodb_stats_persistent
is
enabled for a table; when
innodb_stats_persistent
is
disabled,
innodb_stats_transient_sample_pages
applies instead.
innodb_stats_transient_sample_pages
Command-Line Format | --innodb-stats-transient-sample-pages=# |
---|---|
System Variable | innodb_stats_transient_sample_pages |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
Type | Integer |
Default Value | 8 |
Minimum Value | 1 |
Maximum Value | 18446744073709551615 |
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 an
InnoDB
table or recalculating statistics.
For more information, see
Section 17.8.10.2, “Configuring Non-Persistent Optimizer Statistics Parameters”.
Setting a high value for
innodb_stats_transient_sample_pages
could result in lengthy ANALYZE
TABLE
execution time. To estimate the number of
database pages accessed by ANALYZE
TABLE
, see
Section 17.8.10.3, “Estimating ANALYZE TABLE Complexity for InnoDB Tables”.
innodb_stats_transient_sample_pages
only applies when
innodb_stats_persistent
is
disabled for a table; when
innodb_stats_persistent
is
enabled,
innodb_stats_persistent_sample_pages
applies instead. Takes the place of
innodb_stats_sample_pages
.
For more information, see
Section 17.8.10.2, “Configuring Non-Persistent Optimizer Statistics Parameters”.
Command-Line Format | --innodb-status-output[={OFF|ON}] |
---|---|
System Variable | innodb_status_output |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
Type | Boolean |
Default Value | OFF |
Enables or disables periodic output for the standard
InnoDB
Monitor. Also used in combination
with
innodb_status_output_locks
to
enable or disable periodic output for the
InnoDB
Lock Monitor. For more information,
see Section 17.17.2, “Enabling InnoDB Monitors”.
Command-Line Format | --innodb-status-output-locks[={OFF|ON}] |
---|---|
System Variable | innodb_status_output_locks |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
Type | Boolean |
Default Value | OFF |
Enables or disables the InnoDB
Lock
Monitor. When enabled, the InnoDB
Lock
Monitor prints additional information about locks in
SHOW ENGINE INNODB STATUS
output and in
periodic output printed to the MySQL error log. Periodic
output for the InnoDB
Lock Monitor is
printed as part of the standard InnoDB
Monitor output. The standard InnoDB
Monitor
must therefore be enabled for the InnoDB
Lock Monitor to print data to the MySQL error log
periodically. For more information, see
Section 17.17.2, “Enabling InnoDB Monitors”.
Command-Line Format | --innodb-strict-mode[={OFF|ON}] |
---|---|
System Variable | innodb_strict_mode |
Scope | Global, Session |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
Type | Boolean |
Default Value | ON |
When innodb_strict_mode
is
enabled, InnoDB
returns errors rather than
warnings when checking for invalid or incompatible table
options.
It checks that KEY_BLOCK_SIZE
,
ROW_FORMAT
, DATA
DIRECTORY
, TEMPORARY
, and
TABLESPACE
options are compatible with each
other and other settings.
innodb_strict_mode=ON
also enables a row
size check when creating or altering a table, to prevent
INSERT
or UPDATE
from
failing due to the record being too large for the selected
page size.
You can enable or disable
innodb_strict_mode
on the
command line when starting mysqld
, or in a
MySQL configuration
file. You can also enable or disable
innodb_strict_mode
at runtime
with the statement SET [GLOBAL|SESSION]
innodb_strict_mode=
,
where mode
is
either mode
ON
or OFF
.
Changing the GLOBAL
setting requires
privileges sufficient to set global system variables (see
Section 7.1.9.1, “System Variable Privileges”) and affects the
operation of all clients that subsequently connect. Any client
can change the SESSION
setting for
innodb_strict_mode
, and the
setting affects only that client.
As of MySQL 8.0.26, setting the session value of this system variable is a restricted operation. The session user must have privileges sufficient to set restricted session variables. See Section 7.1.9.1, “System Variable Privileges”.
Command-Line Format | --innodb-sync-array-size=# |
---|---|
System Variable | innodb_sync_array_size |
Scope | Global |
Dynamic | No |
SET_VAR Hint Applies |
No |
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.
Command-Line Format | --innodb-sync-spin-loops=# |
---|---|
System Variable | innodb_sync_spin_loops |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
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.
Command-Line Format | --innodb-sync-debug[={OFF|ON}] |
---|---|
System Variable | innodb_sync_debug |
Scope | Global |
Dynamic | No |
SET_VAR Hint Applies |
No |
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 the
WITH_DEBUG
CMake option.
Command-Line Format | --innodb-table-locks[={OFF|ON}] |
---|---|
System Variable | innodb_table_locks |
Scope | Global, Session |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
Type | Boolean |
Default Value | ON |
If autocommit = 0
,
InnoDB
honors LOCK
TABLES
; MySQL does not return from LOCK
TABLES ... WRITE
until all other threads have
released all their locks to the table. The default value of
innodb_table_locks
is 1,
which means that LOCK TABLES
causes InnoDB to lock a table internally if
autocommit = 0
.
innodb_table_locks = 0
has no
effect for tables locked explicitly with
LOCK TABLES ...
WRITE
. It does have an effect for tables locked for
read or write by
LOCK TABLES ...
WRITE
implicitly (for example, through triggers) or
by LOCK TABLES
... READ
.
For related information, see Section 17.7, “InnoDB Locking and Transaction Model”.
Command-Line Format | --innodb-temp-data-file-path=file_name |
---|---|
System Variable | innodb_temp_data_file_path |
Scope | Global |
Dynamic | No |
SET_VAR Hint Applies |
No |
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 named ibtmp1
in the
innodb_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
and max
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
or
G
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
and max
attributes can be used only for the data file specified last
in the
innodb_temp_data_file_path
setting. For example:
[mysqld] innodb_temp_data_file_path=ibtmp1:50M;ibtmp2:12M:autoextend:max:500M
The autoextend
option causes the data file
to automatically increase in size when it runs out of free
space. The autoextend
increment is 64MB by
default. To modify the increment, change the
innodb_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
and
innodb_temp_data_file_path
.
Before running InnoDB
in read-only mode,
set
innodb_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.
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 Applies |
No |
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 the
internal_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.
Command-Line Format | --innodb-thread-concurrency=# |
---|---|
System Variable | innodb_thread_concurrency |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
Type | Integer |
Default Value | 0 |
Minimum Value | 0 |
Maximum Value | 1000 |
Defines the maximum number of threads permitted inside of
InnoDB
. A value of 0 (the default) is
interpreted as infinite concurrency (no limit). This variable
is intended for performance tuning on high concurrency
systems.
InnoDB
tries to keep the number of threads
inside InnoDB
less than or equal to the
innodb_thread_concurrency
limit. Threads waiting for locks are not counted in the number
of concurrently executing threads.
The correct setting depends on workload and computing
environment. 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. Test a
range of values to determine the setting that provides the
best performance.
innodb_thread_concurrency
is
a dynamic variable, which permits experimenting with different
settings on a live test system. If a particular setting
performs poorly, you can quickly set
innodb_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
consistently small and does not affect performance, set
innodb_thread_concurrency=0
(no limit).
If your workload is consistently heavy or occasionally
spikes, set an
innodb_thread_concurrency
value and adjust it until you find the number of threads
that provides the best performance. For example, suppose
that your system typically has 40 to 50 users, but
periodically the number increases to 60, 70, or more.
Through testing, you find that performance remains largely
stable with a limit of 80 concurrent users. In this case,
set
innodb_thread_concurrency
to 80.
If you do not want InnoDB
to use more
than a certain number of virtual CPUs for user threads (20
virtual CPUs, for example), set
innodb_thread_concurrency
to this number (or possibly lower, depending on
performance testing). If your goal is to isolate MySQL
from other applications, consider binding the
mysqld
process exclusively to the
virtual CPUs. Be aware, however, that exclusive binding
can result in non-optimal hardware usage if the
mysqld
process is not consistently
busy. In this case, you can bind the
mysqld
process to the virtual CPUs but
allow other applications to use some or all of the virtual
CPUs.
From 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.
In some cases, the optimal
innodb_thread_concurrency
setting can be smaller than the number of virtual CPUs.
An
innodb_thread_concurrency
value that is too high can cause performance regression
due to increased contention on system internals and
resources.
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.
A value of 0 disables the queries inside
InnoDB
and queries in queue
counters in the ROW OPERATIONS
section of
SHOW ENGINE INNODB STATUS
output.
For related information, see Section 17.8.4, “Configuring Thread Concurrency for InnoDB”.
Command-Line Format | --innodb-thread-sleep-delay=# |
---|---|
System Variable | innodb_thread_sleep_delay |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
Type | Integer |
Default Value | 10000 |
Minimum Value | 0 |
Maximum Value | 1000000 |
Unit | microseconds |
How long InnoDB
threads sleep before
joining the InnoDB
queue, in microseconds.
The default value is 10000. A value of 0 disables sleep. You
can set
innodb_adaptive_max_sleep_delay
to the highest value you would allow for
innodb_thread_sleep_delay
,
and InnoDB
automatically adjusts
innodb_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 17.8.4, “Configuring Thread Concurrency for InnoDB”.
Command-Line Format | --innodb-tmpdir=dir_name |
---|---|
System Variable | innodb_tmpdir |
Scope | Global, Session |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
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. The
innodb_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 when
innodb_tmpdir
is configured
using a
SET
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 online
ALTER TABLE
operation reports
an error if innodb_tmpdir
is
set to an invalid directory.
innodb_tmpdir
overrides the
MySQL tmpdir
setting but only
for online ALTER TABLE
operations.
The FILE
privilege is required to configure
innodb_tmpdir
.
The innodb_tmpdir
option was
introduced to help avoid overflowing a temporary file
directory located on a tmpfs
file system.
Such overflows could occur as a result of large temporary sort
files created during online ALTER
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 the innodb_tmpdir
setting could result in a replication failure when running
online ALTER TABLE
operations
that rebuild the table. If server operating environments
differ, it is recommended that you configure
innodb_tmpdir
on each server
individually.
For more information, see
Section 17.12.3, “Online DDL Space Requirements”. For
information about online ALTER
TABLE
operations, see
Section 17.12, “InnoDB and Online DDL”.
innodb_trx_purge_view_update_only_debug
Command-Line Format | --innodb-trx-purge-view-update-only-debug[={OFF|ON}] |
---|---|
System Variable | innodb_trx_purge_view_update_only_debug |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
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.
Command-Line Format | --innodb-trx-rseg-n-slots-debug=# |
---|---|
System Variable | innodb_trx_rseg_n_slots_debug |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
Type | Integer |
Default Value | 0 |
Minimum Value | 0 |
Maximum Value | 1024 |
Sets a debug flag that limits
TRX_RSEG_N_SLOTS
to a given value for the
trx_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 the
WITH_DEBUG
CMake option.
Command-Line Format | --innodb-undo-directory=dir_name |
---|---|
System Variable | innodb_undo_directory |
Scope | Global |
Dynamic | No |
SET_VAR Hint Applies |
No |
Type | Directory name |
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
and
innodb_undo_002
) created when the MySQL
instance is initialized always reside in the directory defined
by the innodb_undo_directory
variable.
Undo tablespaces created using
CREATE UNDO
TABLESPACE
syntax are created in the directory
defined by the
innodb_undo_directory
variable if a different path is not specified.
For more information, see Section 17.6.3.4, “Undo Tablespaces”.
Command-Line Format | --innodb-undo-log-encrypt[={OFF|ON}] |
---|---|
System Variable | innodb_undo_log_encrypt |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
Type | Boolean |
Default Value | OFF |
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 17.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.
Command-Line Format | --innodb-undo-log-truncate[={OFF|ON}] |
---|---|
System Variable | innodb_undo_log_truncate |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
Type | Boolean |
Default Value | ON |
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.
Command-Line Format | --innodb-undo-tablespaces=# |
---|---|
Deprecated | Yes |
System Variable | innodb_undo_tablespaces |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
Type | Integer |
Default Value | 2 |
Minimum Value | 2 |
Maximum Value | 127 |
Defines the number of
undo tablespaces
used by InnoDB
. The default and minimum
value is 2.
The innodb_undo_tablespaces
variable is deprecated and is no longer configurable as of
MySQL 8.0.14. Expect it to be removed in a future release.
For more information, see Section 17.6.3.4, “Undo Tablespaces”.
Command-Line Format | --innodb-use-fdatasync[={OFF|ON}] |
---|---|
Introduced | 8.0.26 |
System Variable | innodb_use_fdatasync |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies |
No |
Type | Boolean |
Default Value | OFF |
On platforms that support fdatasync()
system calls, enabling the
innodb_use_fdatasync
variable
permits using fdatasync()
instead of
fsync()
system calls for operating system
flushes. An fdatasync()
call does not flush
changes to file metadata unless required for subsequent data
retrieval, providing a potential performance benefit.
A subset of
innodb_flush_method
settings
such as fsync
, O_DSYNC
,
and O_DIRECT
use fsync()
system calls. The
innodb_use_fdatasync
variable
is applicable when using those settings.
Command-Line Format | --innodb-use-native-aio[={OFF|ON}] |
---|---|
System Variable | innodb_use_native_aio |
Scope | Global |
Dynamic | No |
SET_VAR Hint Applies |
No |
Type | Boolean |
Default Value | ON |
Specifies whether to use the asynchronous I/O subsystem. This variable cannot be changed while the server is running. Normally, you do not need to configure this option, because it is enabled by default.
This feature improves the scalability of heavily I/O-bound
systems, which typically show many pending reads/writes in
SHOW ENGINE INNODB STATUS
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 with
innodb_use_native_aio=0
. This
option may also be disabled automatically during startup if
InnoDB
detects a potential problem such as
a combination of tmpdir
location,
tmpfs
file system, and Linux kernel that
does not support AIO on tmpfs
.
For more information, see Section 17.8.6, “Using Asynchronous I/O on Linux”.
innodb_validate_tablespace_paths
Command-Line Format | --innodb-validate-tablespace-paths[={OFF|ON}] |
---|---|
Introduced | 8.0.21 |
System Variable | innodb_validate_tablespace_paths |
Scope | Global |
Dynamic | No |
SET_VAR Hint Applies |
No |
Type | Boolean |
Default Value | ON |
Controls tablespace file path validation. At startup,
InnoDB
validates the paths of known
tablespace files against tablespace file paths stored in the
data dictionary in case tablespace files have been moved to a
different location. The
innodb_validate_tablespace_paths
variable permits disabling tablespace path validation. This
feature is intended for environments where tablespaces files
are not moved. Disabling path validation improves startup time
on systems with a large number of tablespace files.
Starting the server with tablespace path validation disabled after moving tablespace files can lead to undefined behavior.
For more information, see Section 17.6.3.7, “Disabling Tablespace Path Validation”.
The InnoDB
version number. In MySQL
8.0, separate version numbering for
InnoDB
does not apply and this value is the
same the version
number of
the server.
Command-Line Format | --innodb-write-io-threads=# |
---|---|
System Variable | innodb_write_io_threads |
Scope | Global |
Dynamic | No |
SET_VAR Hint Applies |
No |
Type | Integer |
Default Value | 4 |
Minimum Value | 1 |
Maximum Value | 64 |
The number of I/O threads for write operations in
InnoDB
. The default value is 4. Its
counterpart for read threads is
innodb_read_io_threads
. For
more information, see
Section 17.8.5, “Configuring the Number of Background InnoDB I/O Threads”. For
general I/O tuning advice, see
Section 10.5.8, “Optimizing InnoDB Disk I/O”.
On Linux systems, running multiple MySQL servers (typically
more than 12) with default settings for
innodb_read_io_threads
,
innodb_write_io_threads
,
and the Linux aio-max-nr
setting can
exceed system limits. Ideally, increase the
aio-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 10.5.8, “Optimizing InnoDB Disk I/O”.