Risposta breve: non è necessario preoccuparsi di FreeableMemory a meno che non sia diventato molto basso (circa 100-200 Mb) o si verifichi uno swapping significativo (vedere Metrica RDS SwapUsage).
FreeableMemory non è una metrica MySQL, ma una metrica del sistema operativo. È difficile dare una definizione precisa, ma puoi considerarla come memoria quale sistema operativo sarà in grado di allocare a chiunque ne faccia richiesta (nel tuo caso probabilmente sarà MySQL). MySQL ha un set di impostazioni che limitano il suo utilizzo complessivo della memoria a qualche limite (puoi usare qualcosa come this per calcolarlo effettivamente). È improbabile che la tua istanza abbia mai raggiunto questo limite, poiché in generale non si raggiunge mai il numero massimo di connessioni, ma ciò è ancora possibile.
Ora si torna a "declinare" nella metrica FreeableMemory. Per MySQL la maggior parte della memoria viene consumata dal pool di buffer InnoDB (vedere here per i dettagli). Le istanze RDS in là config per impostazione predefinita hanno dimensioni per questo buffer impostato su 75% della memoria fisica degli host, che nel tuo caso è di circa 12 GB. Questo buffer viene utilizzato per memorizzare nella cache tutti i dati del DB che vengono utilizzati nelle operazioni di lettura e scrittura. Quindi nel tuo caso, dal momento che questo buffer è veramente grande - si sta riempiendo lentamente di dati memorizzati nella cache (è probabile che questo buffer sia effettivamente abbastanza grande da memorizzare nella cache tutto il DB). Quindi, quando si avvia per la prima istanza, questo buffer è vuoto e, una volta che si inizia a leggere/scrivere cose nel DB, tutti questi dati vengono inseriti nella cache. Rimarranno qui fino al momento in cui questa cache è diventata piena e la nuova richiesta è arrivata. In questo momento i dati utilizzati meno recenti verranno sostituiti con nuovi dati. Quindi il declino iniziale di FreeableMemory dopo il riavvio dell'istanza di DB spiega questo fatto. Non è una cosa negativa, perché in realtà vuoi che i tuoi dati siano conservati nella cache in modo che il tuo DB funzioni più velocemente. L'unica cosa che può diventare sgradevole è quando parte o tutto questo buffer verrà trasferito dalla memoria fisica allo swap. A quel punto avrai un enorme calo di prestazioni.
Come precauzione potrebbe essere una buona idea sintonizzare la memoria massima di MySQL utilizzata per cose diverse nel caso in cui la metrica di FreeableMemory sia costantemente su un livello di 100-200 Mb, solo per ridurre le possibilità di scambio.
Potete per favore indicare una documentazione mysql che menziona questo? –
https://dev.mysql.com/doc/refman/5.7/en/buffering-caching.html - Ma non è strettamente MySQL. Il sistema operativo stesso (RDS o meno) normalmente memorizzerà anche l'I/O nella cache.In combinazione con il buffering/caching MySQL e l'I/O nella cache del sistema operativo (disco), un SO tipico riempirà quasi sempre la RAM disponibile (e svuoterà le voci se necessario). Questo è desiderabile, non male. Linux userà normalmente molto/tutta la RAM disponibile senza un processo SQL. Come accennato, a meno che il libero diventa MOLTO basso (e rimane lì/swap), tu stai bene. – bshea