Un'istanza Memorystore for Redis, se non gestita e configurata correttamente, può avere una pressione di 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 da parte della tua istanza.
In questo argomento:
Concetti di gestione della memoria - concetti chiave che devi conoscere per aiutarti a mantenere l'integrità di Memorystore.
Operazioni che richiedono molta memoria: operazioni che possono causare una pressione della memoria.
Monitorare l'utilizzo della memoria dell'istanza - metriche da monitorare per scoprire come la tua istanza utilizza la memoria.
Risoluzione di una condizione di memoria insufficiente: passaggi da seguire per risolvere i problemi relativi a una condizione di memoria insufficiente.
Dimensioni giuste dell'istanza Memorystore: anziché creare un'istanza con provisioning eccessivo, scopri come ridimensionare le tue istanze.
Concetti di gestione della memoria
Questa sezione introduce i concetti che è necessario comprendere per gestire l'utilizzo della memoria dell'istanza.
Capacità istanza
- La capacità dell'istanza è la quantità di memoria di cui esegui il provisioning in Gigabyte (GB) e l'importo che ti viene addebitato. Per ulteriori dettagli sulla selezione della capacità dell'istanza corretta, consulta Dimensioni dell'istanza Memorystore.
Configurazione Maxmemory
Maxmemory è una configurazione Redis che ti consente di impostare il limite di memoria in base al quale viene applicato il criterio di rimozione. Memorystore per Redis indica questa configurazione come
maxmemory-gb
. Quando crei un'istanza,maxmemory-gb
viene impostata sulla capacità dell'istanza. A seconda della metrica del rapporto di utilizzo della memoria di sistema, potrebbe essere necessario ridurre 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 informazioni su come modificare
maxmemory-gb
, consulta Configurazione delle istanze Redis.
Rapporto di utilizzo della memoria di sistema
La metrica Rapporto utilizzo memoria di sistema ti 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 dalle operazioni ad alta intensità di memoria e dalla frammentazione della memoria, 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 e devi seguire le istruzioni nella sezione 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 dovuto a una 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 un picco pari o superiore all'80%, potresti aver utilizzato una delle operazioni ad alta intensità di memoria.
Dovresti avere un rapporto di utilizzo della memoria di sistema del 50% o inferiore durante gli aggiornamenti di manutenzione. Inoltre, a volte l'esportazione richiede un rapporto di utilizzo della memoria di sistema del 50% o inferiore.
Memoria utilizzata
- La metrica memoria utilizzata mostra la quantità di dati presente nell'istanza di Memorystore. La memoria utilizzata di un'istanza può crescere fino al limite di configurazione
maxmemory-gb
. Quando la memoria utilizzata supera il limite dimaxmemory-gb
, viene applicato il criterio di rimozione.
Norme per l'eliminazione
Il criterio di eliminazione dell'istanza (noto anche come criterio maxmemory) determina il modo in cui Redis elimina le chiavi quando i dati della tua istanza raggiungono il limite
maxmemory-gb
. Redis rileva le chiavi come parte del normale caso d'uso della cache. L'eliminazione delle chiavi avviene come un processo in background, pertanto le chiavi non vengono rimosse immediatamente dopo il raggiungimento del limite dimaxmemory-gb
. Una frequenza di scrittura elevata potrebbe superare lo sfratto della chiave, generando una condizione di memoria insufficiente.Il criterio di eliminazione predefinito di un'istanza Memorystore è
volatile-lru
. Se utilizzi un criterio di eliminazionevolatile-*
, assicurati di impostare i TTL sulle chiavi che vuoi far scadere, altrimenti Redis non ha chiavi da rimuovere.Per un elenco dei criteri di eliminazione, consulta la sezione Criteri di memoria massima.
Per scoprire come modificare il criterio di rimozione, consulta Configurazione delle istanze Redis.
Frammentazione della memoria
- La frammentazione della memoria può causare l'esaurimento della memoria dell'istanza Memorystore anche quando la proporzione tra memoria utilizzata e
maxmemory-gb
è bassa. La frammentazione della memoria si verifica quando il sistema operativo alloca pagine di memoria che Redis non può utilizzare completamente dopo operazioni di scrittura ed eliminazione ripetute. L'accumulo di queste pagine può causare l'esaurimento della memoria del sistema e, in ultima analisi, causare l'arresto anomalo del server Redis. La configurazione Redisactivedefrag
può aiutare a ridurre la frammentazione.
Deframmentazione attiva
Le versioni Redis 4.0 e successive forniscono una configurazione
activedefrag
. Se possibile, devi creare l'istanza Memorystore utilizzando Redis 4.0. Memorystore imposta "activedefrag
" per impostazione predefinita. L'impostazione diactivedefrag
su "yes" comporta un compromesso della CPU, ma può aiutare a mitigare la frammentazione della memoria, il che contribuisce a problemi di memoria insufficiente.Se la metrica relativa al rapporto di utilizzo della memoria di sistema indica la frammentazione della memoria, devi attivare
activedefrag
. In caso contrario,activedefrag
rimane un'impostazione facoltativa.
Operazioni che utilizzano la memoria
Le seguenti operazioni utilizzano una memoria significativa, soprattutto se eseguite in combinazione con una frequenza di scrittura elevata:
Operazione di esportazione
La funzionalità di esportazione Memorystore utilizza l'operazione Redis BGSAVE, che utilizza la copia e la scrittura. A seconda delle dimensioni dei dati, del volume di scrittura e delle chiavi toccate, la memoria richiesta per un'esportazione può raddoppiare lo spazio occupato dai dati. Pertanto, per avere successo, potrebbe essere necessario ridurre il limite maxmemory-gb
al 50% della capacità dell'istanza durante le esportazioni.
Operazioni di scalabilità e upgrade delle versioni
Scalabilità o upgrade durante periodi di carico di scrittura elevato può sovraccaricare la memoria dell'istanza a causa del sovraccarico della memoria causato dalla replica. Inoltre, un carico di lettura elevato può aumentare le dimensioni del buffer di output di Redis, con conseguente aumento della pressione di memoria. Se un'operazione di scalabilità o upgrade non riesce a causa della pressione della memoria, devi:
- Riduci il
maxmemory-gb
al 50% della capacità della tua istanza prima di eseguire un'operazione di scalabilità/upgrade. Se possibile, dovresti ridurre anche la memoria massima durante i periodi di traffico ridotto delle istanze, perché l'impatto riduce l'impatto negativo che riduce la memoria massima sul tuo rapporto hit cache. - Scala/esegui l'upgrade in periodi di scrittura ridotta.
Manutenzione
La gestione aggiunge anche una pressione alla memoria alla tua istanza. Dovresti adottare misure in modo che la metrica del rapporto di utilizzo della memoria di sistema sia del 50% o inferiore al momento della manutenzione pianificata. Per farlo, pianifica un orario in cui il traffico dell'istanza è basso o fai lo scale up temporaneo delle dimensioni dell'istanza durante il periodo di manutenzione in modo che la metrica del rapporto di utilizzo della memoria di sistema sia del 50% o inferiore.
Monitora l'utilizzo della memoria dell'istanza
Monitora le metriche e imposta gli avvisi descritti in questa sezione. Queste metriche e questi avvisi forniscono insight 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 completo della metrica |
---|---|
Memoria max | 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 di sovraccarico 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 le dimensioni del tuo set di lavoro stanno per raggiungere il limite di maxmemory-gb
. A meno che il criterio di eliminazione non sia impostato su "senza rimozione", i dati dell'istanza che raggiungono il valore massimo di memoria non indicano sempre un problema. Tuttavia, l'eliminazione principale è 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 rimuovere 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 garantire che l'istanza disponga di memoria sufficiente per supportare il carico di lavoro e altre operazioni che richiedono molta memoria, è importante disporre sempre di una memoria di sistema sufficiente.
Imposta un avviso per ricevere una notifica se la metrica relativa al rapporto di utilizzo della memoria di sistema raggiunge l'80%. Se raggiunge l'80%, dovresti iniziare a monitorare più da vicino la metrica del rapporto di utilizzo della memoria di sistema. Se la percentuale di utilizzo della memoria di sistema continua a crescere in modo significativo, devi attivare defrag attivo, ridurre la memoria massima e valutare la scalabilità dell'istanza.
Quando il rapporto di utilizzo della memoria di sistema raggiunge il 100%, qualsiasi operazione che aumenta ulteriormente l'impatto della memoria dell'istanza viene bloccata e Redis restituisce il seguente errore:
-OOM command not allowed under OOM prevention.
Per ulteriori dettagli, consulta la sezione Gestire il rapporto di utilizzo della memoria di sistema.
Durata di sovraccarico memoria di sistema
Se la memoria utilizzata è troppo elevata, Memorystore blocca le scritture nella tua istanza per mantenerla in stato integro. Durata del sovraccarico della memoria di sistema: monitora per quanto tempo l'istanza è in stato di scrittura bloccata.
Dovresti impostare un avviso per questa metrica per sapere quando le scritture vengono bloccate per l'istanza. Inoltre, puoi fare riferimento a questa metrica per risolvere i problemi di ricezione dell'errore -OOM command not allowed under OOM prevention.
.
Percentuale successi cache
Dovresti monitorare regolarmente il rapporto hit cache, in modo da sapere quale percentuale di ricerche delle chiavi viene restituita correttamente dalle chiavi della tua istanza Redis. In generale, un tasso di successo della cache più elevato è migliore di un rapporto più basso della cache. Prendi nota del rapporto hit da cache prima di apportare modifiche di configurazione di grandi dimensioni, ad esempio regolando il limite di maxmemory-gb
, modificando il criterio di eliminazione o scalando l'istanza. Dopo aver modificato l'istanza, controlla di nuovo il rapporto hit da cache per vedere l'impatto della modifica su questa metrica.
Chiavi esauribili e scadute
Le chiavi espirati della metrica Stackdriver monitorano il numero di chiavi impostate per la scadenza. L'assenza di chiavi espirati può indicare che non stai impostando TTL sulle chiavi. In questi casi, quando i dati dell'istanza raggiungono il limite maxmemory-gb
, non sono presenti chiavi da rimuovere che possono comportare una condizione di memoria esaurita se utilizzi un criterio di eliminazione volatile-*
.
Un'altra metrica che puoi monitorare sono le chiavi scadute. Se la metrica mostra molte chiavi scadute, ma noti ancora una pressione di memoria sull'istanza, devi ridurre il numero di maxmemory-gb
.
Risolvere una condizione di memoria insufficiente
Di seguito sono riportate alcune best practice da seguire se la tua istanza riscontra una pressione della memoria o si verifica un errore di memoria esaurita.
Se utilizzi un criterio di eliminazione
volatile-*
, assicurati di impostare i TTL sulle chiavi che vuoi far scadere. Per ulteriori dettagli, consulta le norme relative all'eliminazione.Per le istanze che utilizzano Redis 4.0 e versioni successive:
- Attiva
activedefrag
per la tua istanza. Per ulteriori dettagli, consulta la pagina Derammentazione attiva.
- Attiva
Scopri come utilizzare le metriche per risolvere i problemi relativi alle condizioni di memoria e ottenere insight sull'utilizzo della memoria dell'istanza: Monitorare l'utilizzo della memoria dell'istanza, Gestire il rapporto di utilizzo della memoria di sistema.
Scopri come regolare la memoria massima durante l'esecuzione di operazioni con memoria elevata.
Se la metrica Rapporto di memoria del sistema supera l'80%, riduci il limite di
maxmemory-gb
della tua istanza. Per ulteriori dettagli, consulta la sezione Gestire il rapporto di utilizzo della memoria di sistema.Valuta la possibilità di scalare la tua istanza.
Se riscontri ancora condizioni OOM, contatta l'assistenza Google Cloud Platform.
Ridimensiona la tua istanza Memorystore
Questa sezione illustra tre approcci distinti che consentono di dimensionare correttamente l'istanza in base al carico di lavoro:
- Determina le dimensioni iniziali di un'istanza Memorystore spiega come stimare le dimensioni prima di crearla.
- Monitorare l'utilizzo della memoria da parte dell'istanza: definisce le metriche che forniscono informazioni utili su come l'istanza utilizza la memoria.
- Gestisci il rapporto di utilizzo della memoria di sistema ti spiega cosa fare se il rapporto di utilizzo della memoria di sistema supera l'80%.
Determina le dimensioni iniziali di un'istanza Memorystore
Innanzitutto, devi scegliere se vuoi un'istanza di livello Standard o di livello base. Per ulteriori informazioni sui livelli Memorystore for Redis, consulta le funzionalità del livello Redis. Dopo aver selezionato il livello giusto per l'applicazione, segui questi passaggi per determinare la dimensione dell'istanza necessaria:
Determina le dimensioni dei dati.
- Stima il numero e il numero medio di chiavi che l'applicazione scriverà nell'istanza Redis. Moltiplica questi valori per ottenere una stima approssimativa delle dimensioni delle istanze di cui hai bisogno.
Scegli una norma di rimozione.
- Se utilizzi il criterio maxmemory
noeviction
, la dimensione dell'istanza deve essere abbastanza grande da contenere il carico di lavoro di picco e il set di lavoro. Se esaurisci la memoria con questo criterio maxmemory, l'istanza può inserire una condizione di memoria esaurita. - Altri criteri di rimozione non influiscono sulle dimensioni dell'istanza di cui devi eseguire il provisioning.
- Se utilizzi il criterio maxmemory
Esegui il provisioning di più memoria per le istanze di livello Standard
- A differenza delle istanze del livello base, le istanze del livello Standard riservano il 10% della capacità dell'istanza come buffer di replica. Se scegli un'istanza di livello Standard, assicurati di eseguire la stima dei dati del passaggio 1 ed esegui il provisioning di un ulteriore 10% per il buffer di replica.
Stima la percentuale di scrittura media e di picco
- Se possibile, stima la frequenza di scrittura e le dimensioni delle chiavi che verranno utilizzate dall'applicazione. La frequenza di scrittura rispetto alla frequenza di rimozione delle chiavi determina la velocità di crescita dell'istanza nel tempo.
Fai lo scale up per raggiungere il rapporto hit dalla cache desiderato
- Monitora il rapporto degli hit della cache e, se non ricevi tutti gli hit della cache che vuoi, significa che devi aumentare le dimensioni dell'istanza o assicurarti che l'applicazione stia scrivendo le chiavi per l'istanza Memorystore richieste e non completate.
Determina se la tua istanza blocca le scritture a causa di una condizione di memoria insufficiente
Se viene visualizzato il seguente errore:
-OOM command not allowed under OOM prevention.
Poi, controlla se:
- La metrica del rapporto di utilizzo della memoria di sistema ha superato l'80% subito prima che l'istanza iniziasse 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 mostrava valori superiori a zero durante lo stesso periodo in cui si verificavano le scritture bloccate.
Se sì, è probabile che l'istanza stia bloccando le scritture a causa di una condizione di memoria insufficiente.
Gestire il rapporto di utilizzo della memoria di sistema
Imposta un avviso per sapere se la metrica Rapporto di utilizzo della memoria di sistema supera l'80%. Se il rapporto di utilizzo della memoria di sistema supera l'80%, devi intraprendere le azioni appropriate in modo che l'istanza non esaurisca la memoria. A seconda del volume di scrittura e del pattern di accesso alle chiavi, l'utilizzo della memoria di sistema potrebbe aumentare rapidamente fino al 100%. Memorystore offre i seguenti modi per gestire il rapporto di utilizzo della memoria di sistema:
- Attiva
activedefrag
per le istanze che utilizzano Redis 4.0 e versioni successive. - Riduci il limite
maxmemory-gb
della tua istanza. - Fare lo scale up dell'istanza.
- Scegli la politica di rimozione appropriata.
- Imposta TTL su chiavi volatili.
- Elimina manualmente le chiavi dalla tua istanza.
Attiva Activedefrag
Se il rapporto di utilizzo della memoria di sistema supera l'80%, attiva activedefrag
(per le istanze che utilizzano Redis versione 4.0 e successive). Per sminuire la frammentazione possono essere necessarie alcune ore
per rilasciare la memoria frammentata. Se il traffico di scrittura è elevato, la franchigia da sola potrebbe non essere sufficiente a impedire l'esaurimento dell'istanza della memoria. Pertanto, potresti dover implementare i seguenti consigli:
Riduci il limite di memoria massima dell'istanza
Se il rapporto di utilizzo della memoria di sistema supera l'80% devi ridurre il valore
maxmemory-gb
, ma prima osservare come è cambiato il rapporto di utilizzo della memoria di sistema nel tempo per determinare quale nuovo limite di maxmemory-gb
impostare.
Scenario 1: la percentuale di utilizzo della memoria di sistema è aumentata gradualmente e lentamente. La frammentazione è un problema probabile e dovresti diminuire maxmemory-gb
per piccoli incrementi 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 è aumentato rapidamente e viene visualizzato un carico di scrittura significativo sull'istanza. È probabile che il picco di attività sia dovuto a un'operazione che richiede molta memoria. In questa situazione, devi ridurre il limite maxmemory-gb
in incrementi maggiori per assicurarti che l'istanza eviti di inserire una condizione di memoria esaurita o che recuperi da una condizione di memoria esaurita.
Tieni presente che la riduzione di maxmemory può ridurre le istanze di hit della cache delle tue istanze.
Un rapporto hit cache molto più basso indica che dovresti fare lo scale up della tua istanza in modo che la tua applicazione possa trarre vantaggio dai vantaggi dell'utilizzo di Redis. Per scoprire come regolare la configurazione maxmemory-gb
, consulta Configurazione delle istanze Redis.
Fai lo scale up della tua istanza
Segui le istruzioni per scalare le istanze Redis per aumentare la capacità dell'istanza.
Esempio di scalabilità da memoria massima:
Se hai un'istanza di 10 GB con maxmemory-gb
impostato su 8 GB, hai 8 GB per l'archiviazione delle chiavi e 2 GB di memoria sovraccarico. Se la scalabilità dell'istanza è a 20 GB, maxmemory-gb
viene scalato a 16 GB. Quindi, la tua istanza ora ha 16 GB di memoria per l'archiviazione delle chiavi e 4 GB di overhead.
Consulta Scalabilità delle istanze Redis per istruzioni su come aumentare o diminuire le dimensioni dell'istanza.
Scegli la norma di rimozione appropriata
Se stai archiviando dati volatili, scegli una delle volatile-*
norme di eliminazione.
Se stai archiviando dati non volatili, scegli uno dei criteri allkeys-*
.
Elimina manualmente le chiavi dalla tua istanza
Puoi migliorare le condizioni di memoria eliminando manualmente le chiavi dalla tua istanza. Questa è una soluzione temporanea che ti aiuta a migliorare l'integrità delle istanze.