Unità richiesta in Azure Cosmos DBRequest Units in Azure Cosmos DB

Ora disponibile: calcolatore di unità richiesta di Azure Cosmos DB.Now available: Azure Cosmos DB request unit calculator. Per altre informazioni, vedere Stima delle esigenze di velocità effettiva.Learn more in Estimating your throughput needs.

Calcolatore della velocità effettiva

IntroduzioneIntroduction

Azure Cosmos DB è il database multimodello distribuito a livello globale di Microsoft.Azure Cosmos DB is Microsoft's globally distributed multi-model database. Con Azure Cosmos DB non è necessario affittare macchine virtuali, distribuire software o monitorare database.With Azure Cosmos DB, you don't have to rent virtual machines, deploy software, or monitor databases. Azure Cosmos DB è gestito e monitorato costantemente dai migliori tecnici Microsoft, in modo da offrire disponibilità, prestazioni e protezione dei dati di elevata qualità.Azure Cosmos DB is operated and continuously monitored by Microsoft top engineers to deliver world class availability, performance, and data protection. È possibile accedere ai dati usando le API preferite, ad esempio SQL tramite l'API DocumentDB, le API MongoDB, l'API Table e Gremlin tramite l'API Graph. Tutte queste API sono supportate a livello nativo.You can access your data using APIs of your choice, such as SQL via the DocumentDB API, MongoDB APIs, Table API, and Gremlin via the Graph API - are all natively supported. La valuta di Azure Cosmos DB è costituita dalle unità richiesta (UR).The currency of Azure Cosmos DB is the Request Unit (RU). Con le unità richiesta, non è necessario riservare capacità di lettura/scrittura né effettuare il provisioning di CPU, memoria e operazioni di I/O al secondo.With RUs, you do not need to reserve read/write capacities or provision CPU, memory, and IOPS.

Azure Cosmos DB supporta una serie di API con operazioni diverse, che vanno dalla semplice lettura e scrittura alle query per grafi più complesse.Azure Cosmos DB supports a number of APIs with different operations ranging from simple reads and writes to complex graph queries. Poiché non tutte le richieste sono uguali, viene loro assegnata una quantità normalizzata di unità richiesta in base alla quantità di calcolo necessaria per servire la richiesta.Since not all requests are equal, they are assigned a normalized quantity of request units based on the amount of computation required to serve the request. Il numero di unità richiesta per un'operazione è deterministico ed è possibile tenere traccia del numero di unità richiesta utilizzate da qualsiasi operazione in Azure Cosmos DB tramite un'intestazione della risposta.The number of request units for an operation is deterministic, and you can track the number of request units consumed by any operation in Azure Cosmos DB via a response header.

Per prestazioni prevedibili, è necessario riservare una velocità effettiva in unità di 100 UR/secondo.To provide predictable performance, you need to reserve throughput in units of 100 RU/second.

Alla fine della lettura, si avranno le risposte alle domande seguenti:After reading this article, you'll be able to answer the following questions:

  • Cosa sono le unità richiesta e gli addebiti richiesta?What are request units and request charges?
  • Come è possibile specificare la capacità delle unità richiesta per una raccolta?How do I specify request unit capacity for a collection?
  • Come si possono stimare le esigenze relative alle unità richiesta per l'applicazione?How do I estimate my application's request unit needs?
  • Cosa accade se si supera la capacità delle unità richiesta per una raccolta?What happens if I exceed request unit capacity for a collection?

Azure Cosmos DB è un database multimodello. Si noti che in questo articolo l'API di documento è detta raccolta/documento, l'API Graph è detta grafo/nodo e l'API Table è detta tabella/entità.As Azure Cosmos DB is a multi-model database, it is important to note that this article refers to a collection/document for a document API, a graph/node for a graph API and a table/entity for the Table API. In questo articolo ci si riferisce al concetto di una raccolta, un grafico o una tabella come un contenitore e di un documento, un nodo o un'entità come un elemento.This article refers to concept of a collection, graph, or table as a container, and a a document, node, or entity as an item.

Unità richiesta e addebiti richiestaRequest units and request charges

Azure Cosmos DB offre prestazioni veloci e prevedibili, riservando risorse per soddisfare le esigenze a livello di velocità effettiva dell'applicazione.Azure Cosmos DB delivers fast, predictable performance by reserving resources to satisfy your application's throughput needs. Poiché i modelli di carico e accesso dell'applicazione cambiano nel tempo, Azure Cosmos DB consente di aumentare o diminuire facilmente la quantità di velocità effettiva riservata disponibile per l'applicazione.Because application load and access patterns change over time, Azure Cosmos DB allows you to easily increase or decrease the amount of reserved throughput available to your application.

Con Azure Cosmos DB, la velocità effettiva riservata è specificata in termini di unità richiesta elaborate al secondo.With Azure Cosmos DB, reserved throughput is specified in terms of request units processing per second. Si possono considerare le unità richiesta come una specie di valuta della velocità effettiva, secondo cui si riserva una quantità garantita di unità richiesta disponibili al secondo per l'applicazione.You can think of request units as throughput currency, whereby you reserve an amount of guaranteed request units available to your application on per second basis. Ogni operazione in Azure Cosmos DB, ovvero scrittura di un documento, esecuzione di una query, aggiornamento di un documento, utilizza CPU, memoria e operazioni di I/O al secondo.Each operation in Azure Cosmos DB - writing a document, performing a query, updating a document - consumes CPU, memory, and IOPS. In altre parole, ogni operazione comporta un addebito richiesta espresso in unità richiesta.That is, each operation incurs a request charge, which is expressed in request units. La conoscenza dei fattori che influiscono sugli addebiti delle unità richiesta, insieme ai requisiti di velocità effettiva dell'applicazione, consente di eseguire l'applicazione nel modo più economicamente conveniente possibile.Understanding the factors that impact request unit charges, along with your application's throughput requirements, enables you to run your application as cost effectively as possible. Anche lo strumento Esplora query è molto utile per testare gli elementi di base di una query.The query explorer is also a wonderful tool to test the core of a query.

Per iniziare è consigliabile guardare il video riportato di seguito, in cui Aravind Ramachandran illustra le unità richiesta e le prestazioni prevedibili con Azure Cosmos DB.We recommend getting started by watching the following video, where Aravind Ramachandran explains request units and predictable performance with Azure Cosmos DB.

Specifica della capacità in unità richiesta in Azure Cosmos DBSpecifying request unit capacity in Azure Cosmos DB

Quando si crea una nuova raccolta, tabella o grafo, si specifica il numero di unità richiesta al secondo (UR/sec) da riservare.When starting a new collection, table or graph, you specify the number of request units per second (RU per second) you want reserved. In base alla velocità effettiva di cui è stato effettuato il provisioning, Azure Cosmos DB alloca partizioni fisiche per ospitare la raccolta e suddivide/ribilancia la crescita dei dati nelle partizioni.Based on the provisioned throughput, Azure Cosmos DB allocates physical partitions to host your collection and splits/rebalances data across partitions as it grows.

In Azure Cosmos DB è necessario specificare una chiave di partizione quando viene effettuato il provisioning di una raccolta con almeno 2.500 unità richiesta.Azure Cosmos DB requires a partition key to be specified when a collection is provisioned with 2,500 request units or higher. La chiave di partizione è necessaria anche per ridimensionare la velocità effettiva della raccolta oltre le 2.500 unità richiesta in futuro.A partition key is also required to scale your collection's throughput beyond 2,500 request units in the future. È quindi consigliabile configurare una chiave di partizione durante la creazione di un contenitore, indipendentemente dalla velocità effettiva iniziale.Therefore, it is highly recommended to configure a partition key when creating a container regardless of your initial throughput. Dal momento che i dati potrebbero essere stati suddivisi in più partizioni, è necessario scegliere una chiave di partizione che abbia un'elevata cardinalità (da 100 a milioni di valori distinti).Since your data might have to be split across multiple partitions, it is necessary to pick a partition key that has a high cardinality (100 to millions of distinct values). La selezione di una chiave di partizione con molti valori distinti garantisce la scalabilità uniforme di raccolte/tabelle/grafi e richieste in Azure Cosmos DB.By selecting a partition key with many distinct values you ensure that your collection/table/graph and requests can be scaled uniformly by Azure Cosmos DB.

Nota

Una chiave di partizione è un limite logico, non un limite fisico.A partition key is a logical boundary, and not a physical one. Non è quindi necessario limitare il numero di valori distinti per le chiavi di partizioni.Therefore, you do not need to limit the number of distinct partition key values. È in effetti consigliabile avere un numero maggiore di valori distinti per le chiavi di partizione, perché Azure Cosmos DB offre un numero maggiore di opzioni per il bilanciamento del carico.It is in fact better to have more distinct partition key values than less, as Azure Cosmos DB has more load balancing options.

