2013-03-11 24 views
42

Ho un'istanza Amazon RDS. La memoria libera è in declino dal momento della configurazione per 1-2 settimane, a partire da 15 GB di memoria fino a circa 250 MB. Dato che è sceso così in basso negli ultimi giorni, ha iniziato ad assomigliare a un modello a dente di sega in cui la memoria utilizzabile scende a questo intervallo (250 - 350 MB) e quindi risale a 500 - 600 MB in uno schema a dente di sega.Amazon RDS esaurito la memoria trasferibile. Dovrei essere preoccupato?

Non si è verificato alcun calo significativo della qualità dell'applicazione. Tuttavia, sono preoccupato che il DB finirà la memoria e si bloccherà.

Esiste il rischio che l'istanza RDS esaurisca la memoria? C'è qualche impostazione o parametro che dovrei guardare per determinare se l'istanza è impostata correttamente? Cosa sta causando questo pattern a dente di sega?

Freeable Memory Declining

risposta

36

campo memoria liberabili è utilizzato da MySQL per il buffering e il caching per il `s propri processi. È normale che la quantità di memoria trasferibile diminuisca nel tempo. Non sarei preoccupato che faccia uscire vecchie informazioni perché richiede più spazio.

+0

Potete per favore indicare una documentazione mysql che menziona questo? –

+0

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

31

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.

0

Sono stato affrontato lo stesso problema, la memoria disponibile nella mia istanza è scesa sotto 40 MB, il riavvio dell'istanza ha reimpostato la memoria.

Problemi correlati