Aprovisionar débito em contentores e bases de dadosProvision throughput on containers and databases

Um banco de dados Cosmos do Azure é uma unidade de gerenciamento para um conjunto de contêineres.An Azure Cosmos database is a unit of management for a set of containers. Um banco de dados consiste em um conjunto de contêineres independentes de esquema.A database consists of a set of schema-agnostic containers. Um contêiner Cosmos do Azure é a unidade de escalabilidade para a taxa de transferência e o armazenamento.An Azure Cosmos container is the unit of scalability for both throughput and storage. Um contêiner é particionado horizontalmente em um conjunto de computadores dentro de uma região do Azure e é distribuído entre todas as regiões do Azure associadas à sua conta do 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.

Com Azure Cosmos DB, você pode provisionar a taxa de transferência em duas granularidades:With Azure Cosmos DB, you can provision throughput at two granularities:

  • Contêineres de Cosmos do AzureAzure Cosmos containers
  • Bancos de dados Cosmos do AzureAzure Cosmos databases

Definir a taxa de transferência em um contêinerSet throughput on a container

A taxa de transferência provisionada em um contêiner Cosmos do Azure é reservada exclusivamente para esse contêiner.The throughput provisioned on an Azure Cosmos container is exclusively reserved for that container. O contêiner recebe a taxa de transferência provisionada o tempo todo.The container receives the provisioned throughput all the time. A taxa de transferência provisionada em um contêiner é apoiada financeiramente pelos SLAs.The provisioned throughput on a container is financially backed by SLAs. Para saber como configurar a taxa de transferência em um contêiner, confira provisionar taxa de transferência em um contêiner Cosmos do Azure.To learn how to configure throughput on a container, see Provision throughput on an Azure Cosmos container.

Definir a taxa de transferência provisionada em um contêiner é a opção usada com mais frequência.Setting provisioned throughput on a container is the most frequently used option. Você pode dimensionar de forma elástica a taxa de transferência para um contêiner Provisionando qualquer quantidade de taxa de transferência usando as unidades de solicitação (RUs).You can elastically scale throughput for a container by provisioning any amount of throughput by using Request Units (RUs).

A taxa de transferência provisionada para um contêiner é distribuída uniformemente entre suas partições físicas e supondo uma boa chave de partição que distribui as partições lógicas uniformemente entre as partições físicas, a taxa de transferência também é distribuída uniformemente entre todas as as partições lógicas do contêiner.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. Não é possível especificar seletivamente a taxa de transferência para partições lógicas.You cannot selectively specify the throughput for logical partitions. Como uma ou mais partições lógicas de um contêiner são hospedadas por uma partição física, as partições físicas pertencem exclusivamente ao contêiner e dão suporte à taxa de transferência provisionada no contêiner.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 a carga de trabalho em execução em uma partição lógica consumir mais do que a taxa de transferência alocada para essa partição lógica, suas operações obterão uma taxa limitada.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 a limitação de taxa ocorre, você pode aumentar a taxa de transferência provisionada para todo o contêiner ou tentar novamente as operações.When rate-limiting occurs, you can either increase the provisioned throughput for the entire container or retry the operations. Para obter mais informações sobre particionamento, consulte partições lógicas.For more information on partitioning, see Logical partitions.

Recomendamos que você configure a taxa de transferência na granularidade do contêiner quando desejar o desempenho garantido para o contêiner.We recommend that you configure throughput at the container granularity when you want guaranteed performance for the container.

A imagem a seguir mostra como uma partição física hospeda uma ou mais partições lógicas de um contêiner:The following image shows how a physical partition hosts one or more logical partitions of a container:

Partição física

Definir a taxa de transferência em um banco de dadosSet throughput on a database

Quando você provisiona a produtividade em um banco de dados Cosmos do Azure, a taxa de transferência é compartilhada entre todos os contêineres (chamados de contêineres de banco de dados compartilhados) no banco de dados.When you provision throughput on an Azure Cosmos database, the throughput is shared across all the containers (called shared database containers) in the database. Uma exceção é se você especificou uma taxa de transferência provisionada em contêineres específicos no banco de dados.An exception is if you specified a provisioned throughput on specific containers in the database. O compartilhamento da taxa de transferência provisionada no nível de banco de dados entre seus contêineres é análogo à Hospedagem de um banco de dados em um cluster de máquinas.Sharing the database-level provisioned throughput among its containers is analogous to hosting a database on a cluster of machines. Como todos os contêineres em um banco de dados compartilham os recursos disponíveis em um computador, naturalmente, você não obtém um desempenho previsível em nenhum contêiner específico.Because all containers within a database share the resources available on a machine, you naturally do not get predictable performance on any specific container. Para saber como configurar a taxa de transferência provisionada em um banco de dados, consulte Configurar a taxa de transferência provisionada em um banco de dados Cosmos do Azure.To learn how to configure provisioned throughput on a database, see Configure provisioned throughput on an Azure Cosmos database.

Definir a taxa de transferência em um banco de dados Cosmos do Azure garante que você receba a taxa de transferência provisionada para esse banco de dados o tempo todo.Setting throughput on an Azure Cosmos database guarantees that you receive the provisioned throughput for that database all the time. Como todos os contêineres no banco de dados compartilham a taxa de transferência provisionada, Azure Cosmos DB não fornece nenhuma garantia de taxa de transferência previsível para um contêiner específico nesse banco de dados.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. A parte da taxa de transferência que um contêiner específico pode receber depende de:The portion of the throughput that a specific container can receive is dependent on:

  • O número de contêineres.The number of containers.
  • A opção de chaves de partição para vários contêineres.The choice of partition keys for various containers.
  • A distribuição da carga de trabalho entre várias partições lógicas dos contêineres.The distribution of the workload across various logical partitions of the containers.

Recomendamos que você configure a taxa de transferência em um banco de dados quando desejar compartilhar a taxa de transferência em vários contêineres, mas não quiser dedicar a taxa de transferência a nenhum contêiner específico.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.

Os exemplos a seguir demonstram onde é preferível provisionar a taxa de transferência no nível do banco de dados:The following examples demonstrate where it's preferred to provision throughput at the database level:

  • O compartilhamento de uma taxa de transferência provisionada de um banco de dados em um conjunto de contêineres é útil para um aplicativo multilocatário.Sharing a database’s provisioned throughput across a set of containers is useful for a multitenant application. Cada usuário pode ser representado por um contêiner Cosmos do Azure distinto.Each user can be represented by a distinct Azure Cosmos container.

  • O compartilhamento de uma taxa de transferência provisionada de um banco de dados em um conjunto de contêineres é útil quando você migra um banco de dados NoSQL, como MongoDB ou Cassandra, hospedado em um cluster de VMs ou em servidores físicos locais para Azure Cosmos DB.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. Considere a taxa de transferência provisionada configurada no banco de dados Cosmos do Azure como um equivalente lógico, mas mais econômica e elástica, para aquela da capacidade de computação do cluster MongoDB ou 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.

Todos os contêineres criados dentro de um banco de dados com taxa de transferência provisionada devem ser criados com uma chave de partição.All containers created inside a database with provisioned throughput must be created with a partition key. Em qualquer momento determinado, a taxa de transferência alocada para um contêiner em um banco de dados é distribuída entre todas as partições lógicas desse contêiner.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 você tem contêineres que compartilham a taxa de transferência provisionada configurada em um banco de dados, não é possível aplicar seletivamente a taxa de transferência a um contêiner específico ou a uma partição lógica.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 a carga de trabalho em uma partição lógica consumir mais do que a taxa de transferência alocada para uma partição lógica específica, suas operações serão limitadas por taxa.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 a limitação de taxa ocorre, você pode aumentar a taxa de transferência do banco de dados inteiro ou tentar novamente as operações.When rate-limiting occurs, you can either increase the throughput for the entire database or retry the operations. Para obter mais informações sobre particionamento, consulte partições lógicas.For more information on partitioning, see Logical partitions.

A taxa de transferência provisionada em um banco de dados pode ser compartilhada pelos contêineres dentro desse banco de dados.Throughput provisioned on a database can be shared by the containers within that database. Cada novo contêiner na taxa de transferência compartilhada no nível do banco de dados exigirá 100 RU/s.Each new container in database level shared throughput will require 100 RU/s. Ao provisionar contêineres com oferta de banco de dados compartilhado:When you provision containers with shared database offering:

  • Cada 25 contêineres é agrupado em um conjunto de partições e a taxa de transferência do banco de dados (D) é compartilhada entre os contêineres no conjunto de partições.Every 25 containers are grouped into a partition set and the database throughput(D) is shared between the containers in the partition set. Se houver até 25 contêineres no banco de dados e em qualquer ponto no tempo, se você estiver usando apenas um contêiner, esse contêiner poderá usar uma taxa de transferência máxima de ' 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.

  • Para cada novo contêiner criado após 25 contêineres, um novo conjunto de partições é criado e a taxa de transferência do banco de dados é dividida entre os novos conjuntos de partições criados (ou seja, D/2 para 2 conjuntos de partições, D/3 para 3 conjuntos de partições...).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…). Em qualquer momento, se você estiver usando apenas um contêiner do banco de dados, ele poderá usar um máximo de (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… taxa de transferência), respectivamente.throughput) respectively. Dada a taxa de transferência reduzida, é recomendável que você não crie mais do que 25 contêineres em um banco de dados.Given the reduced throughput, its recommended that you create no more than 25 containers in one database.

ExemploExample

  • Se você criar um banco de dados chamado "MyDB" com uma taxa de transferência provisionada de 10K RU/s.If you create a database named “MyDB” with a provisioned throughput of 10K RU/s.

  • Se você provisionar 25 contêineres em "MyDB", todos os contêineres serão agrupados em um conjunto de partições.If you provision 25 containers under “MyDB”, then all the containers are grouped into a partition set. Em qualquer momento, se você estiver usando apenas um contêiner do banco de dados, ele poderá usar um máximo de 10K RU/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 você provisiona o contêiner 26, um novo conjunto de partições é criado e a taxa de transferência é dividida igualmente entre os dois conjuntos de partições.When you provision 26th container, a new partition set is created and the throughput is split equally between both the partition sets. Portanto, em qualquer ponto no tempo, se você estiver usando apenas um contêiner do banco de dados, ele poderá usar um máximo de 5K RU/s (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). Como há dois conjuntos de partições, o fator de compartilhamento de produtividade é dividido em D/2.Because there are two partition sets, the throughput shareability factor is split into D/2.

    A imagem a seguir demonstra o exemplo anterior graficamente:The following image demonstrates the previous example graphically:

    Fator de compartilhamento na taxa de transferência no nível do banco de dados

Se suas cargas de trabalho envolvem excluir e recriar todas as coleções em um banco de dados, é recomendável descartar o banco de dados vazio e recriar um novo banco de dados antes da criação da coleção.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. A imagem a seguir mostra como uma partição física pode hospedar uma ou mais partições lógicas que pertencem a contêineres diferentes em um banco de dados:The following image shows how a physical partition can host one or more logical partitions that belong to different containers within a database:

Partição física

Definir a taxa de transferência em um banco de dados e um contêinerSet throughput on a database and a container

Você pode combinar os dois modelos.You can combine the two models. O provisionamento de taxa de transferência no banco de dados e no contêiner é permitido.Provisioning throughput on both the database and the container is allowed. O exemplo a seguir mostra como provisionar a taxa de transferência em um banco de dados Cosmos do Azure e um contêiner:The following example shows how to provision throughput on an Azure Cosmos database and a container:

  • Você pode criar um banco de dados Cosmos do Azure chamado Z com taxa de transferência provisionada de "K" RUs.You can create an Azure Cosmos database named Z with provisioned throughput of "K" RUs.

  • Em seguida, crie cinco contêineres chamados a, B, C, De e no banco de dados .Next, create five containers named A, B, C, D, and E within the database. Ao criar o contêiner B, certifique-se de habilitar provisionar taxa de transferência dedicada para essa opção de contêiner e configurar explicitamente "P" RUs de taxa de transferência provisionada neste contêiner.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. Observe que você pode configurar a taxa de transferência compartilhada e dedicada somente ao criar o banco de dados e o contêiner.Note that you can configure shared and dedicated throughput only when creating the database and container.

    Definindo a taxa de transferência no nível do contêiner

  • A taxa de transferência de RUs "K" é compartilhada entre os quatro contêineres a, C, De e. A quantidade exata de taxa de transferência disponível para a, C, Dou E 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. Não há SLAs para a taxa de transferência de cada contêiner individual.There are no SLAs for each individual container’s throughput.

  • O contêiner chamado B tem a garantia de obter a taxa de transferência de RUs "P" o tempo todo.The container named B is guaranteed to get the "P" RUs throughput all the time. Ele é apoiado por SLAs.It's backed by SLAs.

Nota

Um contêiner com taxa de transferência provisionada não pode ser convertido para o contêiner de banco de dados compartilhado.A container with provisioned throughput cannot be converted to shared database container. Por outro lado, um contêiner de banco de dados compartilhado não pode ser convertido para ter uma taxa de transferência dedicada.Conversely a shared database container cannot be converted to have a dedicated throughput.

