MySQLでInnoDBの設定値から必要なメモリ量を算出するスクリプト

InnoDBを使用している時にMySQLが必要とするメモリ量は下記の値と言われています。

innodb_buffer_pool + key_buffer
 + max_connections * (sort_buffer + read_buffer + read_rnd_buffer)
 + max_connections * stack_size

この値をMySQLのShow Variablesコマンドで得られる結果から算出するスクリプトです。 一度サーバー側でShow Variablesを発行しますので、運用中のサーバーで 実行する場合はご注意ください。

 

#!/bin/sh
MYSQL="mysql -uroot -pXXXXXXXX"

VARIABLES_FILE="/tmp/mysql_variables"
echo "SHOW VARIABLES;" | ${MYSQL} > ${VARIABLES_FILE}
innodb_buffer_pool=`grep '^innodb_buffer_pool_size' ${VARIABLES_FILE} | cut -f 2`
key_buffer=`grep '^key_buffer_size' ${VARIABLES_FILE} | cut -f 2`
max_connections=`grep '^max_connections' ${VARIABLES_FILE} | cut -f 2`
sort_buffer=`grep '^sort_buffer_size' ${VARIABLES_FILE} | cut -f 2`
read_buffer=`grep '^read_buffer_size' ${VARIABLES_FILE} | cut -f 2`
read_rnd_buffer=`grep '^read_rnd_buffer_size' ${VARIABLES_FILE} | cut -f 2`
stack_size=`ulimit -s`

echo innodb_buffer_pool=${innodb_buffer_pool}
echo key_buffer=${key_buffer}
echo max_connections=${max_connections}
echo sort_buffer=${sort_buffer}
echo read_buffer=${read_buffer}
echo read_rnd_buffer=${read_rnd_buffer}
echo stack_size=${stack_size}

X1=`expr ${sort_buffer} + ${read_buffer} + ${read_rnd_buffer}`
Y1=`expr ${max_connections} \* ${X1}`
Y2=`expr ${max_connections} \* ${stack_size}`
RESULT=`expr ${max_connections} \* ${stack_size} + ${Y1} + ${Y2}`

cat << EOF

innodb_buffer_pool + key_buffer
 + max_connections * (sort_buffer + read_buffer + read_rnd_buffer)
 + max_connections * stack_size
=       ${innodb_buffer_pool} + ${key_buffer}
         + ${max_connections} * (${sort_buffer} + ${read_buffer} + ${read_rnd_buffer})
         + ${max_connections} * ${stack_size}
= ${RESULT}
= `expr ${RESULT} / 1048576` (MB)
EOF