Para calcular el tamaño que tenemos que poner en nuestra configuración de mysql en el key_buffer_size, es tan simple como ejecutar este comando, ya sea desde mysq por php o cualquier programa que nos permita ejecutar querys, o también desde consola ssh. Tenemos en cuenta que este valor es para MyISAM.
SELECT CONCAT(ROUND(KBS/POWER(1024,
IF(PowerOf1024<0,0,IF(PowerOf1024>3,0,PowerOf1024)))+0.4999),
SUBSTR(' KMG',IF(PowerOf1024<0,0,
IF(PowerOf1024>3,0,PowerOf1024))+1,1))
recommended_key_buffer_size FROM
(SELECT LEAST(POWER(2,32),KBS1) KBS
FROM (SELECT SUM(index_length) KBS1
FROM information_schema.tables
WHERE engine='MyISAM' AND
table_schema NOT IN ('information_schema','mysql')) AA ) A,
(SELECT 2 PowerOf1024) B;El valor que nos devuelva es el que tendremos que poner de la siguiente forma
key_buffer_size=1024M
cambiando el número porl ese valor.
En caso de querer realizar la misma accion para calcular el valor para InnoDB innodb_buffer_pool_size, la query a ejecutar es la siguiente:
SELECT CONCAT(ROUND(KBS/POWER(1024,
IF(PowerOf1024<0,0,IF(PowerOf1024>3,0,PowerOf1024)))+0.49999),
SUBSTR(' KMG',IF(PowerOf1024<0,0,
IF(PowerOf1024>3,0,PowerOf1024))+1,1)) recommended_innodb_buffer_pool_size
FROM (SELECT SUM(data_length+index_length) KBS FROM information_schema.tables
WHERE engine='InnoDB') A,
(SELECT 2 PowerOf1024) B;

