Come faccio a risolvere i problemi e risolvere l'elevato utilizzo della CPU sulle mie istanze Amazon DocumentDB?

8 minuti di lettura
0

Riscontro un elevato utilizzo della CPU sulle mie istanze DB Amazon DocumentDB (con compatibilità con MongoDB).

Breve descrizione

L'utilizzo della CPU delle tue istanze Amazon DocumentDB ti aiuta a capire come si comportano le risorse attualmente allocate per il carico di lavoro in corso.

È possibile osservare un aumento dell'utilizzo della CPU per i seguenti motivi:

  • Carichi di lavoro pesanti avviati dall'utente
  • Interrogazioni non efficienti
  • Il writer nel cluster è sovraccarico perché il carico di lettura non è bilanciato nel cluster
  • Il lettore ha una configurazione hardware inferiore rispetto al writer e non può 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 database (inattive)
  • Brevi sequenze di connessioni

Per identificare le principali fonti di utilizzo della CPU nella tua istanza Amazon DocumentDB, esamina questi aspetti:

  • Metriche di Amazon CloudWatch
  • Informazioni sulle prestazioni
  • Queries native database
  • Verifica l'efficienza delle query
  • Impostazioni di registrazione aggressive

Dopo aver identificato la causa, analizza e ottimizza il carico di lavoro per ridurre l'utilizzo della CPU. Se il problema persiste, aumenta le dimensioni dell'istanza in base al carico di lavoro.

Risoluzione

Usa metriche di CloudWatch

Amazon DocumentDB si integra con CloudWatch e consente di raccogliere e analizzare i parametri operativi per i cluster.

Le metriche di CloudWatch consentono di identificare la CPU e i relativi modelli di metrici proporzionali per periodi prolungati. Esamina questi parametri e poi monitorali nella console CloudWatch:

  • Utilizza DatabaseConnections e DatabaseConnectionsMax per identificare il numero di connessioni aperte in una sequenza temporale pertinente.
  • Usa WriteIOPS, ReadIOPS, ReadThroughput e WriteThroughput per comprendere il carico di lavoro complessivo sulla tua istanza Amazon DocumentDB.
  • Utilizza DocumentsDeleted, DocumentsInserted, DocumentsReturned e DocumentsUpdated. Le metriche possono aiutarti a comprendere il carico di lavoro degli utenti sulla tua istanza Amazon DocumentDB.
  • Se utilizzi le classi di istanze T3 o T4, esamina CPUCreditBalance e CPUsurplusCreditBalance per verificare la limitazione del calcolo.

Metriche di Performance Insights

Usa Amazon DocumentDB Performance Insights per identificare le query che contribuiscono al caricamento e allo stato di attesa del database. Nell'opzione Manage Metrics, utilizza la media delle sessioni attive per esaminare il carico e la distribuzione della CPU (system%, user% o total%).

Una media di carico superiore al numero di vCPU indica che l'istanza è sottoposta a un carico pesante. Ad esempio, la media di carico potrebbe essere inferiore alle vCPU per la classe di istanze DB. Ciò indica che la limitazione della CPU potrebbe non essere la causa della latenza dell'applicazione. Controlla la media del carico e analizza gli stati di attesa pertinenti per comprendere l'origine dell'utilizzo aggiuntivo della CPU, ad esempio I/O, blocchi e latch.

Usa le query native del database

Le query native possono aiutarti ad analizzare il carico di lavoro e controllare l'utilizzo della CPU. Usa la shell (interprete di comandi) MongoDB per eseguire questa query. Questo elenca tutte le operazioni attualmente eseguite su un'istanza Amazon DocumentDB:

db.adminCommand({currentOp: 1, $all: });

Questa query utilizza il comando currentOp per elencare tutte le query bloccate o eseguite per più di 10 secondi:

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 su cui si osserva un utilizzo elevato della CPU. Questa query 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.

db.adminCommand({aggregate: 1,
                 pipeline: [{$currentOp: {allUsers: true, idleConnections: true}},
                            {$group: {_id: {desc: "$desc", ns: "$ns", WaitState: "$WaitState"}, count: {$sum: 1}}}],
                 cursor: {}
                });

Nota: La metrica GARBAGE_COLLECTION nelle attività interne è l'implementazione MVCC nel cluster Amazon DocumentDB. Si tratta di uno strumento di scansione in background che rimuove le versioni obsolete dei documenti e si riferisce al numero di aggiornamenti o eliminazioni sul database. Il processo di scansione viene attivato in base a soglie interne a livello di raccolta e comporta IOP di lettura/scrittura e utilizzo della CPU.

Verifica l'efficienza delle query

Controlla il sovraccarico dell'indice per le query di scrittura