Atualizar a taxa de transferência em um banco de dados ou em um contêinerUpdate throughput on a database or a container

Depois de criar um contêiner Cosmos do Azure ou um banco de dados, você pode atualizar a taxa de transferência provisionada.After you create an Azure Cosmos container or a database, you can update the provisioned throughput. Não há limite para a taxa de transferência máxima provisionada que você pode configurar no banco de dados ou no contêiner.There is no limit on the maximum provisioned throughput that you can configure on the database or the container. A taxa de transferência mínima provisionada depende dos seguintes fatores:The minimum provisioned throughput depends on the following factors:

  • O tamanho máximo de dados que você já armazenou no contêinerThe maximum data size that you ever store in the container
  • A taxa de transferência máxima que você já provisiona no contêinerThe maximum throughput that you ever provision on the container
  • O número máximo de contêineres de Cosmos do Azure que você já criou em um banco de dados com taxa de transferência compartilhada.The maximum number of Azure Cosmos containers that you ever create in a database with shared throughput.

Você pode recuperar a taxa de transferência mínima de um contêiner ou de um banco de dados programaticamente usando os SDKs ou exibir o valor no portal do 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. Ao usar o SDK do .NET, o método DocumentClient. ReplaceOfferAsync permite que você dimensione o valor da taxa de transferência provisionada.When using the .NET SDK, the DocumentClient.ReplaceOfferAsync method allows you to scale the provisioned throughput value. Ao usar o SDK do Java, o método Requestoptions. setOfferThroughput permite que você dimensione o valor de taxa de transferência provisionado.When using the Java SDK, the RequestOptions.setOfferThroughput method allows you to scale the provisioned throughput value.

Ao usar o SDK do .NET, o método DocumentClient. ReadOfferAsync permite que você recupere a taxa de transferência mínima de um contêiner ou de um banco de dados.When using the .NET SDK, the DocumentClient.ReadOfferAsync method allows you to retrieve the minimum throughput of a container or a database.

Você pode dimensionar a taxa de transferência provisionada de um contêiner ou de um banco de dados a qualquer momento.You can scale the provisioned throughput of a container or a database at any time. Quando uma operação de dimensionamento é executada para aumentar a taxa de transferência, ela pode levar mais tempo devido às tarefas do sistema para provisionar os recursos necessários.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. Você pode verificar o status da operação de dimensionamento em portal do Azure ou programaticamente usando os SDKs.You can check the status of the scale operation in Azure portal or programmatically using the SDKs. Ao usar o SDK do .net, você pode obter o status da operação de dimensionamento usando o método DocumentClient.ReadOfferAsync.When using the .Net SDK, you can get the status of the scale operation by using the DocumentClient.ReadOfferAsync method.

Comparação de modelosComparison of models

MeterParameter Taxa de transferência provisionada em um banco de dadosThroughput provisioned on a database Taxa de transferência provisionada em um contêinerThroughput provisioned on a container
RUs mínimaMinimum RUs 400 (após os quatro primeiros contêineres, cada contêiner adicional requer um mínimo de 100 RUs por segundo.)400 (After the first four containers, each additional container requires a minimum of 100 RUs per second.) 400400
RUs mínima por contêinerMinimum RUs per container 100100 400400
RUs máximaMaximum RUs Ilimitado, no banco de dados.Unlimited, on the database. Ilimitado, no contêiner.Unlimited, on the container.
RUs atribuído ou disponível para um contêiner específicoRUs assigned or available to a specific container Nenhuma garantia.No guarantees. O RUs atribuído a um determinado contêiner depende das propriedades.RUs assigned to a given container depend on the properties. As propriedades podem ser a opção de chaves de partição de contêineres que compartilham a taxa de transferência, a distribuição da carga de trabalho e o número de contêineres.Properties can be the choice of partition keys of containers that share the throughput, the distribution of the workload, and the number of containers. Todos os RUs configurados no contêiner são exclusivamente reservados para o contêiner.All the RUs configured on the container are exclusively reserved for the container.
Armazenamento máximo para um contêinerMaximum storage for a container Inúmeros.Unlimited. Inúmeros.Unlimited.
Taxa de transferência máxima por partição lógica de um contêinerMaximum throughput per logical partition of a container 10K RUs10K RUs 10K RUs10K RUs
Armazenamento máximo (dados + índice) por partição lógica de um contêinerMaximum storage (data + index) per logical partition of a container 10 GB10 GB 10 GB10 GB

Passos seguintesNext steps