¿Puede MySQL aprovechar efectivamente 64 GB de RAM?

22

Nos hemos encontrado con un problema en el que consultar una tabla que tiene aproximadamente 50 millones de filas y tiene un tamaño de índice de 4 GB (tamaño de tabla de aproximadamente 6 GB) da como resultado que el servidor de la base de datos intercambie memoria y disminuya drásticamente. Estoy bastante seguro de que esto tiene que ver con que se haya excedido el tamaño de la tabla temporal y se haya cambiado al disco.

Si actualicé mi servidor de base de datos de 32 GB de RAM a 64 GB de RAM, me pregunto si la base de datos MySQL podrá aprovechar al máximo esta memoria adicional y no intercambiar. He revisado algunas de las variables (por ejemplo, KEY_BUFFER_SIZE, etc.), y parece que admiten valores de configuración de más de 64 GB. Sin embargo, la documentación de MySQL dice que tmp_table_size alcanza un máximo de 4 GB.

Entonces, ¿valdría la pena la actualización de memoria? ¿Se beneficiaría el problema de "consulta de tabla grande" o no ayudaría debido al límite de 4 GB? Sé que hay potencialmente otras soluciones, como reestructurar la tabla para que se particione de diferentes maneras, etc., pero sin cambiar nada de la tabla, ¿ayudaría la memoria adicional?

Además, en general, ¿hay otras variables relacionadas con la memoria que MySQL no podría aprovechar al pasar de 32 a 64 GB de RAM?

Estamos utilizando Linux de 64 bits (Ubuntu) como nuestro servidor de base de datos.

Gracias Galen

Galen
fuente

Respuestas:

5

Si está utilizando InnoDB, la variable más importante para establecer es innodb_buffer_pool_size. Lo establecería en aproximadamente el 80% de la memoria de su sistema. Una vez que los cachés se calientan después de un uso, sus datos más activos (conjunto de datos de trabajo) estarán en la memoria (innodb_buffer_pool_size) y sus operaciones en él deberían ser muy rápidas. Con 64 GB de memoria, definitivamente puede caber mucho allí. La memoria siempre es una buena compra para los servidores DB.

vmfarms
fuente
11

Sí, si usa InnoDB y tiene una carga de trabajo de lectura intensiva, puede aprovechar absolutamente grandes cantidades de RAM [suponiendo que su conjunto de datos se ajuste a la memoria, su servidor será increíblemente rápido].

Estoy usando MySQL con almacenamiento InnoDB en servidores de 8-16 GB con ajuste de conjunto de trabajo en la memoria.

pQd
fuente
Lo mismo aquí: ejecutamos InnoDB en cajas de 64 GB y es genial.
James
9

¿Quizás valdría la pena dedicar un poco más de tiempo y esfuerzo a investigar qué está causando el intercambio del sistema antes de gastar dinero en la memoria?

32 GB de memoria dejan mucha memoria disponible incluso después de cargar toda la tabla, el índice y la tabla temporal máxima en la memoria. Una búsqueda rápida sacó a la luz estos dos documentos que podrían ser relevantes:

Martín
fuente
0

Si cree que se debe a que se está creando una tabla temporal muy grande, puede considerar formas de mejorar la consulta para evitar tablas temporales.

Puede publicar en Stackoverflow una publicación que contenga el esquema, la consulta, el plan de explicación y algunos detalles del problema.

MarkR
fuente