Perché le query sono lente nel mio cluster Amazon DocumentDB?
Desidero risolvere i problemi delle query lente nel mio cluster Amazon DocumentDB (compatibile con MongoDB) per migliorare le prestazioni.
Risoluzione
Potresti riscontrare un rallentamento delle query in un cluster Amazon DocumentDB per i seguenti motivi:
- Hardware sottodimensionato
- Modifiche del carico di lavoro
- Aumento del traffico
- Problemi di memoria
- Piani di query non ottimali
Monitora il carico di lavoro
Per comprendere la causa principale dei problemi di prestazioni del database, controlla tutte le risorse a livello di server utilizzate dall'istanza. Monitora il carico di lavoro e verifica quando le prestazioni delle query sono state ottimali e quando l'esecuzione della query ha iniziato a richiedere molto tempo.
Utilizza le metriche di Amazon CloudWatch
Per analizzare le prestazioni del cluster, utilizza le metriche di CloudWatch per Amazon DocumentDB. Per identificare i colli di bottiglia delle prestazioni causati da risorse insufficienti, utilizza metriche come CPUUtilization e FreeableMemory. Per capire come ottimizzare la memoria, utilizza metriche come BufferCacheHitRatio e LowMemNumOperationsThrottled.
Monitora le metriche a livello operativo per comprendere il carico di lavoro dell'istanza. Metriche utili sono, ad esempio, DocumentsInserted, DocumentsReturned, DocumentsDeleted e TransactionsAborted. Per ulteriori informazioni, consulta Monitoring metrics and setting up alarms on your Amazon DocumentDB (with MongoDB compatibility) clusters (Monitoraggio delle metriche e impostazione degli allarmi nei cluster Amazon DocumentDB (compatibile con MongoDB)).
Utilizza Performance Insights
Utilizza Performance Insights per valutare i carichi di lavoro del database suddivisi per attese, query, host, database e applicazioni. Acquisisci informazioni dettagliate sulla query e il contatore, quindi valuta quali query contribuiscono maggiormente al carico del database. Un carico del database superiore al valore vCPU Max mostra un carico di lavoro con limitazione (della larghezza di banda della rete) nella classe di istanza. Analizza il testo della query per ottimizzare le query.
Utilizza i log del profiler
Utilizza il profiler di Amazon DocumentDB per registrare il tempo di esecuzione e i dettagli delle operazioni eseguite nel cluster. Il profiler consente di monitorare le operazioni più lente nel cluster. Questo ti permette di migliorare le prestazioni delle singole query e le prestazioni complessive del cluster.
Utilizza i metodi del database
Esegui periodicamente questo comando currentOp() nell'istanza Amazon DocumentDB per monitorare l'utilizzo del sistema nel tempo:
db.adminCommand({currentOp: 1, $all: 1});
Per contare il numero di query e operazioni in ogni namespace del sistema, esegui questo comando:
db.adminCommand({ aggregate: 1, pipeline: [ { $currentOp: { allUsers: true, idleConnections: true } }, { $group: { _id: { desc: "$desc", ns: "$ns", WaitState: "$WaitState" }, count: { $sum: 1 } } } ], cursor: {} });
Dopo aver eseguito il comando, analizza i risultati di utilizzo del sistema per comprendere il carico sul sistema e intraprendere le azioni appropriate.
Ottimizza le query
Dopo aver identificato le query lente, ottimizzale per migliorarne le prestazioni.
Utilizza il pianificatore di query corretto
Per migliorare le prestazioni, utilizza piani di indicizzazione ottimali e attiva il supporto per la scansione degli indici per gli operatori. Per Amazon DocumentDB versione 5.0 e successive, utilizza la versione 2.0 del pianificatore per sfruttare un pianificatore di query avanzato che ottimizza le operazioni fondamentali come i comandi find, update, delete e find-and-modify. Per determinati modelli di query in cui non viene selezionato l'indice ottimale, questa versione aggiunge il supporto per la funzionalità di filtro della cache dei piani, che ti consente di specificare un elenco di indici per una determinata struttura di query.
Analizza le statistiche di una query
Per ottimizzare le prestazioni delle query, analizza come vengono eseguite utilizzando executionStats. executionStats fornisce il numero di documenti elaborati in ogni fase della query, la durata di esecuzione di ciascuna fase e il numero di tentativi effettuati per generare un piano di query.
Per visualizzare le statistiche della query, esegui questo comando:
query.explain("executionStats");
Esempio di operazione:
db.collection.find({}).limit(2).explain("executionStats");
L'esempio di operazione precedente analizza le prestazioni di una query quando tenti di trovare due documenti.
Analizza le statistiche restituite. Puoi aggiungere un indice per ridurre le scansioni complete della raccolta e limitare il numero di documenti che la query deve scansionare. È consigliabile testare eventuali nuovi indici e valutarne le prestazioni. Utilizza l'opzione di clonazione o ripristino degli snapshot per creare un ambiente di test.
Verifica la presenza di indici inefficienti nell'istanza
Ogni indice comporta un aumento della latenza di scrittura, dell'utilizzo della CPU, delle operazioni di I/O e dello spazio di archiviazione complessivamente utilizzato nella risorsa. Sebbene gli indici possano migliorare le prestazioni delle query, è consigliabile rivederli periodicamente e rimuovere quelli inutilizzati.
Per visualizzare un'analisi dettagliata della frequenza di accesso a ciascun indice, esegui un comando simile a questo esempio:
db.collection.aggregate([{$indexStats:{}}]).pretty()
Per visualizzare il numero totale di scansioni eseguite con gli indici (scansioni degli indici), esegui questo comando:
db.collection.stats()
Confronta il conteggio della query precedente con il numero di scansioni eseguite senza indice (scansioni della raccolta). Quindi analizza la frequenza con cui le operazioni utilizzano gli indici quando accedono a una raccolta.
Chiudi i cursori inattivi nell'istanza
Le istanze Amazon DocumentDB hanno un limite di cursori attivi aperti in un determinato momento. Il limite è determinato dal tipo di istanza utilizzato. Per ulteriori informazioni, consulta Limiti di istanze. Utilizza CloudWatch per monitorare la metrica DatabaseCursors in CloudWatch ed esaminare il numero di cursori aperti.
Per visualizzare maggiori dettagli sui cursori aperti, esegui un comando simile a questo esempio:
db.runCommand("listCursors")
È consigliabile chiudere i cursori dopo averli utilizzati per evitare la limitazione (della larghezza di banda della rete). I cursori inattivi utilizzano CPU e memoria per monitorare la coda associata.
Informazioni correlate
Risoluzione dei problemi relativi alle prestazioni e all'utilizzo delle risorse
- Argomenti
- Database
- Lingua
- Italiano

Contenuto pertinente
AWS UFFICIALEAggiornata 6 mesi fa
AWS UFFICIALEAggiornata 8 mesi fa