El buffer pool es donde InnoDB guarda datos e índices en memoria. Si tu conjunto de trabajo cabe, las consultas se responden desde la RAM. Si no cabe, esas mismas consultas leen el disco, entre cien y mil veces más lento para el mismo trabajo.

Mira qué tienes

mysql -e "SELECT @@innodb_buffer_pool_size/1024/1024/1024 AS gb"

El valor por defecto son 128 MB. En un servidor con 8 GB de RAM, es el ajuste que deja sin aprovechar más rendimiento que ninguna otra cosa de la máquina.

Cuánto ocupan en realidad tus datos

SELECT ROUND(SUM(data_length + index_length)/1024/1024/1024, 2) AS gb
  FROM information_schema.tables WHERE engine = 'InnoDB';

Elige el número

  • Servidor de base de datos dedicado: del 60 al 70 % de la RAM.
  • Compartido con PHP y el servidor web: del 25 al 40 %, y vigila el intercambio.
  • Datos más pequeños que eso: dimensiónalo al tamaño de los datos más un poco; lo que sobre se desperdicia.
# /etc/mysql/mysql.conf.d/mysqld.cnf
innodb_buffer_pool_size = 4G
innodb_buffer_pool_instances = 4      # one per GB, up to 8
innodb_log_file_size = 512M

Comprueba si es lo bastante grande

mysql -e "SHOW STATUS LIKE 'Innodb_buffer_pool_read%'"

Divide las lecturas que tuvieron que tocar el disco entre el total de peticiones de lectura. Por debajo del 1 % es sano; de forma sostenida por encima significa que el pool se queda corto para el conjunto de trabajo.

No lo dimensiones hasta el punto de que la máquina intercambie. Una base de datos intercambiando es mucho más lenta que una con un buffer pool pequeño: consulta RAM, swap y cuándo el swap es un síntoma.
Antes de comprar más memoria, comprueba que las consultas son razonables. Un solo índice que falte puede hacer que un conjunto de trabajo parezca diez veces mayor de lo que es: consulta Cuándo añadir un índice.