Amazon RDS se queda sin memoria libre. ¿Debería preocuparme?


Tengo una instancia de Amazon RDS. La memoria libre ha estado disminuyendo desde la configuración durante 1-2 semanas, a partir de 15 GB de memoria hasta aproximadamente 250 MB. Como ha caído este bajo en los últimos días, ha comenzado a parecerse a un patrón de diente de sierra donde la Memoria libre cae a este rango (250 - 350MB) y luego vuelve a agin a 500 - 600MB en un patrón de diente de sierra.

No ha habido ninguna disminución notable en la calidad de la aplicación. Sin embargo, me preocupa que la base de datos se quede sin memoria y crash.

¿Existe el peligro de que la instancia RDS se quede sin memoria? ¿Hay alguna configuración o parámetro que deba tener en cuenta para determinar si la instancia está configurada correctamente? ¿Qué está causando este patrón de diente de sierra?

Disminución de la Memoria Libre

Author: william tell, 2013-03-11

3 answers

El campo de memoria libre es utilizado por MySQL para el almacenamiento en búfer y el almacenamiento en caché de sus propios procesos. Es normal que la cantidad de memoria libre disminuya con el tiempo. No me preocuparía que saque información vieja ya que exige más espacio.

 37
Author: Larry McKenzie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-11 06:49:56

Respuesta corta - usted no debe preocuparse por FreeableMemory a menos que se convirtió en muy baja (alrededor de 100-200 Mb) o se produce un intercambio significativo (ver RDS SwapUsage métrica).

FreeableMemory no es una métrica MySQL, sino una métrica OS. Es difícil dar una definición precisa, pero puede tratarla como memoria que el sistema operativo podrá asignar a cualquiera que la solicite (en su caso, probablemente será MySQL). MySQL tiene un conjunto de configuraciones que restringen su uso general de memoria a algún límite (usted puede usar algo como this para calcularlo realmente). Es poco probable que su instancia llegue a este límite, debido al hecho de que, en general, nunca alcanza el número máximo de conexiones, pero esto sigue siendo posible.

Ahora volvemos a "decline" en la métrica FreeableMemory. Para MySQL la mayor parte de la memoria consume InnoDB buffer pool (ver aquí para más detalles). Las instancias RDS en la configuración de forma predeterminada tienen el tamaño para este búfer establecido en el 75% de la memoria física de los hosts - que en su caso es de unos 12 GB. Este búfer se utiliza para almacenar en caché todos los datos de la base de datos que se utilizan en las operaciones de lectura y escritura. Así que en su caso, ya que este búfer es realmente grande, se está llenando lentamente con datos que se almacenaron en caché (es probable que este búfer sea lo suficientemente grande como para almacenar en caché toda la base de datos). Así que cuando se inicia por primera vez la instancia de este búfer está vacío y que una vez que comience a leer/escribir cosas en la base de datos todos estos datos están trayendo en caché. Se quedarán aquí hasta el momento en que este cache se llenó y llegó una nueva solicitud. En este momento, los datos menos utilizados recientemente serán reemplazados por nuevos datos. Así que la disminución inicial de FreeableMemory después del reinicio de la instancia de base de datos se explica con este hecho. No es algo malo, porque realmente desea que la mayor cantidad posible de sus datos sea caché para que la base de datos funcione más rápido. La única cosa que puede ir desagradable es cuando parte o todo este búfer será empujado fuera de la memoria física en el intercambio. En ese momento usted tendrá un gran rendimiento gota.

Como un cuidado preventivo, podría ser una buena idea ajustar la memoria MySQL max utilizada para cosas diferentes en caso de que la métrica FreeableMemory esté constantemente en un nivel de 100-200 Mb, solo para reducir la posibilidad de intercambio.

 36
Author: Dmitry,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-10 01:47:33

Me he estado enfrentando al mismo problema, la memoria libre en mi instancia fue por debajo de 40mb, reiniciando la instancia se ha restablecido la memoria.

 -1
Author: Ali AlNoaimi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-02 20:35:02