MySQLTuner is a script written in Perl that will assist you with your MySQL configuration and make recommendations for increased performance and stability.
The variable $physical_memory is correctly assigned from forcemem and converted to bytes early in sub os_setup (line 523).
$physical_memory = $opt{'forcemem'} * 1048576;
But then on line 598 it is reassigned (overwritten) from a forcemem value, if existing, without converting it to bytes.
$physical_memory=$opt{forcemem} if (defined($opt{forcemem}) and $opt{forcemem} gt 0);
This leads to a problem when converted/rounded back to KB, MB or GB in hr_bytes. Now because of the reassignment $physical_memory has the MB value, but hr_bytes treats that value as bytes.
This will lead to incorrectly determining the Physical memory. For example if a user passes --forcemem 2000, the hr_bytes will convert that to 2.0K, thinking 2000 is bytes, and the result in the console will be:
[--] Physical Memory: 2.0K
And ultimately because of this, mysqltuner will give wrong suggestions about the memory consumption:
*** MySQL's maximum memory usage is dangerously high ***
*** Add RAM before increasing MySQL buffer variables ***
Closes #779
The variable
$physical_memory
is correctly assigned fromforcemem
and converted to bytes early insub os_setup
(line 523).But then on line 598 it is reassigned (overwritten) from a
forcemem
value, if existing, without converting it to bytes.This leads to a problem when converted/rounded back to KB, MB or GB in
hr_bytes
. Now because of the reassignment$physical_memory
has the MB value, buthr_bytes
treats that value as bytes.This will lead to incorrectly determining the Physical memory. For example if a user passes
--forcemem 2000
, thehr_bytes
will convert that to 2.0K, thinking 2000 is bytes, and the result in the console will be:And ultimately because of this,
mysqltuner
will give wrong suggestions about the memory consumption: