Various people have complained about Linux swapping unexpectedly on boxes running mysqld, when apparently mysqld was not using all the memory and there was quite a bit of free memory available.
There’s also an article by Jeremy Cole. However, his solution requires a one-line change to mysqld_safe which while it’s small does not work very well if you have to maintain a large number of servers and are using packages asa package upgrade will overwrite the modified file mysqld_safe and then restart mysqld with the unmodified script. This leads to the need to repatch the script and then restart mysqld. Not very helpful.
So I was looking for another solution and came up with this option which basically requires a minor change to /etc/my.cnf and the use of a small shell wrapper script. The change to my.cnf is simply to add the following to the [mysqld_safe] section:
[mysqld_safe] ... other options you might be using ... ledir=/directory/containing/mysqld_using_numactl # wrapper around mysqld mysqld=mysqld_using_numactl
The wrapper script is little more than:
#!/bin/sh # work around to startup mysqld using numactl numactl=/usr/bin/numactl # Adjust the path as needed mysqld=/usr/sbin/mysqld # Adjust the path as needed # use exec to avoid having an extra shell around. exec $numactl --interleave all $mysqld "$@"
This minor change means that you can still use the standard mysql scripts and they will work even after an upgrade to a new rpm or other type of package. So if you’ve seen your mysql server swapping when you think you have the memory settings correctly adjusted and have been trying to figure out how to easily adjust the configuration to try out numactl to see if this improves things this seems to be an easier way of doing it.