sql >> Base de Datos >  >> RDS >> Mysql

Cálculo del tamaño del grupo de búfer de InnoDB para su servidor MySQL

¿Qué es un grupo de búfer de InnoDB?

El grupo de búfer de InnoDB es el espacio de memoria que contiene muchas estructuras de datos en memoria de InnoDB, búferes, cachés, índices e incluso datos de fila. innodb_buffer_pool_size es el parámetro de configuración de MySQL que especifica la cantidad de memoria asignada al grupo de búfer de InnoDB por MySQL. Esta es una de las configuraciones más importantes en la configuración de alojamiento de MySQL y debe configurarse en función de la memoria RAM disponible del sistema.

En esta publicación, lo guiaremos a través de dos enfoques para configurar el valor del tamaño del grupo de búfer de InnoDB, examinar los pros y los contras de esas prácticas y también proponer un método único para llegue a un valor óptimo basado en el tamaño de la memoria RAM de su sistema.

Enfoque 1. Método de la regla empírica

La práctica más común es establecer este valor en 70% - 80% de la RAM del sistema. Aunque funciona bien en la mayoría de los casos, este método puede no ser óptimo en todas las configuraciones. Tomemos el ejemplo de un sistema con 192 GB de RAM. Según el método anterior, llegamos a unos 150 GB para el tamaño del grupo de búfer. Sin embargo, este no es realmente un número óptimo, ya que no aprovecha completamente el gran tamaño de RAM disponible en el sistema y deja alrededor de 40 GB de memoria. Esta diferencia puede ser aún más significativa a medida que pasamos a sistemas con configuraciones más grandes en las que deberíamos utilizar la RAM disponible en mayor medida.

Enfoque 2. Un enfoque más matizado

Este enfoque se basa en una comprensión más detallada de los aspectos internos del grupo de búfer de InnoDB y sus interacciones, que se describe muy bien en el libro MySQL de alto rendimiento.

Veamos el siguiente método para calcular el tamaño del grupo de búfer de InnoDB.

  1. Comience con la memoria RAM total disponible.
  2. Reste la cantidad adecuada para las necesidades del sistema operativo.
  3. Reste la cantidad adecuada para todas las necesidades de MySQL (como varios búferes de MySQL, tablas temporales, grupos de conexiones y búferes relacionados con la replicación).
  4. Divida el resultado por 105 %, que es una aproximación de la sobrecarga necesaria para administrar el grupo de búfer en sí.

Por ejemplo, observemos un sistema con 192 GB de RAM que usa solo InnoDB y tiene un tamaño de archivo de registro total de aproximadamente 4 GB. Podemos usar una regla como "máximo de 2 GB o 5% de la RAM total" para la asignación de necesidades del sistema operativo como se recomienda en el libro anterior, que llega a alrededor de 9,6 GB. Luego, también asignaremos alrededor de 4 GB para otras necesidades de MySQL, principalmente teniendo en cuenta el tamaño del archivo de registro. Este método da como resultado aproximadamente 170 GB para nuestro tamaño de grupo de búfer InnoDB, que es aproximadamente el 88,5 % de uso del tamaño de RAM disponible.

Aunque usamos la regla 'máximo de 2 GB o 5 % de la RAM total' para calcular nuestra asignación de memoria para las necesidades del sistema operativo mencionadas anteriormente, la misma regla no funciona muy bien en todos los casos , específicamente para sistemas con memorias RAM medianas entre 2GB y 32GB. Por ejemplo, en un sistema con 3 GB de RAM, la asignación de 2 GB para las necesidades del sistema operativo no deja mucho para el grupo de búfer de InnoDB, mientras que la asignación del 5 % de RAM es demasiado poco para las necesidades de nuestro sistema operativo.

Por lo tanto, ajustemos la regla de asignación del sistema operativo anterior y examinemos el método de cálculo de InnoDB en varias configuraciones de RAM:

Para sistemas con RAM de tamaño pequeño (<=1GB)

Para los sistemas que se ejecutan con menos de 1 GB de RAM, es mejor optar por el valor de configuración predeterminado de MySQL de 128 MB para el tamaño del grupo de búfer de InnoDB.

Para sistemas con RAM de tamaño mediano (1 GB – 32 GB)

Considerando el caso de sistemas con un tamaño de RAM de 1 GB a 32 GB, podemos calcular las necesidades del sistema operativo utilizando esta heurística aproximada:

256 MB + 256 * log2 (tamaño de RAM en GB)

La racionalización aquí es que, para configuraciones de poca RAM, comenzamos con un valor base de 256 MB para las necesidades del sistema operativo y aumentamos esta asignación en una escala logarítmica como la cantidad de RAM aumenta. De esta manera, podemos encontrar una fórmula determinista para asignar RAM para las necesidades de nuestro sistema operativo. También asignaremos la misma cantidad de memoria para otras necesidades de MySQL. Por ejemplo, en un sistema con 3 GB de RAM, haríamos una asignación justa de 660 MB para las necesidades del sistema operativo y otros 660 MB para otras necesidades de MySQL, lo que da como resultado un valor de aproximadamente 1,6 GB para nuestro tamaño de grupo de búfer InnoDB.

Para sistemas con RAM de mayor tamaño (> 32 GB)

Para sistemas con tamaños de RAM superiores a 32 GB, volveríamos a calcular las necesidades del sistema operativo como el 5 % del tamaño de RAM de nuestro sistema, y ​​la misma cantidad para MySQL otras necesidades. Entonces, para un sistema con un tamaño de RAM de 192 GB, nuestro método aterrizará en aproximadamente 165 GB para el tamaño del grupo de búfer de InnoDB, que nuevamente es un valor óptimo para usar.

Calculadora de tamaño de grupo de búfer de InnoDB

Calcule el valor óptimo para RAM de cualquier tamaño:





Calculadora del tamaño de la agrupación de búfer de InnoDB:calcule el número óptimo para cualquier tamaño de RAM del sistemaHaga clic para twittear

Gráfico del tamaño del grupo de búfer de InnoDB para varios tamaños de RAM

Palabra de precaución para los cálculos del tamaño de la agrupación de búfer de InnoDB

Las consideraciones en esta publicación de blog son para sistemas Linux que están dedicados a MySQL. Para sistemas Windows o sistemas que ejecutan múltiples aplicaciones junto con MySQL, estas observaciones pueden ser inexactas. También es importante tener en cuenta que, aunque podemos usar estas herramientas como referencias, realmente se necesita buena experiencia, experimentación, monitoreo continuo y ajustes para obtener el tamaño correcto para su innodb_buffer_pool_size.