Effettuare il provisioning della velocità effettiva per contenitori e databaseProvision throughput on containers and databases

Un database di Azure Cosmos è un'unità di gestione per un set di contenitori.An Azure Cosmos database is a unit of management for a set of containers. Un database è costituito da un set di contenitori indipendenti dallo schema.A database consists of a set of schema-agnostic containers. Un contenitore di Azure Cosmos è l'unità di scalabilità per velocità effettiva e archiviazione.An Azure Cosmos container is the unit of scalability for both throughput and storage. Un contenitore è partizionato orizzontalmente tra un set di computer all'interno di un'area di Azure e viene distribuito in tutte le aree di Azure associate all'account Azure Cosmos.A container is horizontally partitioned across a set of machines within an Azure region and is distributed across all Azure regions associated with your Azure Cosmos account.

Con Azure Cosmos DB è possibile effettuare il provisioning della velocità effettiva a due granularità:With Azure Cosmos DB, you can provision throughput at two granularities:

  • Contenitori Azure Cosmos DBAzure Cosmos containers
  • Database Azure Cosmos DBAzure Cosmos databases

Configurare la velocità effettiva in un contenitoreSet throughput on a container

La velocità effettiva di cui è stato effettuato il provisioning in un contenitore di Azure Cosmos è riservata esclusivamente a tale contenitore.The throughput provisioned on an Azure Cosmos container is exclusively reserved for that container. Il contenitore riceve sempre la velocità effettiva con provisioning.The container receives the provisioned throughput all the time. La velocità effettiva con provisioning in un contenitore è supportata finanziariamente da contratti di servizio.The provisioned throughput on a container is financially backed by SLAs. Per informazioni su come configurare la velocità effettiva in un contenitore, vedere provisioning della velocità effettiva in un contenitore di Azure Cosmos.To learn how to configure throughput on a container, see Provision throughput on an Azure Cosmos container.

L'impostazione della velocità effettiva con provisioning in un contenitore è l'opzione utilizzata più di frequente.Setting provisioned throughput on a container is the most frequently used option. È possibile ridimensionare in modo elastico la velocità effettiva per un contenitore effettuando il provisioning di qualsiasi quantità di velocità effettiva usando unità richiesta (UR).You can elastically scale throughput for a container by provisioning any amount of throughput by using Request Units (RUs).

La velocità effettiva di cui viene effettuato il provisioning per un contenitore viene distribuita uniformemente tra le partizioni fisiche e supponendo una chiave di partizione efficace che distribuisca equamente le partizioni logiche tra le partizioni fisiche, la velocità effettiva viene distribuita anche in modo uniforme tra tutti i partizioni logiche del contenitore.The throughput provisioned for a container is evenly distributed among its physical partitions, and assuming a good partition key that distributes the logical partitions evenly among the physical partitions, the throughput is also distributed evenly across all the logical partitions of the container. Non è possibile specificare selettivamente la velocità effettiva per le partizioni logiche.You cannot selectively specify the throughput for logical partitions. Poiché una o più partizioni logiche di un contenitore sono ospitate da una partizione fisica, le partizioni fisiche appartengono esclusivamente al contenitore e supportano la velocità effettiva di cui è stato effettuato il provisioning nel contenitore.Because one or more logical partitions of a container are hosted by a physical partition, the physical partitions belong exclusively to the container and support the throughput provisioned on the container.

Se il carico di lavoro in esecuzione in una partizione logica consuma più della velocità effettiva allocata a tale partizione logica, le operazioni vengono eseguite con limitazione della frequenza.If the workload running on a logical partition consumes more than the throughput that was allocated to that logical partition, your operations get rate-limited. Quando si verifica una limitazione della frequenza, è possibile aumentare la velocità effettiva con provisioning per l'intero contenitore oppure ripetere le operazioni.When rate-limiting occurs, you can either increase the provisioned throughput for the entire container or retry the operations. Per altre informazioni sul partizionamento, vedere Partizioni logiche.For more information on partitioning, see Logical partitions.

È consigliabile configurare la velocità effettiva al livello di granularità del contenitore per ottenere prestazioni garantite per il contenitore.We recommend that you configure throughput at the container granularity when you want guaranteed performance for the container.

L'immagine seguente mostra in che modo una partizione fisica ospita una o più partizioni logiche di un contenitore:The following image shows how a physical partition hosts one or more logical partitions of a container:

Partizione fisica

Configurare la velocità effettiva in un databaseSet throughput on a database

Quando si esegue il provisioning della velocità effettiva in un database di Azure Cosmos, la velocità effettiva viene condivisa tra tutti i contenitori, detti contenitori di database condivisi, nel database.When you provision throughput on an Azure Cosmos database, the throughput is shared across all the containers (called shared database containers) in the database. Un'eccezione è rappresentata dal caso in cui sia stata specificata una velocità effettiva con provisioning in contenitori specifici del database.An exception is if you specified a provisioned throughput on specific containers in the database. La condivisione della velocità effettiva con provisioning a livello di database tra i contenitori è analoga all'hosting di un database in un cluster di computer.Sharing the database-level provisioned throughput among its containers is analogous to hosting a database on a cluster of machines. Poiché tutti i contenitori all'interno di un database condividono le risorse disponibili in un computer, naturalmente non si ottengono prestazioni prevedibili in un contenitore specifico.Because all containers within a database share the resources available on a machine, you naturally do not get predictable performance on any specific container. Per informazioni su come configurare la velocità effettiva con provisioning in un database, vedere configurare la velocità effettiva con provisioning in un database di Azure Cosmos.To learn how to configure provisioned throughput on a database, see Configure provisioned throughput on an Azure Cosmos database.

Impostando la velocità effettiva in un database di Azure Cosmos si garantisce sempre la velocità effettiva con provisioning per il database.Setting throughput on an Azure Cosmos database guarantees that you receive the provisioned throughput for that database all the time. Dato che tutti i contenitori all'interno del database condividono la velocità effettiva di cui è stato effettuato il provisioning, Azure Cosmos DB non garantisce alcuna velocità effettiva prevedibile per un determinato contenitore nel database.Because all containers within the database share the provisioned throughput, Azure Cosmos DB doesn't provide any predictable throughput guarantees for a particular container in that database. La porzione della velocità effettiva che può essere ricevuta da uno specifico contenitore dipende dai fattori seguenti:The portion of the throughput that a specific container can receive is dependent on:

  • Numero di contenitori.The number of containers.
  • Scelta delle chiavi di partizione per vari contenitori.The choice of partition keys for various containers.
  • Distribuzione del carico di lavoro tra varie partizioni logiche dei contenitori.The distribution of the workload across various logical partitions of the containers.

È consigliabile configurare la velocità effettiva in un database se si intende condividere la velocità effettiva tra più contenitori, ma non si vuole riservarla a uno specifico contenitore.We recommend that you configure throughput on a database when you want to share the throughput across multiple containers, but don't want to dedicate the throughput to any particular container.

Di seguito sono riportati alcuni esempi in cui è preferibile effettuare il provisioning della velocità effettiva a livello di database:The following examples demonstrate where it's preferred to provision throughput at the database level:

  • La condivisione della velocità effettiva con provisioning di un database in un set di contenitori è utile per un'applicazione multi-tenant.Sharing a database’s provisioned throughput across a set of containers is useful for a multitenant application. Ogni utente può essere rappresentato da un contenitore di Azure Cosmos distinto.Each user can be represented by a distinct Azure Cosmos container.

  • La condivisione della velocità effettiva con provisioning di un database in un set di contenitori è utile quando si esegue la migrazione in Azure Cosmos DB di un database NoSQL, come MongoDB o Cassandra, ospitato in un cluster di macchine virtuali o in server fisici locali.Sharing a database’s provisioned throughput across a set of containers is useful when you migrate a NoSQL database, such as MongoDB or Cassandra, hosted on a cluster of VMs or from on-premises physical servers to Azure Cosmos DB. Si può paragonare la velocità effettiva con provisioning configurata nel database di Azure Cosmos a un equivalente logico (ma più conveniente e flessibile) della capacità di calcolo del cluster MongoDB o Cassandra.Think of the provisioned throughput configured on your Azure Cosmos database as a logical equivalent, but more cost-effective and elastic, to that of the compute capacity of your MongoDB or Cassandra cluster.

Tutti i contenitori creati all'interno di un database con la velocità effettiva con provisioning devono essere creati con una chiave di partizione.All containers created inside a database with provisioned throughput must be created with a partition key. In un determinato momento, la velocità effettiva allocata a un contenitore all'interno di un database viene distribuita in tutte le partizioni logiche del contenitore.At any given point in time, the throughput allocated to a container within a database is distributed across all the logical partitions of that container. Quando si dispone di contenitori che condividono la velocità effettiva con provisioning configurata in un database, non è possibile applicare selettivamente la velocità effettiva a un contenitore o a una partizione logica specifica.When you have containers that share provisioned throughput configured on a database, you can't selectively apply the throughput to a specific container or a logical partition.

Se il carico di lavoro in una partizione logica utilizza un livello di velocità effettiva superiore rispetto a quello allocato a una specifica partizione logica, le operazioni risulteranno limitate in termini di velocità.If the workload on a logical partition consumes more than the throughput that's allocated to a specific logical partition, your operations are rate-limited. Quando si verifica una limitazione della frequenza, è possibile aumentare la velocità effettiva per l'intero database o ripetere le operazioni.When rate-limiting occurs, you can either increase the throughput for the entire database or retry the operations. Per altre informazioni sul partizionamento, vedere Partizioni logiche.For more information on partitioning, see Logical partitions.

La velocità effettiva di cui è stato effettuato il provisioning in un database può essere condivisa dai contenitori all'interno del database.Throughput provisioned on a database can be shared by the containers within that database. Ogni nuovo contenitore nella velocità effettiva condivisa a livello di database richiederà 100 ur/sec.Each new container in database level shared throughput will require 100 RU/s. Quando si esegue il provisioning dei contenitori con l'offerta di database condiviso:When you provision containers with shared database offering:

  • Ogni 25 contenitori viene raggruppati in un set di partizioni e la velocità effettiva del database (D) viene condivisa tra i contenitori nel set di partizioni.Every 25 containers are grouped into a partition set and the database throughput(D) is shared between the containers in the partition set. Se sono presenti fino a 25 contenitori nel database e in qualsiasi momento, se si usa un solo contenitore, il contenitore può usare una velocità effettiva massima di ' d'.If there are up to 25 containers in the database and at any point in time, if you are using only one container, then that container can use a max of ‘D’ throughput.

  • Per ogni nuovo contenitore creato dopo 25 contenitori, viene creato un nuovo set di partizioni e la velocità effettiva del database viene divisa tra i nuovi set di partizioni creati, ovvero D/2 per 2 set di partizioni, D/3 per 3 set di partizioni....For every new container created after 25 containers, a new partition set is created and the database throughput is split between the new partition sets created (that is D/2 for 2 partition sets, D/3 for 3 partition sets…). In qualsiasi momento, se si utilizza un solo contenitore dal database, è possibile utilizzare un valore massimo di (D/2, D/3, D/4...At any point in time, if you are using only one container from the database, it can use a max of (D/2, D/3, D/4… velocità effettiva), rispettivamente.throughput) respectively. Data la velocità effettiva ridotta, è consigliabile creare non più di 25 contenitori in un database.Given the reduced throughput, its recommended that you create no more than 25 containers in one database.

EsempioExample

  • Se si crea un database denominato "MyDB" con una velocità effettiva con provisioning di 10.000 UR/s.If you create a database named “MyDB” with a provisioned throughput of 10K RU/s.

  • Se si effettua il provisioning di 25 contenitori in "MyDB", tutti i contenitori vengono raggruppati in un set di partizioni.If you provision 25 containers under “MyDB”, then all the containers are grouped into a partition set. In qualsiasi momento, se si usa un solo contenitore dal database, può usare un massimo di 10.000 UR/s (D).At any point in time, if you are using only one container from the database, then it can use a maximum of 10K RU/s (D).

  • Quando si esegue il provisioning del contenitore 26a, viene creato un nuovo set di partizioni e la velocità effettiva è divisa equamente tra entrambi i set di partizioni.When you provision 26th container, a new partition set is created and the throughput is split equally between both the partition sets. Quindi, in qualsiasi momento, se si utilizza un solo contenitore dal database, è possibile utilizzare un massimo di 5K ur/sec (D/2).So at any point in time, if you are using only one container from the database it can use a maximum of 5K RU/s (D/2). Poiché sono presenti due set di partizioni, il fattore di condivisione della velocità effettiva viene suddiviso in D/2.Because there are two partition sets, the throughput shareability factor is split into D/2.

    Nell'immagine seguente viene illustrato graficamente l'esempio precedente:The following image demonstrates the previous example graphically:

    Fattore di condivisione della velocità effettiva a livello di database

Se i carichi di lavoro comportano l'eliminazione e la ricreazione di tutte le raccolte in un database, è consigliabile eliminare il database vuoto e ricreare un nuovo database prima della creazione della raccolta.If your workloads involve deleting and recreating all the collections in a database, it is recommended that you drop the empty database and recreate a new database prior to collection creation. L'immagine seguente mostra in che modo una partizione fisica può ospitare una o più partizioni logiche che appartengono a contenitori diversi all'interno di un database:The following image shows how a physical partition can host one or more logical partitions that belong to different containers within a database:

Partizione fisica

Configurare la velocità effettiva in un database e in un contenitoreSet throughput on a database and a container

È possibile combinare i due modelli,You can combine the two models. effettuando il provisioning della velocità effettiva sia nel database che nel contenitore.Provisioning throughput on both the database and the container is allowed. L'esempio seguente illustra come effettuare il provisioning della velocità effettiva in un database di Azure Cosmos e in un contenitore:The following example shows how to provision throughput on an Azure Cosmos database and a container:

  • È possibile creare un database di Azure Cosmos denominato Z con la velocità effettiva con provisioning delle UR "K" .You can create an Azure Cosmos database named Z with provisioned throughput of "K" RUs.

  • Successivamente, creare cinque contenitori denominati A, B, C, Ded e all'interno del database.Next, create five containers named A, B, C, D, and E within the database. Quando si crea il contenitore B, assicurarsi di abilitare il provisioning della velocità effettiva dedicata per questa opzione del contenitore e configurare in modo esplicito "P" ur della velocità effettiva con provisioning in questo contenitore.When creating container B, make sure to enable Provision dedicated throughput for this container option and explicitly configure "P" RUs of provisioned throughput on this container. Si noti che è possibile configurare la velocità effettiva condivisa e dedicata solo quando si creano il database e il contenitore.Note that you can configure shared and dedicated throughput only when creating the database and container.

    Impostazione della velocità effettiva a livello di contenitore

  • La velocità effettiva delle UR "K" è condivisa tra i quattro contenitori A, C, Ded e. La quantità esatta di velocità effettiva disponibile per a, C, Do e varia.The "K" RUs throughput is shared across the four containers A, C, D, and E. The exact amount of throughput available to A, C, D, or E varies. Non sono previsti contratti di servizio per la velocità effettiva di ogni singolo contenitore.There are no SLAs for each individual container’s throughput.

  • Al contenitore denominato B è garantita la velocità effettiva delle UR "P" per sempre.The container named B is guaranteed to get the "P" RUs throughput all the time. ed è supportato da contratti di servizio.It's backed by SLAs.

Nota

Un contenitore con velocità effettiva con provisioning non può essere convertito nel contenitore di database condiviso.A container with provisioned throughput cannot be converted to shared database container. Viceversa, un contenitore di database condiviso non può essere convertito per avere una velocità effettiva dedicata.Conversely a shared database container cannot be converted to have a dedicated throughput.

Aggiornamento della velocità effettiva in un database o in un contenitoreUpdate throughput on a database or a container

Dopo aver creato un contenitore di Azure Cosmos o un database, è possibile aggiornare la velocità effettiva con provisioning.After you create an Azure Cosmos container or a database, you can update the provisioned throughput. Non esiste alcun limite alla velocità effettiva massima con provisioning che è possibile configurare nel database o nel contenitore.There is no limit on the maximum provisioned throughput that you can configure on the database or the container. La velocità effettiva minima con provisioning dipende dai fattori seguenti:The minimum provisioned throughput depends on the following factors:

  • Dimensioni massime dei dati che è possibile archiviare nel contenitoreThe maximum data size that you ever store in the container
  • Velocità effettiva massima di cui si esegue il provisioning nel contenitoreThe maximum throughput that you ever provision on the container
  • Il numero massimo di contenitori di Azure Cosmos creati in un database con velocità effettiva condivisa.The maximum number of Azure Cosmos containers that you ever create in a database with shared throughput.