Ecco un frammento di codice per la creazione di una raccolta con 3.000 unità richiesta al secondo usando .NET SDK:Here is a code snippet for creating a collection with 3,000 request units per second using the .NET SDK:

DocumentCollection myCollection = new DocumentCollection();
myCollection.Id = "coll";
myCollection.PartitionKey.Paths.Add("/deviceId");

await client.CreateDocumentCollectionAsync(
    UriFactory.CreateDatabaseUri("db"),
    myCollection,
    new RequestOptions { OfferThroughput = 3000 });

Azure Cosmos DB usa un modello di prenotazione per la velocità effettiva,Azure Cosmos DB operates on a reservation model on throughput. ovvero viene fatturata la quantità di velocità effettiva riservata, indipendentemente dalla quantità di tale velocità effettiva usata attivamente.That is, you are billed for the amount of throughput reserved, regardless of how much of that throughput is actively used. A mano a mano che i modelli di carico, dati e utilizzo dell'applicazione cambiano, è possibile aumentare e ridurre facilmente la quantità di unità richiesta riservate usando gli SDK o il portale di Azure.As your application's load, data, and usage patterns change you can easily scale up and down the amount of reserved RUs through SDKs or using the Azure Portal.

Viene eseguito il mapping di ogni raccolta, tabella o grafo a una risorsa Offer in Azure Cosmos DB, che include metadati sulla velocità effettiva di cui è stato effettuato il provisioning.Each collection/table/graph are mapped to an Offer resource in Azure Cosmos DB, which has metadata about the provisioned throughput. È possibile modificare la velocità effettiva allocata esaminando l'offerta corrispondente relativa alla risorsa per un contenitore, quindi aggiornarla con il nuovo valore per la velocità effettiva.You can change the allocated throughput by looking up the corresponding offer resource for a container, then updating it with the new throughput value. Ecco un frammento di codice per la modifica della velocità effettiva di una raccolta fino a 5.000 unità richiesta al secondo usando .NET SDK:Here is a code snippet for changing the throughput of a collection to 5,000 request units per second using the .NET SDK:

// Fetch the resource to be updated
Offer offer = client.CreateOfferQuery()
                .Where(r => r.ResourceLink == collection.SelfLink)    
                .AsEnumerable()
                .SingleOrDefault();

// Set the throughput to 5000 request units per second
offer = new OfferV2(offer, 5000);

// Now persist these changes to the database by replacing the original resource
await client.ReplaceOfferAsync(offer);

La modifica della velocità effettiva non influisce sulla disponibilità del contenitore.There is no impact to the availability of your container when you change the throughput. La nuova velocità effettiva riservata viene in genere applicata entro pochi secondi, in corrispondenza dell'applicazione della nuova velocità effettiva.Typically the new reserved throughput is effective within seconds on application of the new throughput.

Considerazioni sulle unità richiestaRequest unit considerations

Quando si stima il numero di unità richiesta da riservare per il contenitore di Azure Cosmos DB, è importante considerare le variabili seguenti:When estimating the number of request units to reserve for your Azure Cosmos DB container, it is important to take the following variables into consideration:

  • Dimensioni dell'elemento.Item size. Con l'aumento delle dimensioni aumentano anche le unità usate per leggere o scrivere i dati.As size increases the units consumed to read or write the data also increases.
  • Numero di proprietà dell'elemento.Item property count. Supponendo l'indicizzazione predefinita di tutte le proprietà, le unità usate per scrivere un documento, un nodo o un'entità aumentano man mano che aumenta il numero delle proprietà.Assuming default indexing of all properties, the units consumed to write a document/node/entity increase as the property count increases.
  • Coerenza dei dati.Data consistency. Se si usano i livelli di coerenza dei dati Assoluta o Decadimento ristretto, verranno usate unità aggiuntive per leggere gli elementi.When using data consistency levels of Strong or Bounded Staleness, additional units are consumed to read items.
  • Proprietà indicizzate.Indexed properties. I criteri di indicizzazione in ogni contenitore determinano le proprietà che vengono indicizzate per impostazione predefinita.An index policy on each container determines which properties are indexed by default. È possibile ridurre l'utilizzo di unità richiesta limitando il numero di proprietà indicizzate o abilitando l'indicizzazione differita.You can reduce your request unit consumption by limiting the number of indexed properties or by enabling lazy indexing.
  • Indicizzazione del documento.Document indexing. Per impostazione predefinita, ogni elemento viene automaticamente indicizzato.By default each item is automatically indexed. Se si sceglie di non indicizzare alcuni elementi, è possibile usare un numero inferiore di unità di richiesta.You consume fewer request units if you choose not to index some of your items.
  • Modelli di query.Query patterns. La complessità di una query influisce sulla quantità di unità richiesta utilizzate per un'operazione.The complexity of a query impacts how many Request Units are consumed for an operation. Il numero di predicati, la natura dei predicati, le proiezioni, il numero di funzioni definite dall'utente e le dimensioni del set di dati di origine sono tutti fattori che incidono sul costo delle operazioni di query.The number of predicates, nature of the predicates, projections, number of UDFs, and the size of the source data set all influence the cost of query operations.
  • Utilizzo di script.Script usage. Come le query, le stored procedure e i trigger utilizzano le unità richiesta in base alla complessità delle operazioni da eseguire.As with queries, stored procedures and triggers consume request units based on the complexity of the operations being performed. Quando si sviluppa l'applicazione, controllare l'intestazione per l'addebito delle richieste per comprendere meglio il modo in cui ciascuna operazione usa la capacità delle unità di richiesta.As you develop your application, inspect the request charge header to better understand how each operation is consuming request unit capacity.

Stima delle esigenze di velocità effettivaEstimating throughput needs

Un'unità di richiesta è una misura normalizzata del costo di elaborazione della richiesta.A request unit is a normalized measure of request processing cost. Una singola unità richiesta rappresenta la capacità di elaborazione necessaria per leggere, tramite collegamento automatico o ID, un singolo elemento da 1 KB costituito da 10 valori di proprietà univoci, escluse le proprietà di sistema.A single request unit represents the processing capacity required to read (via self link or id) a single 1 KB item consisting of 10 unique property values (excluding system properties). Una richiesta di creazione (inserimento), sostituzione o eliminazione dello stesso elemento utilizzerà più capacità di elaborazione del servizio e quindi più unità richiesta.A request to create (insert), replace or delete the same item will consume more processing from the service and thereby more request units.

Nota

La base di 1 unità richiesta per un elemento da 1 KB corrisponde a una semplice operazione GET tramite collegamento automatico o ID dell'elemento.The baseline of 1 request unit for a 1-KB item corresponds to a simple GET by self link or id of the item.

La tabella riportata di seguito mostra il numero di unità richiesta di cui effettuare il provisioning per tre dimensioni dell'elemento diverse, ovvero 1 KB, 4 KB e 64 KB, e due livelli di prestazioni diversi, ovvero 500 letture al secondo + 100 scritture al secondo e 500 letture al secondo + 500 scritture al secondo.For example, here's a table that shows how many request units to provision at three different item sizes (1 KB, 4 KB, and 64 KB) and at two different performance levels (500 reads/second + 100 writes/second and 500 reads/second + 500 writes/second). La coerenza dei dati è stata configurata come Sessione e i criteri di indicizzazione sono stati impostati su Nessuno.The data consistency was configured at Session, and the indexing policy was set to None.

Dimensioni dell'elementoItem size

Letture al secondoReads/second

Scritture al secondoWrites/second

Unità richiestaRequest units

1 KB1 KB

500500

100100

(500 * 1) + (100 * 5) = 1.000 UR/sec(500 * 1) + (100 * 5) = 1,000 RU/s

1 KB1 KB

500500

500500

(500 * 1) + (500 * 5) = 3.000 UR/sec(500 * 1) + (500 * 5) = 3,000 RU/s

4 KB4 KB

500500

100100

(500 * 1,3) + (100 * 7) = 1.350 UR/sec(500 * 1.3) + (100 * 7) = 1,350 RU/s

4 KB4 KB

500500

500500

(500 * 1,3) + (500 * 7) = 4.150 UR/sec(500 * 1.3) + (500 * 7) = 4,150 RU/s

64 KB64 KB

500500

100100

(500 * 10) + (100 * 48) = 9.800 UR/sec(500 * 10) + (100 * 48) = 9,800 RU/s

