Proporciono esta respuesta como información complementaria a la respuesta de Rolando a continuación.
Antes de que el servidor esté en producción
Calcule innodb_buffer_pool_size en función de las tablas más grandes que MySQL usa con mayor frecuencia. Para identificar las tablas más grandes en función de su tamaño en la base de datos, puede usar este script:
select table_schema, table_name, round(data_length/1024/1024,2) as size_mb
from information_schema.tables where table_schema like 'my_database'
order by size_mb desc;
+--------------+-------------------------+---------+
| table_schema | table_name | size_mb |
+--------------+-------------------------+---------+
| heavybidder | user | 522.55|
| heavybidder | bid | 121.52|
| heavybidder | item_for_sale | 10.52|
| heavybidder | account_user | 5.02 |
| heavybidder | txn_log | 4.02 |
| heavybidder | category | 0.02 |
+--------------+-------------------------+---------+
Ahora que sabemos qué tablas son las más grandes en nuestra base de datos, necesitamos determinar cuáles son las más utilizadas. Para hacer eso, usaría un programa de creación de perfiles como Jet Profiler (JP) para ver a qué tablas se accede más. JP le mostrará a qué tablas se accede con más frecuencia. Aquí hay una captura de pantalla de esa sección en JP
Con esto en mente, ahora sé que las tablas de usuarios y ofertas ocupan alrededor de 640 MB de espacio en disco, se usan con mucha frecuencia según JP y lo que significa que MySQL almacenará sus índices y datos en el grupo de búferes como Rolando Menciona a continuación en sus comentarios.
Para asegurarme de que MySQL tuviera suficiente memoria para almacenar datos para mis tablas más grandes y de uso más frecuente, definiría innodb_buffer_pool_size a 640 MB.
Hay algunas consideraciones adicionales, pero no se aplican a innodb_buffer_pool_size.
¿Es este un sistema de 32 bits o 64 bits? En un sistema de 32 bits, está limitado a 4 GB a menos que active PAE. En Windows, esto significa ejecutar las ediciones de Windows Enterprise o Datacenter.
¿Cuánta memoria necesitan los otros procesos que se ejecutan en su sistema? En un servidor MySQL dedicado, dejaré entre 5% y 10% para el sistema operativo. En Windows puede usar Process Explorer para analizar el uso de memoria. En Linux, tiene sysstat, free, htop, top y vmstat.
¿La base de datos está compuesta solo por tablas Innodb o una mezcla de Innodb y MyISAM? Si es una mezcla de los dos, entonces reservaré memoria para key_cache, uniré variables, consultaré caché, etc. Más tarde podrá calcular su índice de aciertos MyISAM una vez que el servidor esté en producción.
Después de que el servidor esté en producción
¿Cuál es el índice de aciertos actual para Innodb?
1 - (innodb_buffer_pool_reads / innodb_buffer_pool_read_requests).
¿Cuál es la proporción de aciertos de caché clave?
1 - (Key_reads / Key_read_requests)
Por lo general, trato de obtener la proporción lo más cercana posible al 100%.
¿Qué tan bien encajan sus tablas en el grupo de búferes?
También puede ver qué tan bien se ajustan los datos de su tabla en su buffer_pool consultando este enlace, que proporciona una forma de mostrar "cuántas páginas hay en la agrupación de almacenamientos intermedios para una tabla dada (cnt), cuántas de ellas están sucias (sucias) , y cuál es el porcentaje de ajustes de índice en la memoria (fit_pct) ". Solo se aplica al servidor Percona
http://www.mysqlperformanceblog.com/2010/12/09/how-well-does-your-table-fits-in-innodb-buffer-pool/