È possibile recuperare la velocità effettiva minima di un contenitore o di un database a livello di programmazione usando gli SDK o visualizzare il valore nel portale di Azure.You can retrieve the minimum throughput of a container or a database programmatically by using the SDKs or view the value in the Azure portal. Quando si usa .NET SDK, il metodo DocumentClient. ReplaceOfferAsync consente di ridimensionare il valore della velocità effettiva con provisioning.When using the .NET SDK, the DocumentClient.ReplaceOfferAsync method allows you to scale the provisioned throughput value. Quando si usa Java SDK, il metodo RequestOptions. setOfferThroughput consente di ridimensionare il valore della velocità effettiva con provisioning.When using the Java SDK, the RequestOptions.setOfferThroughput method allows you to scale the provisioned throughput value.

Quando si usa .NET SDK, il metodo DocumentClient. ReadOfferAsync consente di recuperare la velocità effettiva minima di un contenitore o di un database.When using the .NET SDK, the DocumentClient.ReadOfferAsync method allows you to retrieve the minimum throughput of a container or a database.

È possibile ridimensionare la velocità effettiva con provisioning di un contenitore o di un database in qualsiasi momento.You can scale the provisioned throughput of a container or a database at any time. Quando viene eseguita un'operazione di ridimensionamento per aumentare la velocità effettiva, può essere necessario più tempo a causa delle attività di sistema per il provisioning delle risorse necessarie.When a scale operation is performed to increase the throughput, it can take longer time due to the system tasks to provision the required resources. È possibile controllare lo stato dell'operazione di ridimensionamento in portale di Azure o a livello di codice usando gli SDK.You can check the status of the scale operation in Azure portal or programmatically using the SDKs. Quando si usa .NET SDK, è possibile ottenere lo stato dell'operazione di ridimensionamento usando il metodo DocumentClient.ReadOfferAsync.When using the .Net SDK, you can get the status of the scale operation by using the DocumentClient.ReadOfferAsync method.

Confronto tra modelliComparison of models

ParametroParameter Velocità effettiva con provisioning in un databaseThroughput provisioned on a database Velocità effettiva con provisioning in un contenitoreThroughput provisioned on a container
UR minimeMinimum RUs 400. Dopo i primi quattro contenitori, ogni contenitore aggiuntivo richiede almeno 100 UR al secondo.400 (After the first four containers, each additional container requires a minimum of 100 RUs per second.) 400400
UR minime per contenitoreMinimum RUs per container 100100 400400
UR massimeMaximum RUs Illimitate, nel database.Unlimited, on the database. Illimitate, nel contenitore.Unlimited, on the container.
UR assegnate o disponibili per un contenitore specificoRUs assigned or available to a specific container Nessuna garanzia.No guarantees. Le UR assegnate a un determinato contenitore dipendono dalle proprietà.RUs assigned to a given container depend on the properties. Le proprietà possono essere, a scelta, le chiavi di partizione dei contenitori che condividono la velocità effettiva, la distribuzione del carico di lavoro e il numero di contenitori.Properties can be the choice of partition keys of containers that share the throughput, the distribution of the workload, and the number of containers. Tutte le UR configurate nel contenitore sono riservate esclusivamente per il contenitore.All the RUs configured on the container are exclusively reserved for the container.
Archiviazione massima per un contenitoreMaximum storage for a container Senza limiti.Unlimited. Senza limiti.Unlimited.
Velocità effettiva massima per partizione logica di un contenitoreMaximum throughput per logical partition of a container 10.000 UR10K RUs 10.000 UR10K RUs
Spazio di archiviazione massimo (data + indice) per partizione logica di un contenitoreMaximum storage (data + index) per logical partition of a container 10 GB10 GB 10 GB10 GB

Passaggi successiviNext steps