Un'istanza Memorystore for Redis, se non gestita e configurata correttamente, può subire una pressione sulla memoria che può influire sulle prestazioni dell'applicazione. Questa pagina descrive le best practice che puoi utilizzare per gestire in modo efficiente l'utilizzo della memoria della tua istanza.
In questo argomento:
Concetti di gestione della memoria: i concetti chiave che devi conoscere per mantenere in salute la tua istanza Memorystore.
Operazioni che richiedono molta memoria: operazioni che possono causare un utilizzo elevato della memoria.
Monitora l'utilizzo della memoria dell'istanza: le metriche che devi monitorare per scoprire in che modo l'istanza utilizza la memoria.
Risolvere una condizione di esaurimento della memoria: i passaggi da seguire per risolvere i problemi relativi a una condizione di esaurimento della memoria.
Scegli la dimensione giusta per la tua istanza Memorystore: anziché creare un'istanza sovradimensionata, scopri come scegliere la dimensione giusta per la tua istanza.
Concetti di gestione della memoria
Questa sezione illustra i concetti che devi comprendere per gestire l'utilizzo della memoria della tua istanza.
Capacità istanza
- La capacità dell'istanza è la quantità di memoria di cui esegui il provisioning in gigabyte (GB) e per la quale ti vengono addebitati gli importi. Per ulteriori dettagli sulla selezione della capacità dell'istanza corretta, consulta Scegliere la dimensione corretta per l'istanza Memorystore.
Configurazione di maxmemory
Maxmemory è una configurazione Redis che consente di impostare il limite di memoria in base al quale viene applicato il criterio di rimozione. Memorystore for Redis designa questa configurazione come
maxmemory-gb
. Quando crei un'istanza,maxmemory-gb
viene impostato sulla capacità dell'istanza. A seconda della metrica del rapporto di utilizzo della memoria di sistema, potrebbe essere necessario abbassare il limitemaxmemory-gb
per fornire un overhead di memoria per i picchi di carico di lavoro.Per maggiori dettagli, vedi Gestire il rapporto di utilizzo della memoria di sistema.
Per scoprire come regolare
maxmemory-gb
, consulta Configurazione delle istanze Redis.
Rapporto di utilizzo della memoria di sistema
La metrica Rapporto di utilizzo della memoria di sistema consente di misurare l'utilizzo della memoria di un'istanza rispetto alla memoria di sistema. La memoria di sistema viene gestita automaticamente da Memorystore per gestire i picchi di utilizzo della memoria causati da operazioni che richiedono molta memoria e dalla frammentazione della memoria, che è comune in Redis open source.
Se la metrica del rapporto di utilizzo della memoria di sistema supera l'80%, significa che l'istanza è sotto pressione di memoria e devi seguire le istruzioni riportate in Gestire il rapporto di utilizzo della memoria di sistema. Se non intervieni e l'utilizzo della memoria continua a crescere, rischi un arresto anomalo dell'istanza a causa di memoria insufficiente. La metrica del rapporto di utilizzo della memoria di sistema potrebbe superare l'80% a causa della frammentazione della memoria. In alternativa, se la metrica raggiunge rapidamente l'80% o un valore superiore, potresti aver utilizzato una delle operazioni che richiedono un uso intensivo della memoria.
Durante gli aggiornamenti di manutenzione, il rapporto di utilizzo della memoria di sistema deve essere pari o inferiore al 50%. Inoltre, a volte l'esportazione richiede un rapporto di utilizzo della memoria di sistema pari o inferiore al 50%.
Memoria utilizzata
- La metrica Memoria utilizzata mostra la quantità di dati nell'istanza Memorystore. La memoria utilizzata da un'istanza può aumentare fino al limite di configurazione di
maxmemory-gb
. Quando la memoria utilizzata supera il limite dimaxmemory-gb
, viene applicato il criterio di espulsione.
Norme sullo sfratto
Il criterio di espulsione dell'istanza (noto anche come criterio maxmemory) determina come Redis esegue l'espulsione delle chiavi quando i dati dell'istanza raggiungono il limite
maxmemory-gb
. Redis rimuove le chiavi come parte del normale caso d'uso della cache. L'espulsione delle chiavi avviene come processo in background, pertanto le chiavi non vengono espulse immediatamente dopo il raggiungimento del limite dimaxmemory-gb
. Una frequenza di scrittura elevata potrebbe superare l'espulsione delle chiavi e causare una condizione di memoria esaurita.Il criterio di espulsione predefinito di un'istanza Memorystore è
volatile-lru
. Se utilizzi unvolatile-*
criterio di espulsione, assicurati di impostare i valori TTL sulle chiavi che vuoi far scadere, altrimenti Redis non ha chiavi da espellere.Per un elenco dei criteri di espulsione, consulta Criteri Maxmemory.
Per scoprire come modificare il criterio di espulsione, consulta Configurare le istanze Redis.
Frammentazione della memoria
- La frammentazione della memoria può causare l'esaurimento della memoria dell'istanza Memorystore anche quando il rapporto tra la memoria utilizzata e
maxmemory-gb
è basso. La frammentazione della memoria si verifica quando il sistema operativo alloca pagine di memoria che Redis non può utilizzare completamente dopo ripetute operazioni di scrittura ed eliminazione. L'accumulo di queste pagine può causare l'esaurimento della memoria del sistema e, alla fine, l'arresto anomalo del server Redis. La configurazione diactivedefrag
Redis può contribuire a ridurre la frammentazione.
Defragmentazione attiva
Le versioni Redis 4.0 e successive forniscono una configurazione
activedefrag
. Se possibile, devi creare l'istanza Memorystore utilizzando Redis 4.0. Per impostazione predefinita, Memorystore impostaactivedefrag
su "no". L'impostazione diactivedefrag
su "yes" comporta un compromesso con la CPU, ma può contribuire a mitigare la frammentazione della memoria, che contribuisce a causare problemi di esaurimento della memoria.Se la metrica del rapporto di utilizzo della memoria di sistema indica una frammentazione della memoria, devi attivare
activedefrag
. In caso contrario,activedefrag
rimane un'impostazione facoltativa.
Operazioni che richiedono molta memoria
Le seguenti operazioni utilizzano una quantità significativa di memoria, in particolare se eseguite in combinazione con una frequenza di scrittura elevata:
Operazione di esportazione
La funzionalità di esportazione di Memorystore utilizza l'operazione BGSAVE di Redis, che utilizza la modalità di copia su scrittura. A seconda delle dimensioni dei dati, del volume di scrittura e delle chiavi toccate, la memoria richiesta per un'esportazione può essere il doppio dello spazio occupato dai dati. Pertanto, per la buona riuscita delle esportazioni, potrebbe essere necessario ridurre il limite di maxmemory-gb
al 50% della capacità dell'istanza durante le esportazioni.
Operazioni di scalabilità e upgrade delle versioni
Il scaling o l'upgrade durante periodi di elevato carico di scrittura può causare una pressione sulla memoria dell'istanza a causa dell'overhead della memoria causato dalla replica. Inoltre, un carico di lettura elevato può aumentare le dimensioni del buffer di output di Redis, con un conseguente aumento della pressione sulla memoria. Se un'operazione di scalabilità o di upgrade non riesce a causa della pressione sulla memoria, devi:
- Riduci
maxmemory-gb
al 50% della capacità dell'istanza prima di un'operazione di scalabilità/upgrade. Se possibile, dovresti anche ridurre il valore maxmemory durante i periodi di traffico ridotto delle istanze, in quanto ciò riduce l'impatto negativo della riduzione di maxmemory sul rapporto di hit della cache. - Esegui la scalabilità/l'upgrade durante i periodi di scrittura ridotta.
Manutenzione
La manutenzione aggiunge anche un carico sulla memoria della tua istanza. Devi adottare misure affinché la metrica Rapporto di utilizzo della memoria di sistema sia pari o inferiore al 50% al momento della manutenzione pianificata. Per farlo, puoi pianificare l'operazione per un momento in cui il traffico dell'istanza è basso oppure aumentare temporaneamente le dimensioni dell'istanza durante la periodo di manutenzione in modo che il rapporto di utilizzo della memoria di sistema sia pari o inferiore al 50%.
Monitorare l'utilizzo della memoria dell'istanza
Monitora le metriche e imposta gli avvisi descritti in questa sezione. Queste metriche e questi avvisi forniscono informazioni sull'utilizzo della memoria dell'istanza. Per scoprire come visualizzare le metriche e impostare gli avvisi, consulta Monitoraggio delle istanze Redis.
Metriche correlate alla gestione della memoria
Metrica | Indirizzo metrico completo |
---|---|
Maxmemory | redis.googleapis.com/stats/memory/maxmemory |
Utilizzo memoria | redis.googleapis.com/stats/memory/usage |
Rapporto di utilizzo della memoria | redis.googleapis.com/stats/memory/usage_ratio |
Durata del sovraccarico della memoria di sistema | redis.googleapis.com/stats/memory/system_memory_overload_duration |
Rapporto di utilizzo della memoria di sistema | redis.googleapis.com/stats/memory/system_memory_usage_ratio |
Percentuale successi cache | redis.googleapis.com/stats/memory/cache_hit_ratio |
Chiavi con scadenza | redis.googleapis.com/keyspace/keys_with_expiration |
Chiavi scadute | redis.googleapis.com/stats/expired_keys |
Chiavi rimosse | redis.googleapis.com/stats/evicted_keys |
Rapporto di utilizzo della memoria
La metrica Rapporto di utilizzo della memoria indica quanto manca alla dimensione del set di lavoro per raggiungere il limite maxmemory-gb
. A meno che il criterio di espulsione non sia impostato su
no-eviction, il raggiungimento della memoria massima da parte dei dati dell'istanza non indica sempre
un problema. Tuttavia, l'espulsione delle chiavi è un processo in background che richiede tempo. Se hai una frequenza di scrittura elevata, potresti esaurire la memoria prima che Redis abbia il tempo di eliminare le chiavi per liberare spazio.
Rapporto di utilizzo della memoria di sistema
Il rapporto di utilizzo della memoria di sistema è una metrica fondamentale da monitorare. Per assicurarti che l'istanza abbia memoria sufficiente per supportare il tuo carico di lavoro e altre operazioni che richiedono molto utilizzo di memoria, è importante disporre sempre di memoria di sistema sufficiente.
Imposta un avviso per ricevere una notifica se la metrica del rapporto di utilizzo della memoria di sistema raggiunge l'80%. Se raggiunge l'80%, devi iniziare a monitorare più da vicino la metrica del rapporto di utilizzo della memoria di sistema. Se il rapporto di utilizzo della memoria di sistema continua a crescere in modo significativo, devi attivare activedefrag, ridurre maxmemory e valutare la possibilità di eseguire lo scale dell'istanza.
Quando il rapporto di utilizzo della memoria di sistema raggiunge il 100%, qualsiasi operazione che aumenti ulteriormente il volume di memoria dell'istanza viene bloccata e Redis restituisce il seguente errore:
-OOM command not allowed under OOM prevention.
Per maggiori dettagli, consulta Gestire il rapporto di utilizzo della memoria di sistema.
Durata del sovraccarico della memoria di sistema
Se l'utilizzo della memoria è troppo elevato, Memorystore blocca le scritture nella tua istanza per mantenerla in buono stato. La durata del sovraccarico della memoria di sistema monitora il tempo per cui l'istanza è nello stato di scrittura bloccata.
Ti consigliamo di impostare un avviso per questa metrica in modo da sapere quando le scritture vengono bloccate per l'istanza. Inoltre, puoi fare riferimento a questa metrica per risolvere i problemi relativi alla ricezione dell'errore-OOM command not allowed under OOM prevention.
.
Percentuale di hit della cache
Devi monitorare regolarmente il rapporto di hit della cache per sapere quale percentuale di ricerche delle chiavi viene restituita correttamente dalle chiavi nell'istanza Redis. In generale, un rapporto di hit della cache più elevato è migliore di uno inferiore. Prima di apportare modifiche sostanziali alla configurazione, ad esempio modificare il limite di maxmemory-gb
, cambiare il criterio di espulsione o eseguire il ridimensionamento dell'istanza, devi annotare il rapporto di hit della cache. Dopo aver modificato l'istanza, controlla di nuovo il rapporto di hit della cache per vedere l'impatto della modifica su questa metrica.
Chiavi con scadenza e Chiavi scadute
La metrica di Stackdriver Chiavi con scadenza monitora il numero di chiavi impostate per la scadenza. Se non sono presenti chiavi con scadenza, potrebbe indicare che non stai impostando i TTL sulle chiavi. In questi casi, quando i dati dell'istanza raggiungono il limite maxmemory-gb
, non ci sono chiavi da eliminare, il che può comportare una condizione di esaurimento della memoria se utilizzi un criterio di espulsione maxmemory-gb
.volatile-*
Un'altra metrica che puoi monitorare è Chiavi scadute. Se la metrica mostra molte chiavi scadute, ma continui a notare una pressione sulla memoria dell'istanza, devi ridurre maxmemory-gb
.
Risolvere una condizione di esaurimento della memoria
Di seguito sono riportate alcune best practice da seguire se la tua istanza presenta una pressione sulla memoria o si verificano errori di esaurimento della memoria.
Se utilizzi un criterio di espulsione
volatile-*
, assicurati di impostare i TTL per le chiavi di cui vuoi che scada la scadenza. Per maggiori dettagli, consulta le norme sull'espulsione.Per le istanze che eseguono Redis 4.0 e versioni successive:
- Attiva
activedefrag
per l'istanza. Per ulteriori dettagli, consulta la sezione Defragmentazione attiva.
- Attiva
Scopri come utilizzare le metriche per risolvere i problemi di esaurimento della memoria e ottenere informazioni sull'utilizzo della memoria dell'istanza: Monitora l'utilizzo della memoria dell'istanza, Gestisci il rapporto di utilizzo della memoria del sistema.
Scopri come regolare maxmemory quando esegui operazioni che richiedono molta memoria.
Se la metrica Rapporto di utilizzo della memoria di sistema supera l'80%, riduci il limite
maxmemory-gb
dell'istanza. Per maggiori dettagli, consulta Gestire il rapporto di utilizzo della memoria di sistema.Valuta la possibilità di aumentare la capacità dell'istanza.
Se continui a riscontrare condizioni di OOM, contatta l'assistenza della piattaforma Google Cloud.
Scegli la dimensione giusta per l'istanza Memorystore
Questa sezione illustra tre approcci distinti che ti aiutano a determinare le dimensioni adeguate per la tua istanza in base al carico di lavoro:
- L'articolo Determinare le dimensioni iniziali di un'istanza Memorystore descrive come stimare le dimensioni dell'istanza prima di crearla.
- Monitora l'utilizzo della memoria dell'istanza descrive le metriche che forniscono informazioni utili su come l'istanza utilizza la memoria.
- L'articolo Gestire il rapporto di utilizzo della memoria di sistema spiega cosa fare se il rapporto di utilizzo della memoria di sistema supera l'80%.
Determinare le dimensioni iniziali di un'istanza Memorystore
Per prima cosa, devi scegliere se vuoi un'istanza di livello Standard o di livello Base. Per scoprire di più sui livelli di Memorystore for Redis, consulta la sezione Funzionalità dei livelli di Redis. Dopo aver selezionato il livello giusto per la tua applicazione, segui questi passaggi per determinare le dimensioni dell'istanza di cui hai bisogno:
Determina le dimensioni dei dati.
- Stima il numero e le dimensioni medie delle chiavi che la tua applicazione scriverà nell'istanza Redis. Moltiplica questi valori per ottenere una stima approssimativa delle dimensioni dell'istanza di cui hai bisogno.
Scegli un criterio di espulsione.
- Se utilizzi il criterio maxmemory
noeviction
, le dimensioni dell'istanza devono essere sufficientemente grandi da contenere il carico di lavoro di picco e il set di lavoro. Se la memoria esaurisce con questo criterio maxmemory, l'istanza può entrare in una condizione di memoria insufficiente. - Altri criteri di espulsione non influiscono sulle dimensioni dell'istanza da eseguire.
- Se utilizzi il criterio maxmemory
Esegui il provisioning di memoria aggiuntiva per le istanze di livello Standard
- A differenza delle istanze di livello base, le istanze di livello standard riservano il 10% della capacità dell'istanza come buffer di replica. Se scegli un'istanza di livello standard, assicurati di prendere la stima dei dati del primo passaggio e di eseguire il provisioning di un ulteriore 10% per il buffer di replica.
Stimare la frequenza di scrittura media e di picco
- Se possibile, stima la frequenza di scrittura e le dimensioni delle chiavi che verranno utilizzate dalla tua applicazione. La frequenza di scrittura rispetto alla frequenza di rimozione delle chiavi determina la velocità di crescita dell'istanza nel tempo.
Esegui l'upgrade per raggiungere la percentuale di hit della cache che preferisci
- Monitora il rapporto di hit della cache e, se non ottieni il numero di hit della cache che vuoi, significa che devi aumentare le dimensioni dell'istanza o assicurarti che l'applicazione scriva le chiavi nell'istanza Memorystore richieste e non soddisfatte.
Determinare se l'istanza blocca le scritture a causa di una condizione di esaurimento della memoria
Se ricevi il seguente errore:
-OOM command not allowed under OOM prevention.
Quindi, controlla se:
- La metrica del rapporto di utilizzo della memoria di sistema ha superato l'80% poco prima che l'istanza inizi a riscontrare problemi.
- Il rapporto di utilizzo della memoria di sistema è aumentato molto rapidamente prima che si verificassero problemi con l'istanza.
- La metrica Durata del sovraccarico della memoria di sistema ha mostrato valori superiori a zero nello stesso periodo in cui si sono verificate le scritture bloccate.
In questo caso, è probabile che l'istanza blocchi le scritture a causa di una condizione di esaurimento della memoria.
Gestire il rapporto di utilizzo della memoria di sistema
Imposta un avviso per ricevere una notifica se la metrica Rapporto di utilizzo della memoria di sistema supera l'80%. Se il rapporto di utilizzo della memoria del sistema supera l'80%, devi adottare le misure appropriate per evitare che l'istanza esaurisca la memoria. A seconda del volume di scrittura e del pattern di accesso alle chiavi, l'utilizzo della memoria di sistema può potenzialmente aumentare rapidamente fino al 100%. Memorystore offre i seguenti modi per gestire il rapporto di utilizzo della memoria del sistema:
- Attiva
activedefrag
per le istanze che eseguono Redis 4.0 e versioni successive. - Riduci il limite di
maxmemory-gb
dell'istanza. - Esegui l'upgrade dell'istanza.
- Scegli il criterio di espulsione appropriato.
- Imposta i TTL sulle chiavi volatili.
- Elimina manualmente le chiavi dall'istanza.
Attivare activedefrag
Se il rapporto di utilizzo della memoria di sistema supera l'80%, attiva activedefrag
(per le istanze che eseguono Redis 4.0 e versioni successive). La deframmentazione può richiedere ore per liberare la memoria frammentata. Se il traffico di scrittura è elevato, la defragmentazione da sola potrebbe non essere sufficiente per impedire all'istanza di esaurire la memoria. Pertanto, potresti dover
implementare i seguenti consigli:
Riduci il limite maxmemory dell'istanza
Se il rapporto di utilizzo della memoria di sistema supera l'80%, devi abbassare maxmemory-gb
, ma prima controlla come è cambiato il rapporto di utilizzo della memoria di sistema nel tempo per determinare quale nuovo limite di maxmemory-gb
impostare.
Scenario 1: il rapporto di utilizzo della memoria di sistema è aumentato gradualmente e lentamente. È probabile che si tratti di un problema di frammentazione e dovresti ridurre maxmemory-gb
in incrementi graduali finché il rapporto di utilizzo della memoria di sistema non si stabilizza al di sotto dell'80%.
Scenario 2: il rapporto di utilizzo della memoria di sistema ha registrato un picco rapido e noti un carico di scrittura significativo sull'istanza. È probabile che lo spike sia stato causato da un'operazione ad alta intensità di memoria. In questa situazione, devi abbassare il limite maxmemory-gb
in incrementi più elevati per assicurarti che l'istanza eviti di entrare in una condizione di esaurimento della memoria o ne esca.
Tieni presente che la riduzione di maxmemory può ridurre il rapporto di hit della cache delle istanze.
Un rapporto di hit della cache molto più basso indica che devi eseguire l'upgrade dell'istanza in modo che la tua applicazione possa trarre vantaggio dall'utilizzo di Redis. Per scoprire come regolare la configurazione di maxmemory-gb
, consulta Configurazione delle istanze Redis.
Esegui l'upgrade dell'istanza
Segui le istruzioni riportate in Scalabilità delle istanze Redis per aumentare la capacità dell'istanza.
Esempio di scalabilità di Maxmemory:
Se hai un'istanza da 10 GB con maxmemory-gb
impostato su 8 GB, hai 8 GB per memorizzare le chiavi e 2 GB di overhead di memoria. Se esegui la scalabilità dell'istanza a 20 GB,maxmemory-gb
viene scalata a 16 GB. Di conseguenza, l'istanza ora dispone di 16 GB di memoria per l'archiviazione delle chiavi e di 4 GB di overhead.
Consulta Ridimensionamento delle istanze Redis per istruzioni su come aumentare o diminuire le dimensioni dell'istanza.
Scegli il criterio di espulsione appropriato
Se memorizzi dati volatili, scegli uno dei volatile-*
criteri di espulsione.
Se memorizzi dati non volatili, scegli una delle allkeys-*
norme.
Eliminare manualmente le chiavi dall'istanza
Puoi migliorare le condizioni di esaurimento della memoria eliminando manualmente le chiavi dall'istanza. Si tratta di una soluzione temporanea che ti aiuta a migliorare lo stato di salute dell'istanza.