Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Indici poco utilizzati e ridondanti
Panoramica di
Gli indici migliorano le prestazioni complessive delle query dei carichi di lavoro, ma comportano dei costi. Ogni indice consuma spazio di archiviazione e I/O risorse e le operazioni di scrittura devono aggiornare tutti gli indici della raccolta. Se il database contiene indici inutilizzati, sottoutilizzati o ridondanti, ciò comporta un sovraccarico per il cluster, con conseguente peggioramento delle prestazioni. La presenza di più indici non necessari crea un anti-pattern che causa problemi di prestazioni, aumento dei costi di storage e maggiore sovraccarico operativo.
Scenari di indicizzazione non ottimali
-
Indici non utilizzati: indici creati per interrogazioni occasionali o in iterazioni precedenti del prodotto a cui non si accede più dai modelli di query correnti. Per identificare gli indici non utilizzati in una raccolta, puoi utilizzare IndexStats. Per ulteriori informazioni, consulta Come posso analizzare l'utilizzo degli indici e identificare gli indici non utilizzati?.
-
Indici ridondanti: più indici che coprono modelli chiave sovrapposti o modelli di query identici. Esempio: un indice a chiave singola sull'attributo A diventa ridondante quando un indice composito copre sia l'attributo A che B, poiché l'indice composito può gestire le query solo sull'attributo A.
-
Over-Indexing: creazione di indici «per ogni evenienza» senza analizzare i modelli di query o i requisiti prestazionali effettivi.
-
Indici a bassa cardinalità: indici su campi con pochi valori distinti (ad esempio campi booleani, indicatori di stato) che offrono vantaggi minimi di ottimizzazione delle query.
Impatto sulle prestazioni del cluster
-
Storage e IO: ogni indice consuma spazio di storage e risorse IO, contribuendo ai costi complessivi. Se un indice è inutilizzato o ridondante, rappresenta un costo non necessario per il cluster.
-
Prestazioni di scrittura ridotte: le operazioni di inserimento, aggiornamento ed eliminazione devono mantenere gli indici, generando un sovraccarico che consuma risorse. Gli indici non utilizzati o ridondanti aggiungono un sovraccarico non necessario a queste operazioni.
-
Memoria e pressione della CPU: gli indici competono per la memoria del pool di buffer e possono eliminare i dati a cui si accede di frequente se il workset non rientra nella memoria dell'istanza, con conseguenti risultati non ottimali. BufferCacheHitRatio Il sistema consuma anche risorse della CPU per il mantenimento delle strutture degli indici.
Strumenti disponibili per identificare le opportunità di ottimizzazione degli indici
-
Strumento di revisione dell'indice:
-
Strumento di rilevamento della cardinalità dell'indice
Raccolta del toolkit:
git clone https://github.com/awslabs/amazon-documentdb-tools.git
1. Strumento di revisione dell'indice
Lo strumento di revisione degli indici analizza tutte le raccolte e gli indici per fornire un elenco di indici, i relativi modelli di utilizzo e identifica gli indici ridondanti nel cluster Amazon DocumentDB. Esegui questo strumento su tutte le istanze del cluster per un'analisi completa. Per ulteriori informazioni, consulta Index Review Tool
Utilizzo:
cd performance/index-review/ python3 index-review.py --server-alias <server-alias> --uri <mongodb-uri>
File di output
-
{server-alias}-collections.csv: Collection-level statistiche -
{server-alias}-indexes.csv: metriche dettagliate sull'utilizzo dell'indice -
{server-alias}-{timestamp}-index-review.json: Dati grezzi per ulteriori analisi
Nota
Esegui per ogni istanza del cluster con un alias indipendente per generare statistiche da ogni istanza, quindi esegui lo strumento per ottenere un'analisi cumulativa
Ad esempio: python3 index-review.py --files "{server-alias}-{timestamp}-index-review.json, {server-alias}-{timestamp}-index-review.json" --server-alias full-review
2. Strumento di rilevamento della cardinalità dell'indice
Questo strumento identifica gli indici con bassa cardinalità che sono inefficienti per le prestazioni delle query.
Utilizzo
cd performance/index-cardinality-detection/ python3 detect-cardinality.py --uri <mongodb-uri>
Parametri
-
--threshold: percentuale della soglia di cardinalità (impostazione predefinita: 1%) -
--sample-count: Numero di documenti da campionare (impostazione predefinita: 100.000) -
--max-collections: numero massimo di raccolte da scansionare per database (impostazione predefinita: 100)
Per ulteriori informazioni, consulta https://aws.amazon.com/blogs/database/detect-and-fix-low-cardinality-indexes-in-amazon-documentdb/
Strategie di riparazione
1. Rimozione degli indici inutilizzati e ridondanti
// Example: Drop unused index db.collection.dropIndex("unused_index_name")
Nota
Gli indici non dovrebbero mai essere eliminati senza averne discusso con tutte le parti interessate e aver testato le prestazioni.
2. Ottimizzazione dell'indice di bassa cardinalità
-
Usa indici parziali con filtri
-
Converti singoli indici a bassa cardinalità in indici composti