64 KB64 KB

500500

500500

(500 * 10) + (500 * 48) = 29.000 UR/sec(500 * 10) + (500 * 48) = 29,000 RU/s

Usare il calcolatore di unità richiestaUse the request unit calculator

Per semplificare l'ottimizzazione delle stime di velocità effettiva da parte dei clienti, è disponibile un calcolatore di unità richiesta basato sul Web, che consente di stimare i requisiti relativi alle unità richiesta per operazioni tipiche, incluse le seguenti:To help customers fine-tune their throughput estimations, there is a web-based request unit calculator to help estimate the request unit requirements for typical operations, including:

  • Creazione di elementi (scrittura)Item creates (writes)
  • Lettura di elementiItem reads
  • Eliminazione di elementiItem deletes
  • Aggiornamento di elementiItem updates

Lo strumento include anche il supporto per la stima delle esigenze di archiviazione dei dati in base agli elementi di esempio specificati.The tool also includes support for estimating data storage needs based on the sample items you provide.

L'uso dello strumento è molto semplice:Using the tool is simple:

  1. Caricare uno o più elementi rappresentativi.Upload one or more representative items.

    Caricare elementi nel calcolatore di unità richiesta

  2. Per stimare i requisiti di archiviazione, immettere il numero totale di elementi che si prevede di archiviare.To estimate data storage requirements, enter the total number of items you expect to store.
  3. Immettere il numero di operazioni di creazione, lettura, aggiornamento ed eliminazione degli elementi necessarie (al secondo).Enter the number of items create, read, update, and delete operations you require (on a per-second basis). Per stimare gli addebiti delle unità richiesta per le operazioni di aggiornamento di elementi, caricare una copia dell'elemento di esempio usato nel passaggio 1 precedente che include aggiornamenti di campi tipici.To estimate the request unit charges of item update operations, upload a copy of the sample item from step 1 above that includes typical field updates. Ad esempio, se gli aggiornamenti di elementi modificano in genere due proprietà denominate lastLogin e userVisits, è sufficiente copiare l'elemento di esempio, aggiornare i valori per queste due proprietà e caricare l'elemento copiato.For example, if item updates typically modify two properties named lastLogin and userVisits, then simply copy the sample item, update the values for those two properties, and upload the copied item.

    Immettere i requisiti relativi alla velocità effettiva nel calcolatore di unità richiesta

  4. Fare clic su Calcola ed esaminare i risultati.Click calculate and examine the results.

    Risultati del calcolatore di unità richiesta

Nota

Se sono presenti tipi di elementi che variano notevolmente in termini di dimensioni e numero di proprietà indicizzate, caricare un campione di ogni tipo di elemento tipico nello strumento e quindi calcolare i risultati.If you have item types which will differ dramatically in terms of size and the number of indexed properties, then upload a sample of each type of typical item to the tool and then calculate the results.

Usare l'intestazione della risposta di addebito della richiesta di Azure Cosmos DBUse the Azure Cosmos DB request charge response header

Ogni risposta dal servizio Azure Cosmos DB include un'intestazione personalizzata (x-ms-request-charge) che contiene le unità richiesta utilizzate per la richiesta.Every response from the Azure Cosmos DB service includes a custom header (x-ms-request-charge) that contains the request units consumed for the request. Questa intestazione è accessibile anche tramite gli SDK di Azure Cosmos DB.This header is also accessible through the Azure Cosmos DB SDKs. In .NET SDK, RequestCharge è una proprietà dell'oggetto ResourceResponse.In the .NET SDK, RequestCharge is a property of the ResourceResponse object. Per quanto riguarda le query, Esplora query di Azure Cosmos DB nel portale di Azure fornisce informazioni sull'addebito per le richieste relative alle query eseguite.For queries, the Azure Cosmos DB Query Explorer in the Azure portal provides request charge information for executed queries.

Analisi degli addebiti delle unità richiesta in Esplora Query

Con questa premessa, un metodo per stimare la quantità di velocità effettiva riservata richiesta dall'applicazione consiste nel registrare l'addebito delle unità richiesta associato all'esecuzione di operazioni tipiche rispetto a un elemento rappresentativo usato dall'applicazione e quindi nello stimare il numero di operazioni che si prevede di eseguire al secondo.With this in mind, one method for estimating the amount of reserved throughput required by your application is to record the request unit charge associated with running typical operations against a representative item used by your application and then estimating the number of operations you anticipate performing each second. Assicurarsi di misurare e includere anche le query tipiche e l'utilizzo di script di Azure Cosmos DB.Be sure to measure and include typical queries and Azure Cosmos DB script usage as well.

Nota

Se sono presenti tipi di elementi che variano notevolmente in termini di dimensioni e numero di proprietà indicizzate, registrare l'addebito delle unità richiesta per le operazioni applicabili associato a ogni tipo di elemento tipico.If you have item types that differ dramatically in terms of size and the number of indexed properties, then record the applicable operation request unit charge associated with each type of typical item.

ad esempio:For example:

  1. Registrare l'addebito delle unità richiesta di creazione (inserimento) di un elemento tipico.Record the request unit charge of creating (inserting) a typical item.
  2. Registrare l'addebito delle unità richiesta di lettura di un elemento tipico.Record the request unit charge of reading a typical item.
  3. Registrare l'addebito delle unità richiesta di aggiornamento di un elemento tipico.Record the request unit charge of updating a typical item.
  4. Registrare l'addebito delle unità richiesta di query tipiche su elementi comuni.Record the request unit charge of typical, common item queries.
  5. Registrare l'addebito delle unità richiesta di tutti gli script personalizzati (stored procedure, trigger, funzioni definite dall'utente) utilizzati dall'applicazione.Record the request unit charge of any custom scripts (stored procedures, triggers, user-defined functions) leveraged by the application
  6. Calcolare le unità richiesta necessarie in base al numero stimato di operazioni che si prevede di eseguire al secondo.Calculate the required request units given the estimated number of operations you anticipate to run each second.

Usare il comando dell'API per MongoDBUse API for MongoDB's GetLastRequestStatistics command

L'API per MongoDB supporta un comando personalizzato, getLastRequestStatistics, per il recupero degli addebiti per le richieste per operazioni specificate.API for MongoDB supports a custom command, getLastRequestStatistics, for retrieving the request charge for specified operations.

Ad esempio, in Mongo Shell eseguire l'operazione di cui si vuole verificare l'addebito per le richieste.For example, in the Mongo Shell, execute the operation you want to verify the request charge for.

> db.sample.find()

Eseguire quindi il comando getLastRequestStatistics.Next, execute the command getLastRequestStatistics.

> db.runCommand({getLastRequestStatistics: 1})
{
    "_t": "GetRequestStatisticsResponse",
    "ok": 1,
    "CommandName": "OP_QUERY",
    "RequestCharge": 2.48,
    "RequestDurationInMilliSeconds" : 4.0048
}

Con questa premessa, un metodo per stimare la quantità di velocità effettiva riservata richiesta dall'applicazione consiste nel registrare l'addebito delle unità richiesta associato all'esecuzione di operazioni tipiche rispetto a un elemento rappresentativo usato dall'applicazione e quindi nello stimare il numero di operazioni che si prevede di eseguire al secondo.With this in mind, one method for estimating the amount of reserved throughput required by your application is to record the request unit charge associated with running typical operations against a representative item used by your application and then estimating the number of operations you anticipate performing each second.

Nota

Se sono presenti tipi di elementi che variano notevolmente in termini di dimensioni e numero di proprietà indicizzate, registrare l'addebito delle unità richiesta per le operazioni applicabili associato a ogni tipo di elemento tipico.If you have item types which will differ dramatically in terms of size and the number of indexed properties, then record the applicable operation request unit charge associated with each type of typical item.

Usare le metriche del portale dell'API per MongoDBUse API for MongoDB's portal metrics

Il modo più semplice per ottenere una stima valida degli addebiti per le unità richiesta per il database dell'API per MongoDB consiste nell'usare le metriche del portale di Azure.The simplest way to get a good estimation of request unit charges for your API for MongoDB database is to use the Azure portal metrics. I grafici Numero di richieste e Richiedi addebito consentono di ottenere una stima del numero di unità richiesta utilizzate da ogni operazione e dal numero di unità richiesta utilizzate una rispetto all'altra.With the Number of requests and Request Charge charts, you can get an estimation of how many request units each operation is consuming and how many request units they consume relative to one another.

Metriche del portale dell'API per MongoDB

Esempio di stima delle unità richiestaA request unit estimation example

Considerare questo documento da circa 1 KB:Consider the following ~1-KB document:

