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