Skip to content

Improved NUMA support

In cases where the buffer pool memory allocation is bigger than the size of the node, the system starts swapping already allocated memory, even if memory is available on another node. This happens if the default NUMA memory allocation policy is selected. In that case, the system favors one node more than another, which causes the node to run out of memory. If the allocation policy is interleaving, the memory is allocated in a round-robin fashion over the available node. This method uses the upstream innodb_numa_interleave. This feature extends the upstream implementation by implementing the flush_caches variable.

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

Version Specific Information

Percona Server for MySQL 5.7.10-1: Feature ported from Percona Server for MySQL 5.6

Percona Server 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

flush_caches

Option Description
Command-line Yes
Config file Yes
Location mysqld_safe
Dynamic No
Data type Boolean
Default 0 (OFF)
Range 0/1

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.