{
 "id": "08259",
  "description": "Cereals ready-to-eat, KELLOGG, KELLOGG'S CRISPIX",
  "tags": [
    {
      "name": "cereals ready-to-eat"
    },
    {
      "name": "kellogg"
    },
    {
      "name": "kellogg's crispix"
    }
  ],
  "version": 1,
  "commonName": "Includes USDA Commodity B855",
  "manufacturerName": "Kellogg, Co.",
  "isFromSurvey": false,
  "foodGroup": "Breakfast Cereals",
  "nutrients": [
    {
      "id": "262",
      "description": "Caffeine",
      "nutritionValue": 0,
      "units": "mg"
    },
    {
      "id": "307",
      "description": "Sodium, Na",
      "nutritionValue": 611,
      "units": "mg"
    },
    {
      "id": "309",
      "description": "Zinc, Zn",
      "nutritionValue": 5.2,
      "units": "mg"
    }
  ],
  "servings": [
    {
      "amount": 1,
      "description": "cup (1 NLEA serving)",
      "weightInGrams": 29
    }
  ]
}

Nota

I documenti sono minimizzati in Azure Cosmos DB, quindi le dimensioni del documento precedente calcolate dal sistema sono leggermente inferiori a 1 KB.Documents are minified in Azure Cosmos DB, so the system calculated size of the document above is slightly less than 1 KB.

La tabella seguente mostra gli addebiti delle unità richiesta approssimativi per le operazioni tipiche su questo elemento. L'addebito delle unità richiesta approssimativo presuppone che il livello di coerenza dell'account sia impostato su "Sessione" e che tutti gli elementi siano indicizzati automaticamente:The following table shows approximate request unit charges for typical operations on this item (the approximate request unit charge assumes that the account consistency level is set to “Session” and that all items are automatically indexed):

OperazioneOperation Addebito delle unità richiestaRequest Unit Charge
Creare elementoCreate item ~15 unità richiesta~15 RU
Leggere l'elementoRead item ~1 unità richiesta~1 RU
Eseguire query sull'elemento in base all'IDQuery item by id ~2,5 unità richiesta~2.5 RU

Questa tabella mostra anche gli addebiti approssimativi delle unità richiesta per le query tipiche usate nell'applicazione:Additionally, this table shows approximate request unit charges for typical queries used in the application:

QueryQuery Addebito delle unità richiestaRequest Unit Charge Numero di elementi restituiti# of Returned Items
Selezionare alimenti in base all'IDSelect food by id ~2,5 unità richiesta~2.5 RU 11
Selezionare alimenti in base al produttoreSelect foods by manufacturer ~7 unità richiesta~7 RU 77
Selezionare per gruppo di alimenti e ordinare in base al pesoSelect by food group and order by weight ~70 unità richiesta~70 RU 100100
Selezionare i primi 10 alimenti in un gruppo di alimentiSelect top 10 foods in a food group ~10 unità richiesta~10 RU 1010

Nota

Gli addebiti delle unità richiesta variano in base al numero di elementi restituiti.RU charges vary based on the number of items returned.

Con queste informazioni è possibile stimare i requisiti relativi alle unità richiesta per questa applicazione, dato il numero di operazioni e query previste al secondo:With this information, you can estimate the RU requirements for this application given the number of operations and queries you expect per second:

Operazione/queryOperation/Query Numero stimato al secondoEstimated number per second Unità richiesta necessarieRequired RUs
Creare elementoCreate item 1010 150150
Leggere l'elementoRead item 100100 100100
Selezionare alimenti in base al produttoreSelect foods by manufacturer 2525 175175
Selezionare per gruppo di alimentiSelect by food group 1010 700700
Selezionare i primi 10Select top 10 1515 Totale 150150 Total

Si prevede in questo caso un requisito di velocità effettiva medio di 1.275 unità richiesta al secondo.In this case, you expect an average throughput requirement of 1,275 RU/s. Arrotondando a 100 unità più vicine, si dovrà effettuare il provisioning di 1.300 unità richiesta al secondo per la raccolta dell'applicazione.Rounding up to the nearest 100, you would provision 1,300 RU/s for this application's collection.

Superamento dei limiti della velocità effettiva riservata in Azure Cosmos DBExceeding reserved throughput limits in Azure Cosmos DB

