ec2 - Reduciendo el consumo de memoria de mysql en ubuntu @ aws microinstance
connect to mysql database aws (4)
Cambie esta configuración en el archivo de configuración de MySQL (my.cnf)
key_buffer = 8M
max_connections = 30 # Limit connections
query_cache_size = 8M # try 4m if not enough
query_cache_limit = 512K
thread_stack = 128K
Recientemente comencé un proyecto PoC en el que estamos desarrollando una pequeña aplicación web. La configuración inicial se realiza en una microinstancia de AWS. Estamos en la pila rails + mysql.
Después de instalar / ejecutar MySQL, veo que ya se han consumido más de 500 MB de RAM; dejando bastante menos para el resto de los sistemas (las microinstancias apenas tienen 620 MB de RAM).
Nuestra aplicación es bastante simple en esta etapa. ¿Puedo hacer algo para reducir la memoria consumida por el servidor MySQL?
Apreciar la ayuda.
En su archivo my.cnf:
performance_schema = 0
Y reinicia mysql. Esto debería cortar el uso de la memoria de forma espectacular si anteriormente lo tenía activado.
Edición de 2016: desde MySQL 5.7.8 en adelante, lo anterior no es suficiente para liberar su memoria de los datos del esquema de rendimiento:
A partir de MySQL 5.7.8, incluso cuando el Esquema de rendimiento está deshabilitado, continúa llenando las tablas global_variables, session_variables, global_status y session_status.
( source )
Para evitar este comportamiento, establezca show_compatibility_56
en 1 además de performance_schema
. Es decir, tus cambios en my.cnf deberían verse así:
performance_schema = 0
show_compatibility_56 = 1
Solo para agregar a la otra respuesta. Hace poco tuve este problema con la microinstancia de Amazon (no con Ubuntu). El archivo my.cnf está casi vacío, así que lo que hice fue esto:
cp /etc/my.cnf /etc/my.cnf.orig
cp /usr/share/mysql/my-medium.cnf /etc/my.cnf
Edite my.cnf y habilite las líneas innodb si corresponde. Reinicie mysqld.
Además, la microinstancia no tiene intercambio, eso podría ser un problema.
SWAPFILE=/mnt/swapfile.swap
dd if=/dev/zero of=$SWAPFILE bs=1M count=512
mkswap $SWAPFILE
swapon $SWAPFILE
Luego, en /etc/rc.local agrega:
swapon /mnt/swapfile.swap
Para ahorrar memoria en ruby, es posible que desee usar ruby enterprise:
bash < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer)
gpasswd -a root rvm
source /etc/profile.d/rvm.sh
rvm get head
rvm reload
rvm install ree
rvm --default use ree
Tengo un servidor con solo 500 MB de RAM y descubrí que mysql comenzó a usar mucho RAM a medida que mis tablas aumentaban. Después de jugar con una gran cantidad de configuraciones, lo que redujo el uso de memoria para mí fue convertir todas mis tablas a MyISAM. Si no necesita las características de las tablas de conversión de innodb a MyISAM, puede ayudar bastante. Puede convertir tablas como esta:
ALTER TABLE test.mytable ENGINE=MyISAM;
Después de este cambio, descubrí que el uso de memoria disminuyó en un 20%. Para obtener una mayor reducción en el uso de la memoria, puede convertir TODAS sus tablas a MyISAM y luego desactivar el soporte de innodb en mysql. Esto redujo mi uso de memoria en un 50%.
Puedes hacer esto agregando:
[mysqld]
default_storage_engine=myisam
innodb=OFF
y luego reiniciando mysql.