Tengo 170 GB de InnoDB
índice y datos.
Tengo que reajustar el tamaño innodb_buffer_pool para un mejor rendimiento. El tamaño máximo de la tabla de una tabla InnoDB (índice + datos) es de 28 GB.
Entonces, ¿cuál debería ser el tamaño óptimo de innodb_buffer_pool?
ACTUALIZAR
vamos a migrar nuestra base de datos local a ec2, por lo que configuraremos la RAM de acuerdo con las estadísticas actuales de innodb, por eso necesito el tamaño de la agrupación de almacenamiento intermedio para que podamos tener RAM disponible allí.
Archivo por tabla está habilitado.
Estoy usando una máquina Linux.
Respuestas:
La tabla más grande que tiene representa el 16.47% (28/170) del total de datos. Incluso si la tabla fue altamente escrita y altamente leída, no todos los 28G de la tabla se cargan en el grupo de búferes en un momento dado. Lo que necesita calcular es la cantidad de InnoDB Buffer Pool que se carga en un momento dado en el servidor DB actual .
Aquí hay una forma más granular de determinar innodb_buffer_pool_size para un nuevo Servidor DB dado el conjunto de datos actualmente cargado en el InnoDB Buffer Pool del Servidor DB actual.
Ejecute lo siguiente en su instancia actual de MySQL (servidor desde el que está migrando)
Ejecuta la fórmula
IBPPctFull = IBPDataPages * 100.0 / IBPTotalPages
.Si IBPPctFull es 95% o más, debe establecer innodb_buffer_pool_size en 75% de la RAM del servidor de base de datos.
Si IBPPctFull es menor que 95%, ejecutar esta fórmula:
IBPSize = IPS X IBPDataPages / (1024*1024*1024) X 1.05
.El número para IBPSize (en GB) es el número que más se ajusta a su conjunto de datos de trabajo real.
Ahora, si IBPSize sigue siendo demasiado grande para la configuración de RAM más grande de Amazon EC2, use el 75% de la RAM para el servidor de base de datos Amazon EC2.
fuente
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:
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?
¿Cuál es la proporción de aciertos de caché clave?
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/
fuente