Improved NUMA support

In cases where the buffer pool memory allocation was bigger than size of the node, system would start swapping already allocated memory even if there is available memory on other node. This is would happen if the default NUMA memory allocation policy was selected. In that case system would favor one node more than other which caused the node to run out of memory. Changing the allocation policy to interleaving, memory will be allocated in round-robin fashion over the available node. This can be done by using the upstream innodb_numa_interleave. This feature extends the upstream implementation by implementing the flush_caches variable.

It is generally recommended to enable all of the options together to maximize the performance effects on the NUMA architecture.

Version Specific Information

  • 5.7.10-1:
    Feature ported from Percona Server for MySQL 5.6
  • 5.7.22-22:
    Feature reverted from the upstream implementation back to the one ported from Percona Server for MySQL 5.6, in which innodb_numa_interleave variable not only enables NUMA memory interleaving at InnoDB buffer pool allocation, but allocates buffer pool with MAP_POPULATE, forcing interleaved allocation at the buffer pool initialization time.

Command-line Options for mysqld_safe

variable flush_caches
Command Line:Yes
Config File:Yes
Variable Type:Boolean
Default Value:0 (OFF)

When enabled (set to 1) this will flush and purge buffers/caches before starting the server to help ensure NUMA allocation fairness across nodes. This option is useful for establishing a consistent and predictable behavior for normal usage and/or benchmarking.

Contact Us

For free technical help, visit the Percona Community Forum.
To report bugs or submit feature requests, open a JIRA ticket.
For paid support and managed or professional services, contact Percona Sales.