Indicizzazione delle metriche in Azure Cosmos DB
SI APPLICA A: NoSQL
Azure Cosmos DB fornisce metriche di indicizzazione per mostrare sia i percorsi indicizzati usati che i percorsi indicizzati consigliati. È possibile usare le metriche di indicizzazione per ottimizzare le prestazioni delle query, soprattutto nei casi in cui non si è certi di come modificare i criteri di indicizzazione).
Versioni di SDK supportate
Le metriche di indicizzazione sono supportate nelle versioni dell'SDK seguenti: | SDK | Versioni supportate | | --- | --- | | .NET SDK v3 | >= 3.21.0 | | Java SDK v4 | >= 4.19.0 | | Python SDK | >= 4.6.0 |
Abilitare le metriche di indicizzazione
È possibile abilitare l'indicizzazione delle metriche per una query impostando la proprietà PopulateIndexMetrics
su true
. Se non specificato, PopulateIndexMetrics
si imposta per default su false
. Si consiglia di abilitare solo le metriche dell'indice per la risoluzione dei problemi relativi alle prestazioni delle query. Fino a quando le query e i criteri di indicizzazione rimangano invariati, è poco probabile che le metriche dell'indice cambino. Si consiglia invece di identificare query dispendiose monitorando l'addebito e la latenza delle UR di query usando i log di diagnostica.
string sqlQueryText = "SELECT TOP 10 c.id FROM c WHERE c.Item = 'value1234' AND c.Price > 2";
QueryDefinition query = new QueryDefinition(sqlQueryText);
FeedIterator<Item> resultSetIterator = container.GetItemQueryIterator<Item>(
query, requestOptions: new QueryRequestOptions
{
PopulateIndexMetrics = true
});
FeedResponse<Item> response = null;
while (resultSetIterator.HasMoreResults)
{
response = await resultSetIterator.ReadNextAsync();
Console.WriteLine(response.IndexMetrics);
}
Output di esempio
In questa query di esempio vengono osservati i percorsi utilizzati /Item/?
, /Price/?
e i potenziali indici compositi (/Item ASC, /Price ASC)
.
Index Utilization Information
Utilized Single Indexes
Index Spec: /Item/?
Index Impact Score: High
---
Index Spec: /Price/?
Index Impact Score: High
---
Potential Single Indexes
Utilized Composite Indexes
Potential Composite Indexes
Index Spec: /Item ASC, /Price ASC
Index Impact Score: High
---
Percorsi indicizzati utilizzati
Gli indici singoli e gli indici compositi utilizzati mostrano rispettivamente i percorsi compresi e gli indici compositi usati dalla query. Le query possono usare più percorsi indicizzati, nonché una combinazione di percorsi compresi e indici compositi. Se un percorso indicizzato non è elencato come usato, la rimozione del percorso indicizzato non avrà alcun impatto sulle prestazioni della query.
Si consideri l'elenco dei percorsi indicizzati utilizzati come prova che una query usa quei percorsi. Se non si è certi che un nuovo percorso indicizzato migliorerà le prestazioni delle query, provare ad aggiungere i nuovi percorsi indicizzati e verificare se la query li usa.
Eventuali percorsi indicizzati
I potenziali indici singoli e potenziali indici compositi mostrano rispettivamente i percorsi inclusi e gli indici compositi che, se aggiunti, la query potrebbe usare. Se vengono visualizzati eventuali percorsi indicizzati, è consigliabile aggiungerli ai criteri di indicizzazione e osservare se migliorano le prestazioni delle query.
Si consideri l'elenco di eventuali percorsi indicizzati come raccomandazioni anziché come una prova definitiva del fatto che una query userà un percorso indicizzato specifico. Gli eventuali percorsi indicizzati non sono un elenco completo di percorsi indicizzati che una query potrebbe usare. Inoltre, è possibile che alcuni eventuali percorsi indicizzati non abbiano alcun impatto sulle prestazioni delle query. Aggiungere i percorsi indicizzati consigliati e verificare che migliorino le prestazioni delle query.
Nota
Avete dei feedback sulle metriche di indicizzazione? Fatecelo sapere! È possibile condividere i feedback direttamente con il team di progettazione di Azure Cosmos DB: cosmosdbindexing@microsoft.com
Punteggio di impatto dell'indice
Il punteggio di impatto dell'indice è la probabilità che un percorso indicizzato, basato sul modello della query, abbia un impatto significativo sulle prestazioni delle query. In altre parole, il punteggio di impatto dell'indice rappresenta la probabilità che, senza tale percorso indicizzato specifico, l'addebito per le RU di query sarebbe stato notevolmente superiore.
Esistono due possibili punteggi di impatto sull'indice: alto e basso. Se è presente più di un eventuale percorso indicizzato, si consiglia di concentrarsi sui percorsi indicizzati con un punteggio di impatto elevato.
Gli unici criteri utilizzati nel punteggio di impatto dell'indice sono i modelli della query. Nella query seguente, ad esempio, al percorso indicizzato /name/?
verrebbe assegnato un punteggio di impatto elevato sull'indice:
SELECT *
FROM c
WHERE c.name = "Samer"
Impatto effettivo a seconda della natura dei dati. Se solo alcuni elementi corrispondono al /name
filtro, il percorso indicizzato migliorerà notevolmente l'addebito UR delle query. Tuttavia, se la maggior parte degli elementi corrisponde comunque al /name
filtro, il percorso indicizzato potrebbe non migliorare le prestazioni delle query. In ognuno di questi casi, al percorso indicizzato /name/?
verrebbe assegnato un punteggio di impatto elevato sull'indice perché, in base al modello della query, il percorso indicizzato ha una probabilità elevata di migliorare le prestazioni delle query.
Esempi aggiuntivi
Query di esempio
SELECT c.id
FROM c
WHERE c.name = 'Tim' AND c.age > 15 AND c.town = 'Redmond' AND c.timestamp > 2349230183
Metriche dell'indice
Index Utilization Information
Utilized Single Indexes
Index Spec: /name/?
Index Impact Score: High
---
Index Spec: /age/?
Index Impact Score: High
---
Index Spec: /town/?
Index Impact Score: High
---
Index Spec: /timestamp/?
Index Impact Score: High
---
Potential Single Indexes
Utilized Composite Indexes
Potential Composite Indexes
Index Spec: /name ASC, /town ASC, /age ASC
Index Impact Score: High
---
Index Spec: /name ASC, /town ASC, /timestamp ASC
Index Impact Score: High
---
Queste metriche dell’indice mostrano che la query ha usato i percorsi indicizzati /name/?
, /age/?
, /town/?
e /timestamp/?
. Le metriche dell'indice indicano anche che è altamente probabile che l'aggiunta di indici compositi (/name ASC, /town ASC, /age ASC)
e (/name ASC, /town ASC, /timestamp ASC)
migliorerà ulteriormente le prestazioni.
Passaggi successivi
Altre informazioni sull'indicizzazione sono disponibili negli articoli seguenti: