Короткий ответ - вы не должны беспокоиться о FreeableMemory, если он не стал действительно низким (около 100-200 Мб) или значительным обменом (см. Метку RDS SwapUsage).
FreeableMemory не является метрикой MySQL, а метрикой ОС. Трудно дать точное определение, но вы можете рассматривать его как память, которую ОС сможет выделить любому, кто ее запрашивает (в вашем случае это, вероятно, будет MySQL). У MySQL есть набор настроек, которые ограничивают использование общей памяти в некоторой кепке (вы можете использовать что-то вроде this для фактического вычисления). Маловероятно, что ваш экземпляр когда-либо достигнет этого предела, из-за того, что в целом вы никогда не достигаете максимального количества соединений, но это все еще возможно.
Теперь возвращается к «упадку» в метрике FreeableMemory. Для MySQL большая часть памяти потребляется пулом буферов InnoDB (подробнее см. here). У экземпляров RDS в конфигурации по умолчанию есть размер для этого буфера, установленного на 75% физической памяти хостов, что в вашем случае составляет около 12 ГБ. Этот буфер используется для кэширования всех данных БД, которые используются как для операций чтения, так и для записи. Итак, в вашем случае, поскольку этот буфер действительно большой - он медленно заполняется данными, которые кэшируются (вполне вероятно, что этот буфер на самом деле достаточно велик, чтобы кэшировать всю БД). Поэтому, когда вы впервые запускаете экземпляр, этот буфер пуст, и как только вы начинаете читать/записывать материал в БД, все эти данные вводятся в кеш. Они останутся здесь до того момента, когда этот кеш станет полным, и придет новый запрос. В это время наименее недавно используемые данные будут заменены новыми данными. Таким образом, первоначальный спад FreeableMemory после перезапуска экземпляра DB объясняет это. Это неплохо, потому что вы действительно хотите, чтобы ваши данные были кешем, чтобы ваша БД работала быстрее. Единственное, что может пойти неприятно, - это то, что часть или весь этот буфер будет вытеснен из физической памяти в swap. В этот момент у вас будет огромное падение производительности.
В качестве профилактического обслуживания может быть хорошей идеей настроить MySQL max-память, используемую для разных вещей, в случае, если метка FreeableMemory постоянно находится на уровне 100-200 Мб, чтобы уменьшить возможность замены.
Не могли бы вы указать на документацию mysql, которая упоминает об этом? –
https://dev.mysql.com/doc/refman/5.7/en/buffering-caching.html - Но это не строго MySQL. Сама ОС (RDS или нет) обычно также кэширует ввод-вывод.В сочетании с буферизацией/кэшированием MySQL и кэшированием (диском) OS OS типичная операционная система почти всегда заполняет RAM доступную (и при необходимости заполняет записи). Это желательно - неплохо. В любом случае, Linux обычно будет использовать партии/всю доступную оперативную память без SQL-процесса. Как уже упоминалось, если freeable не становится ОЧЕНЬ низким (и остается там/swaps), вы в порядке. – bshea