¿Cómo optimizo el uso de memoria de MySQL?

9

MI CONFIGURACIÓN ( ejemplo )

Estoy ejecutando Linux en una instancia de Amazon High CPU Extra Large EC2 con las siguientes especificaciones:

  • 7 GB de memoria
  • 20 unidades de cálculo EC2 (8 núcleos virtuales con 2.5 unidades de cálculo EC2 cada una)
  • 1690 GB de almacenamiento de instancia local
  • Plataforma de 64 bits

Tengo dos grandes bases de datos MySQL ejecutándose en el motor de almacenamiento MyISAM. Uno es de 2 GB y el otro es de 500 MB. Me gustaría asegurarme de que MySQL está utilizando tanta RAM como sea posible / necesita para maximizar las velocidades de consulta. Sé que hay un montón de opciones de configuración de memoria MySQL como key_buffer_sizey MyISAM_sort_buffer_size,pero no estoy familiarizado con la optimización de estas.

PREGUNTAS

  1. ¿Cómo se comprueba qué memoria está utilizando MySQL actualmente en un sistema Linux?
  2. ¿Cómo se maximiza / optimiza el uso de la memoria MySQL?
  3. Suponiendo que mis consultas y mi esquema estén optimizados, ¿qué otros cambios debo considerar?
T. Brian Jones
fuente
Puedes consultar con el programa htop.
neworld
Maximizar el uso de memoria no hará que toda la base de datos entre en memoria.
44
El sistema de archivos basado en RAM no es seguro. Si el servidor falla, todos los datos se perderán
neworld

Respuestas:

7

Este es un tema difícil. No se puede responder aquí, se han escrito libros completos sobre esto. Recomiendo hacer su innodb_buffer_pool_size lo suficientemente grande. Si está utilizando tablas myisam, compruebe key_buffer_size. También se deben considerar table_cache y max_ connections.

Aquí hay algo que puede ayudarlo:

http://www.mysqlperformanceblog.com/2006/09/29/what-to-tune-in-mysql-server-after-installation/ http://www.mysqlperformanceblog.com/2007/11/01/innodb- performance-optimization-basics / http://www.mysqlperformanceblog.com/2007/11/03/choosing-innodb_buffer_pool_size/

EDITAR:

Como dijo @ drew010, es importante considerar el tipo de uso que tiene el DB. El ajuste para una DB de lectura pesada es muy diferente a una escritura pesada. Además, puede considerar otras estrategias. Como Memcached, bases de datos nosql, etc.

santiago.basulto
fuente
2
De acuerdo, son bases de datos bastante pequeñas también en términos relativos. Si espera una tonelada de acceso de lectura a la base de datos, puede considerar algún tipo de sistema de almacenamiento en caché como memcached que su aplicación puede usar para almacenar valores de la base de datos para reducir los accesos a la base de datos. Si está haciendo principalmente inserciones, entonces el disco será un factor muy importante. Hasta cierto punto, la pregunta depende de cuáles son sus casos de uso. Si los datos no cambian mucho, la caché de consultas mysql también debería ayudar mucho con consultas más rápidas. También asegúrese de que sus índices / claves primarias sean buenos.
drew010
+1 tienes razón hermano. Supuse que estaba pidiendo un ajuste básico, pero es importante considerar el uso de la base de datos y otras cosas. De nuevo, no se puede discutir aquí, creo.
santiago.basulto
1

Si necesita asegurarse de que MySQL usa toda la memoria que necesita, debe cambiar a InnoDB. A menos que use las FULLTEXTcapacidades de búsqueda de MySQL , no habrá problemas serios.

En el caso de MyISAM, se utilizan varias memorias caché, incluidas las memorias intermedias internas de claves MySQL y la memoria caché del sistema. Si desea el mejor rendimiento, debe dejar espacio para cualquiera de los cachés, pero aún así no recomiendo MyISAM para ese propósito, especialmente si sus bases de datos son pesadas en escritura: MyISAM bloquea toda la tabla en escritura, mientras que InnoDB bloquea solo las filas afectadas.

Incluso si coloca todas sus bases de datos en la memoria, aún puede tener consultas de ejecución lenta debido a índices insuficientes u otras razones.

sanmai
fuente