Improved InnoDB I/O Scalability¶
Because InnoDB is a complex storage engine it must be configured properly in order to perform at its best. Some points are not configurable in standard InnoDB. The goal of this feature is to provide a more exhaustive set of options for XtraDB.
Version Specific Information¶
- Percona Server for MySQL 5.7.10-1: Feature ported from Percona Server for MySQL 5.6
System Variables¶
innodb_use_global_flush_log_at_trx_commit
¶
Option | Description |
---|---|
Command-line | Yes |
Config File | Yes |
Scope | Global |
Dynamic | Yes |
Data type | Boolean |
Default | True |
Range | True/False |
This variable enables or disables the effect of the per-session value of the innodb_flush_log_at_trx_commit variable.
If the global variable innodb_use_global_flush_log_at_trx_commit is
set to 1
, the session uses the current
global value of innodb_flush_log_at_trx_commit. This is the
upstream-compatible mode. If the user attempts to change the
innodb_flush_log_at_trx_commit value for a
session, the session value is ignored.
If the global variable innodb_use_global_flush_log_at_trx_commit is set to
0
, a user can modify the
innodb_flush_log_at_trx_commit
per-session using the following command:
SET SESSION innodb_flush_log_at_trx_commit=0
This modification only affects the transactions in that session. Other sessions,
if they have not been individually modified, continue to use the
global innodb_use_flush_log_at_trx_commit
value.
SET innodb_use_global_flush_log_at_trx_commit=1
innodb_flush_method
¶
Option | Description |
---|---|
Command-line | Yes |
Config File | Yes |
Scope | Global |
Dynamic | No |
Data type | Enumeration |
Default | fdatasync |
Allowed values | fdatasync, O_DSYNC, O_DIRECT, O_DIRECT_NO_FSYNC, ALL_O_DIRECT |
The variable was ported from Percona Server for MySQL 5.6 in Percona Server for MySQL 5.7.10-3. This is an existing MySQL 5.7 system variable that has a new allowed value ALL_O_DIRECT
. It determines the method InnoDB uses to flush its data and log files. (See innodb_flush_method in the MySQL 5.7 Reference Manual).
The following values are allowed:
-
fdatasync
: usefsync()
to flush data, log, and parallel doublewrite files. -
O_SYNC
: useO_SYNC
to open and flush the log and parallel doublewrite files; usefsync()
to flush the data files. Do not usefsync()
to flush the parallel doublewrite file. -
O_DIRECT
: use O_DIRECT to open the data files andfsync()
system call to flush data, log, and parallel doublewrite files. -
O_DIRECT_NO_FSYNC
: use O_DIRECT to open the data files and parallel doublewrite files, but does not use thefsync()
system call to flush the data files, log files, and parallel doublewrite files. This option isn’t suitable for XFS file system. -
ALL_O_DIRECT
: use O_DIRECT to open data files, log files, and parallel doublewrite files and usefsync()
to flush the data files but not the log files or parallel doublewrite files. This option is recommended when InnoDB log files are big (more than 8GB), otherwise, there may be performance degradation. Note: On ext4 filesystem, setinnodb_log_write_ahead_size
. This variable should match the filesystem’s write-ahead block size and avoids theunaligned AIO/DIO
warnings.
Status Variables¶
The following information has been added to SHOW ENGINE INNODB STATUS
to confirm the checkpoint activity:
The max checkpoint age
The current checkpoint age target
The current age of the oldest page modification which has not been flushed to disk yet.
The current age of the last checkpoint
...
---
LOG
---
Log sequence number 0 1059494372
Log flushed up to 0 1059494372
Last checkpoint at 0 1055251010
Max checkpoint age 162361775
Checkpoint age target 104630090
Modified age 4092465
Checkpoint age 4243362
0 pending log writes, 0 pending chkp writes
...