Come posso risolvere i problemi che comportano un utilizzo elevato della CPU nelle mie istanze Amazon DocumentDB?
Desidero risolvere i problemi che comportano un utilizzo elevato della CPU nelle mie istanze Amazon DocumentDB (compatibile con MongoDB).
Breve descrizione
L'utilizzo della CPU nelle istanze Amazon DocumentDB ti aiuta a capire come si comportano le risorse attualmente allocate per il carico di lavoro in corso.
Potresti notare un aumento dell'utilizzo della CPU per i seguenti motivi:
- Carichi di lavoro pesanti avviati dall'utente
- Query non efficienti
- Istanza di scrittura nel cluster sovraccarica perché il carico di lettura non è bilanciato nel cluster
- Istanza di lettura con configurazione hardware inferiore rispetto all'istanza di scrittura e non in grado di sincronizzarsi con un carico di lavoro di scrittura elevato
- Attività interne come la rimozione di oggetti inutili (garbage collection) nel cluster Amazon DocumentDB
- Troppe connessioni al database (inattive)
- Brevi sequenze di connessioni
Risoluzione
Utilizza le metriche di Amazon CloudWatch
Utilizza CloudWatch per raccogliere e analizzare le metriche operative dei cluster. Utilizza le metriche di CloudWatch per identificare la CPU e i suoi schemi metrici proporzionali su periodi prolungati.
Analizza e monitora le seguenti metriche nella console CloudWatch:
- Utilizza DatabaseConnections e DatabaseConnectionsMax per identificare il numero di connessioni aperte in una sequenza temporale pertinente.
- Utilizza WriteIOPS, ReadIOPS, ReadThroughput e WriteThroughput per analizzare il carico di lavoro complessivo nell'istanza Amazon DocumentDB.
- Utilizza DocumentsDeleted, DocumentsInserted, DocumentsReturned e DocumentUpdated per analizzare il carico di lavoro degli utenti nell'istanza Amazon DocumentDB.
- Se utilizzi le classi di istanza T3 o T4, esamina CPUCreditBalance e CPUsurplusCreditBalance per verificare la limitazione (della larghezza di banda della rete) per il calcolo.
Utilizza le metriche di Performance Insights
Utilizza Amazon DocumentDB Performance Insights per identificare le query che contribuiscono al carico e allo stato di attesa del database. Nell'opzione Gestisci metriche, utilizza le sessioni attive medie per esaminare il carico e la distribuzione della CPU (sistema, utente o totale).
Un carico elevato si verifica quando la media del carico supera il numero di vCPU dell'istanza. Tuttavia, se la media del carico è inferiore al numero di vCPU per la classe di istanza database, la limitazione (della larghezza di banda della rete) della CPU potrebbe non essere la causa della latenza dell'applicazione. Per identificare la causa dell'aumento dell'utilizzo della CPU, rivedi la media del carico e analizza gli stati di attesa relativi a I/O, blocchi e latch.
Utilizza le query native del database
Le query native possono aiutarti ad analizzare il carico di lavoro e controllare l'utilizzo della CPU. Per elencare tutte le operazioni attualmente eseguite in un'istanza Amazon DocumentDB, esegui questa query utilizzando la shell MongoDB:
db.adminCommand({currentOp: 1, $all: });
Per elencare tutte le query bloccate o eseguite per più di 10 secondi, esegui questa query che utilizza il comando currentOp:
db.adminCommand({ aggregate: 1, pipeline: [ {$currentOp: {}}, {$match: { $or: [ {secs_running: {$gt: 10}}, {WaitState: {$exists: true}} ] }}, {$project: { _id:0, opid: 1, secs_running: 1, WaitState: 1, blockedOn: 1, command: 1 }} ], cursor: {} });
Per analizzare i risultati dell'utilizzo del sistema, esegui questa query sull'istanza con un utilizzo elevato della CPU:
db.adminCommand({ aggregate: 1, pipeline: [ { $currentOp: { allUsers: true, idleConnections: true } }, { $group: { _id: { desc: "$desc", ns: "$ns", WaitState: "$WaitState" }, count: { $sum: 1 } } } ], cursor: {} });
La query precedente restituisce un aggregato di tutte le query eseguite in ogni namespace. Elenca inoltre tutte le attività interne del sistema e il numero univoco di stati di attesa per namespace.
Nota: la metrica GARBAGE_COLLECTION nell'ambito delle attività interne è l'implementazione del controllo della concorrenza multi-versione (MVCC) nel cluster Amazon DocumentDB. Si tratta di uno strumento di scansione in background che rimuove le versioni obsolete dei documenti ed è correlato al numero di aggiornamenti o eliminazioni nel database. Amazon DocumentDB avvia il processo di scansione in base a soglie interne a livello di raccolta e determina IOP in lettura o scrittura e utilizzo della CPU.
Verifica l'efficienza delle query
Controlla il sovraccarico dell'indice per le query di scrittura
Indici eccessivi o inutilizzati possono rallentare le operazioni di scrittura. Per migliorare le prestazioni, identifica e rimuovi gli indici non necessari controllandone le statistiche di utilizzo.
Controlla il piano di esecuzione della query
Quando una query deve cercare in tutti i documenti di una raccolta, diventa lenta. Crea indici appropriati per migliorare la velocità della query.
Utilizza il comando explain per identificare i campi in cui vuoi creare indici. Puoi inoltre utilizzare i log del profiler per acquisire le query lente e i dettagli delle relative operazioni.
Controlla le statistiche delle raccolte
Controlla le seguenti statistiche per le raccolte che utilizzi:
- Consulta la sezione Query principali in Performance Insights per identificare le raccolte che contribuiscono maggiormente al carico.
- Esamina le statistiche della raccolta per capire quante operazioni di inserimento, aggiornamento ed eliminazione esegue DocumentDB. Puoi anche controllare quante scansioni dell'indice e della raccolta completa vengono eseguite.
- Dividi le raccolte per ridurre la dimensione del documento da elaborare, in particolare se hai un gran numero di operazioni di aggiornamento.
Controlla le impostazioni della registrazione aggressiva
Amazon DocumentDB dà priorità al controllo degli eventi rispetto al traffico del database. Se non hai bisogno del controllo, puoi disattivarlo. Se hai bisogno del controllo, imposta il parametro audit_logs per registrare solo gli eventi necessari. Pianifica un aumento del carico e passa a una classe di istanza più grande, se necessario.
Per evitare una registrazione aggressiva dei log del profiler, assicurati di aver impostato il valore corretto per il parametro profiler_threshold_ms. Esamina il carico di lavoro dell'applicazione per identificare la soglia corretta richiesta per classificare una query come lenta.
Attiva l'opzione Esportazioni di log per i log che desideri esportare in CloudWatch.
Segui le best practice
Trasferisci il carico di lavoro di lettura nell'istanza di lettura
Se hai più istanze database nel cluster Amazon DocumentDB, trasferisci il carico di lavoro di lettura nell'istanza di lettura. Quando ti connetti come set di repliche, puoi specificare l'impostazione readPreference per la connessione. Se specifichi una preferenza di lettura secondaryPreferred, il client tenta di instradare le query di lettura alle repliche. Il client tenta di instradare le query di scrittura all'istanza database principale.
Nota: le istanze di lettura hanno una coerenza finale. Se un carico di lavoro richiede una maggiore coerenza di lettura dopo la scrittura, utilizza la preferenza di lettura dinamica ed ignorala a livello di query. Ad esempio, potresti scegliere come impostazione predefinita secondaryPreferred a livello di connessione in modo che le query passino a quella secondaria. Se le query richiedono una maggiore coerenza di lettura dopo la scrittura, puoi ignorare l'impostazione predefinita ed eseguire la lettura dal nodo primario.
Esempio:
db.collection.find().readPref("primary")
Aggiungi una o più istanze di lettura al cluster
Se disponi di un cluster Amazon DocumentDB con una singola istanza database (solo scrittura), aggiungi una o più istanze database di lettura al cluster. Quindi utilizza readPreference=secondaryPreferred per gestire il carico in modo efficiente.
Utilizza il profiler di Amazon DocumentDB per identificare le query lente
Utilizza il profiler di Amazon DocumentDB per registrare le query lente. Se una query appare ripetutamente nei log delle query lente, potrebbe essere necessario un indice aggiuntivo per migliorarne le prestazioni.
Verifica la presenza di query lente che includono fasi COLLSCAN nel piano di esecuzione. Una fase COLLSCAN significa che la query deve leggere tutti i documenti della raccolta per fornire una risposta alla query.
Per ulteriori informazioni, consulta Profiling slow-running queries in Amazon DocumentDB (with MongoDB compatibility) (Profilazione di query lente in Amazon DocumentDB (compatibile con MongoDB)).
Crea una notifica di allarme con CloudWatch
Crea un allarme in CloudWatch che ti avvisa quando la metrica CPU Utilization supera una determinata soglia.
Aumenta verticalmente la classe delle istanze database
Se non esiste un ulteriore ambito di ottimizzazione delle query, aumenta verticalmente la classe delle istanze nel cluster per gestire il carico di lavoro.
Nota: se aumenti verticalmente una classe di istanza, aumenta anche il costo. Per ulteriori informazioni, consulta Prezzi di Amazon DocumentDB (compatibile con MongoDB).
Informazioni correlate
Scalabilità dei cluster Amazon DocumentDB
Risoluzione dei problemi relativi alle prestazioni e all'utilizzo delle risorse
How to index on Amazon DocumentDB (with MongoDB compatibility) (Indicizzazione in Amazon DocumentDB (compatibile con MongoDB))
- Argomenti
- Database
- Lingua
- Italiano