Troppi indici o molti indici inutilizzati associati al database possono contribuire al sovraccarico aggiuntivo per le tue scritture. Esamina le statistiche dell'indice per analizzare l'utilizzo dell'indice e identificarle.

Controlla il piano di spiegazione della query

Le query possono essere eseguite lentamente perché richiedono una scansione completa della raccolta per scegliere i documenti pertinenti. Crea indici appropriati per migliorare la velocità della query.

Usa il comando explain per identificare i campi su cui vuoi creare indici. È inoltre possibile utilizzare i log del profiler per acquisire le query di lunga durata e i dettagli delle relative operazioni.

Controlla le statistiche delle collezioni

Controlla queste statistiche per le collezioni che utilizzi:

  • Consulta la sezione Domande principali sotto Performance Insights per identificare le raccolte che contribuiscono maggiormente al carico.
  • Esamina le statistiche della raccolta per comprendere la quantità di operazioni di inserimento, aggiornamento ed eliminazione eseguite su di essa. Puoi anche controllare la quantità di scansioni dell'indice e delle scansioni complete della raccolta eseguite.
  • Dividi le tue raccolte per ridurre le dimensioni del documento da elaborare, in particolare se hai un gran numero di operazioni di aggiornamento.

Controlla le impostazioni di registrazione aggressive

L'audit di eventi ha la priorità rispetto al traffico del database. Se il controllo non è necessario, puoi disattivarlo. Se è necessario il controllo, imposta il parametro audit\ _logs per registrare solo gli eventi necessari. Pianifica un aumento del carico, quindi passa a una classe di istanze più grande, se necessario.

Per i log del profiler, assicuratevi che sia impostato il valore corretto per il parametro profiler\ _threshold\ _ms per evitare una registrazione aggressiva. Esamina il carico di lavoro dell'applicazione per identificare la soglia corretta richiesta per classificare una query come a lunga esecuzione.

Conferma di aver attivato l'opzione esportazione dei log per i log che desideri esportare su CloudWatch.

Usa le migliori pratiche

Trasferisci il carico di lavoro di lettura sul reader

Se hai più istanze database nel tuo cluster Amazon DocumentDB, trasferisci il carico di lavoro di lettura sull'istanza Reader. Quando ci si connette come set di repliche, è possibile specificare la readPreference per la connessione. Se specifichi una preferenza di lettura di secondaryPreferred, il cliente tenta di indirizzare le query di lettura alle tue repliche. Il cliente tenta di indirizzare le query di scrittura all'istanza DB principale.

Nota che i reader alla fine hanno una certa coerenza. Se un carico di lavoro richiede una maggiore coerenza di lettura dopo scrittura, utilizza la preferenza di lettura dinamica e sovrascrivila a livello di query. Ad esempio, potresti impostare come impostazione predefinita secondaryPreferred a livello di connessione in modo che le query passino a secondarie. Se hai delle query che richiedono una maggiore coerenza read-after-write, puoi sovrascrivere l'impostazione predefinita. Segui questo esempio:

db.collection.find().readPref("primary")

Aggiungi una o più istanze reader al cluster

Se disponi di un cluster Amazon DocumentDB con una singola istanza DB (solo writer), e poi aggiungi una o più istanze DB di lettore al cluster. Quindi, usa readPreference=secondaryPreferred per gestire il carico in modo efficiente.

Usa Amazon DocumentDB Profiler per identificare le query lente

Usa Amazon DocumentDB Profiler per registrare le query lente. Se una query appare ripetutamente nei log delle query lente, potrebbe essere necessario un indice aggiuntivo per migliorare le prestazioni.

Cerca le query di lunga durata che hanno una o più fasi che eseguono almeno una fase COLLSCAN. Ciò indica che la fase di interrogazione deve leggere ogni documento della raccolta per fornire una risposta alla query.

Per ulteriori informazioni, consulta Profilare le query a esecuzione lenta in Amazon DocumentDB (compatibile con MongoDB).

Crea una notifica di allarme con CloudWatch

Crea un allarme CloudWatch che ti avvisa quando la metrica di utilizzo della CPU supera una soglia specifica.

Espandi la classe di istanze delle tue istanze database

Se non esiste un ulteriore ambito di ottimizzazione delle query, aumenta la classe di istanze di istanze nel cluster per gestire il carico di lavoro.

Nota: Se aumenta una classe di istanza, ciò aumenta il costo. Per ulteriori informazioni, consulta i prezzi di Amazon DocumentDB.

Informazioni correlate

Dimensiona i cluster Amazon DocumentDB

Prestazioni e utilizzo delle risorse

Come indicizzare su Amazon DocumentDB (compatibile con MongoDB)

AWS UFFICIALE
AWS UFFICIALEAggiornata 7 mesi fa