Perché la mia istanza database Amazon RDS utilizza la memoria swap quando ho memoria sufficiente?
Sto eseguendo un'istanza database Amazon Relational Database Service (Amazon RDS). L'istanza utilizza quantità elevate di memoria swap anche se ho abbastanza memoria libera allocata. Desidero risolvere questo problema.
Breve descrizione
Le istanze Amazon Elastic Compute Cloud (Amazon EC2) che eseguono Linux utilizzano lo spazio di swap quando un sistema richiede più memoria di quella allocata. Per ulteriori informazioni, consulta Attiva il volume di swap per l’archivio di istanze per le istanze EC2 M1 e C1. Poiché la maggior parte delle istanze database RDS utilizza Linux (tranne SQL Server), il database potrebbe utilizzare la memoria swap.
Le istanze database RDS richiedono pagine nella RAM solo quando si accede alle pagine, ad esempio quando si eseguono query. Le altre pagine che vengono inserite nella RAM da query eseguite in precedenza vengono svuotate nello spazio di swap se non vengono utilizzate. È consigliabile lasciare che il sistema operativo (OS) sostituisca le pagine meno recenti anziché forzare il sistema operativo a conservare le pagine in memoria. Questo assicura che sia disponibile una quantità sufficiente di RAM libera per le query in entrata.
La memoria swap utilizzata da Linux non viene svuotata di frequente perché lo svuotamento richiede un sovraccarico aggiuntivo derivante dalla riallocazione della memoria swap quando è richiesta e quando si ricaricano le pagine. Di conseguenza, se lo spazio di swap viene utilizzato per l'istanza database RDS, anche una sola volta, le metriche SwapUsage non tornano a zero. La memoria swap può essere utilizzata anche quando si utilizzano HugePages supportate da Amazon RDS per Oracle e HugePages su Amazon RDS per PostgreSQL. Le pagine HugePages sono più grandi della dimensione predefinita di Linux di due megabyte.
Risoluzione
Per comprendere il comportamento di utilizzo dello spazio di swap per la tua istanza database RDS, controlla innanzitutto le metriche delle prestazioni del database in base al carico di lavoro dell'applicazione. Esamina le metriche FreeableMemory e SwapUsage di Amazon CloudWatch per vedere il modello complessivo di utilizzo della memoria dell'istanza database RDS. Verifica la presenza di una diminuzione della metrica FreeableMemory in concomitanza con un aumento della metrica SwapUsage. Questo può indicare una pressione sulla memoria dell'istanza database RDS. Per ulteriori informazioni, consulta Come posso risolvere il problema della scarsa memoria liberabile in un database Amazon RDS per MySQL?
Se è disponibile una quantità sufficiente di memoria liberabile, l'utilizzo dello swap non dovrebbe influire sulle prestazioni dell'istanza database RDS. Se la memoria liberabile è costantemente bassa, modifica la classe dell’istanza database RDS scegliendo una classe più grande con più memoria.
Per monitorare la memoria swap, attiva Monitoraggio avanzato, che ti permetterà di esaminare le metriche a intervalli di un solo secondo. Monitoraggio avanzato raccoglie statistiche a livello di host e CloudWatch raccoglie dati dal livello di hypervisor ogni 60 secondi. Monitoraggio avanzato identifica gli aumenti o le diminuzioni che durano un solo secondo e mostra la CPU e la memoria utilizzate dai singoli processi. Per ulteriori informazioni, consulta Visualizzazione delle metriche del sistema operativo con i log di CloudWatch.
Puoi anche attivare Performance Insights per identificare gli eventi SQL e di attesa che consumano eccessivamente spazio di swap o memoria per l'istanza database RDS. Performance Insights raccoglie i dati a livello di database e li visualizza nella dashboard Performance Insights. Utilizza Performance Insights per risolvere più facilmente i problemi relativi alle prestazioni del database. Per ulteriori informazioni, consulta Monitoraggio del carico del database con Performance Insights in Amazon RDS.
Amazon RDS per MySQL
Se la memoria disponibile è insufficiente, esegui SHOW FULL PROCESSLIST per visualizzare tutti i thread in esecuzione nel database. Per ulteriori informazioni, consulta l'istruzione SHOW PROCESSLIST sul sito web di MySQL. L'ID del processo ottenuto con SHOW FULL PROCESSLIST non corrisponde all'ID del processo mostrato da Monitoraggio avanzato. Per visualizzare l'ID corretto, modifica il gruppo di parametri database associato al database impostando Performance_Schema. Si tratta di un parametro statico, per cui è necessario riavviare l'istanza database RDS.
Nota: per evitare tempi di inattività, modifica il parametro e riavvia il database al di fuori delle ore di punta del traffico.
Una volta che la memoria ha raggiunto l'utilizzo desiderato, completa i seguenti passaggi:
- Ordina gli ID dei processi nella pagina Monitoraggio avanzato in modo da visualizzare gli ID dei processi che consumano la massima CPU.
- Esegui la seguente query come utente principale:
Per esempio, se la memoria massima viene consumata da Thread_OS_Id 10374 e 1432, esegui la seguente query:select * from performance_schema.threads where THREAD_OS_ID in (ID shown in the Enhanced Monitoring window)\G
Per ulteriori informazioni, consulta la tabella dei thread sul sito Web MySQL.select * from performance_schema.threads where THREAD_OS_ID in (10374, 1432)\G
- Ottieni la colonna PROCESSLIST_ID dall'output di questa query. La colonna riporta l'ID del processo che corrisponde al valore dell'ID del processo ottenuto con SHOW FULL PROCESSLIST.
- Dopo aver ottenuto l'ID corretto, mappalo con la query. Utilizza l'ID del processo per identificare la causa principale dell'elevato utilizzo di memoria e CPU.
Per visualizzare il processo del sistema operativo, utilizza Monitoraggio avanzato. Per ulteriori informazioni, consulta Visualizzazione delle metriche del sistema operativo nella console di RDS.
Amazon RDS per PostgreSQL
Per identificare il processo che consuma quantità elevate di memoria, mappa l'ID del processo riportato nell'elenco dei processi di Monitoraggio avanzato sulla query esatta. Per identificare il processo, esegui la seguente vista pg_stat_activity:
select * from pg_stat_activity where pid=(the PID of your process);
Quindi ottimizza le query per consumare meno risorse di calcolo.
Amazon RDS per SQL Server
Monitoraggio avanzato potrebbe identificare l’ID di un thread specifico che consuma quantità elevate di memoria. L'ID del thread è ciò che SQL Server chiama KPID (Kernal Process ID).
Da RDS per SQL Server, esegui la seguente query per ottenere l'ID del processo del server (SPID) che corrisponde al KPID:
select * from sys.sysprocesses where kpid = '<Value of Thread ID from Enhanced Monitoring>' ;
Dopo aver ottenuto l'ID del processo del server, per esempio 69, esegui il seguente comando per esaminare cosa viene fatto da SPID 69:
dbcc inputbuffer(69)
Amazon RDS per Oracle
Per identificare il processo che consuma più memoria, utilizza l'ID del processo del sistema operativo di Monitoraggio avanzato. Quindi esegui la seguente query per ottenere l'indirizzo del processo per la sessione:
select ADDR from v$process where SPID=OS_PID;
Per identificare la sessione all'interno del database, utilizza l'indirizzo del processo per eseguire la seguente query:
select sid,serial#,username, status from v$session where PADDR='<ADDR from above query>';
Quando hai attivato Monitoraggio avanzato, confronta le metriche FreeMemory e FreeableMemory. Se le metriche sono diverse, ciò può indicare che nella cache o nella memoria inattiva viene utilizzata una grande quantità di memoria. Questo utilizzo della memoria può comportare un elevato utilizzo dello swap. Potrebbe essere necessario svuotare la cache. Per ulteriori informazioni sullo svuotamento della cache, consulta Svuotamento della cache di buffer.
Nota: lo svuotamento della cache di buffer potrebbe incidere negativamente sulle prestazioni del database.
Informazioni correlate
Video correlati


Contenuto pertinente
- AWS UFFICIALEAggiornata 3 anni fa
- AWS UFFICIALEAggiornata 6 mesi fa