Tenere presente che, in assenza di budget, il consumo delle unità richiesta è valutato in base a una frequenza al secondo.Recall that request unit consumption is evaluated as a rate per second if the budget is empty. Per le applicazioni che superano il livello di unità richiesta di cui è stato effettuato il provisioning per un contenitore, le richieste saranno limitate fino a quando il livello non torna al di sotto del valore riservato.For applications that exceed the provisioned request unit rate for a container, requests to that collection are throttled until the rate drops below the reserved level. Nel caso di una limitazione, il server termina preventivamente la richiesta con RequestRateTooLargeException (codice di stato HTTP 429) e restituisce l'intestazione x-ms-retry-after-ms, che indica la quantità di tempo, in millisecondi, che l'utente deve attendere prima di eseguire di nuovo la richiesta.When a throttle occurs, the server preemptively ends the request with RequestRateTooLargeException (HTTP status code 429) and returns the x-ms-retry-after-ms header indicating the amount of time, in milliseconds, that the user must wait before reattempting the request.

HTTP Status 429
Status Line: RequestRateTooLarge
x-ms-retry-after-ms :100

Se si usano le query LINQ e .NET SDK per client, non è quasi mai necessario gestire questa eccezione, perché la versione corrente di .NET SDK per client rileva la risposta in modo implicito, rispetta l'intestazione retry-after specificata dal server e ripete la richiesta.If you are using the .NET Client SDK and LINQ queries, then most of the time you never have to deal with this exception, as the current version of the .NET Client SDK implicitly catches this response, respects the server-specified retry-after header, and retries the request. A meno che all'account non accedano contemporaneamente più client, il tentativo successivo riuscirà.Unless your account is being accessed concurrently by multiple clients, the next retry will succeed.

Se più client operano collettivamente al di sopra della frequenza delle richieste, il comportamento di ripetizione dei tentativi predefinito potrebbe non essere sufficiente e il client genererà una DocumentClientException con codice di stato 429 per l'applicazione.If you have more than one client cumulatively operating above the request rate, the default retry behavior may not suffice, and the client will throw a DocumentClientException with status code 429 to the application. In casi come questo, si può valutare la possibilità di gestire la logica e il comportamento di ripetizione dei tentativi nelle routine di gestione degli errori dell'applicazione o di aumentare la velocità effettiva riservata per il contenitore.In cases such as this, you may consider handling retry behavior and logic in your application's error handling routines or increasing the reserved throughput for the container.

Superamento dei limiti della velocità effettiva riservata nell'API per MongoDBExceeding reserved throughput limits in API for MongoDB

Le applicazioni che superano il livello di unità di richiesta con provisioning per una raccolta saranno limitate fino al ritorno del livello sotto il valore riservato.Applications that exceed the provisioned request units for a collection will be throttled until the rate drops below the reserved level. In caso di limitazione, il back-end terminerà preventivamente la richiesta con un codice errore 16500, ovvero Troppe richieste.When a throttle occurs, the backend will preemptively end the request with a 16500 error code - Too Many Requests. Per impostazione predefinita, l'API per MongoDB ripeterà automaticamente i tentativi fino a 10 volte prima di restituire un codice errore di tipo Troppe richieste.By default, API for MongoDB will automatically retry up to 10 times before returning a Too Many Requests error code. Se si riceve un numero eccessivo di codici errore di tipo Troppe richieste, è possibile prendere in considerazione l'aggiunta del comportamento di ripetizione dei tentativi nelle routine di gestione degli errori dell'applicazione oppure l'aumento della velocità effettiva riservata per la raccolta.If you are receiving many Too Many Requests error codes, you may consider either adding retry behavior in your application's error handling routines or increasing the reserved throughput for the collection.

Passaggi successiviNext steps

Per altre informazioni sulla velocità effettiva riservata con i database Azure Cosmos DB, vedere queste risorse:To learn more about reserved throughput with Azure Cosmos DB databases, explore these resources:

Per altre informazioni su Azure Cosmos DB, vedere la relativa documentazione.To learn more about Azure Cosmos DB, see the Azure Cosmos DB documentation.

Per iniziare a testare la scalabilità e le prestazioni con Azure Cosmos DB, vedere Test delle prestazioni e della scalabilità con Azure Cosmos DB.To get started with scale and performance testing with Azure Cosmos DB, see Performance and Scale Testing with Azure Cosmos DB.