Introdução à produção prevista na Azure Cosmos DBIntroduction to provisioned throughput in Azure Cosmos DB

O Azure Cosmos DB permite-lhe definir o rendimento previsto nas suas bases de dados e contentores.Azure Cosmos DB allows you to set provisioned throughput on your databases and containers. Existem dois tipos de produção a provisionada, standard (manual) ou autoescala.There are two types of provisioned throughput, standard (manual) or autoscale. Este artigo apresenta uma visão geral de como funciona o rendimento previsto.This article gives an overview of how provisioned throughput works.

Uma base de dados do Azure Cosmos é uma unidade de gestão para um conjunto de contentores.An Azure Cosmos database is a unit of management for a set of containers. Uma base de dados é constituída por um conjunto de contentores independentes de esquemas.A database consists of a set of schema-agnostic containers. Um contentor do Azure Cosmos é a unidade de escalabilidade para o débito e para o armazenamento.An Azure Cosmos container is the unit of scalability for both throughput and storage. Um contentor é particionado horizontalmente num conjunto de computadores numa região do Azure e é distribuído por todas as regiões do Azure associadas à 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 a Azure Cosmos DB, você pode provisões para dois granulares:With Azure Cosmos DB, you can provision throughput at two granularities:

  • Contentores do Azure CosmosAzure Cosmos containers
  • Bases de dados do Azure CosmosAzure Cosmos databases

Produção definida num recipienteSet throughput on a container

A produção a forjada num contentor Azure Cosmos é exclusivamente reservada a esse contentor.The throughput provisioned on an Azure Cosmos container is exclusively reserved for that container. O contentor recebe sempre a produção a provisionada.The container receives the provisioned throughput all the time. A produção a provisionada num contentor é apoiada financeiramente pelas AEA.The provisioned throughput on a container is financially backed by SLAs. Para aprender a configurar a produção padrão (manual) num recipiente, consulte a produção de provisão num recipiente Azure Cosmos.To learn how to configure standard (manual) throughput on a container, see Provision throughput on an Azure Cosmos container. Para aprender a configurar a produção de autoescalação num recipiente, consulte a produção de escala automática .To learn how to configure autoscale throughput on a container, see Provision autoscale throughput.

A definição de produção prevista num recipiente é a opção mais utilizada.Setting provisioned throughput on a container is the most frequently used option. Pode dimensionar elasticamente a produção de um recipiente, fornecendo qualquer quantidade de produção através da utilização de Unidades de Pedido (RUs).You can elastically scale throughput for a container by provisioning any amount of throughput by using Request Units (RUs).

A produção prevista para um recipiente é distribuída uniformemente entre as suas divisórias físicas, e assumindo uma boa chave de partição que distribui uniformemente as divisórias lógicas entre as divisórias físicas, a produção também é distribuída uniformemente por todas as divisórias lógicas do recipiente.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 produção de divisórias lógicas.You cannot selectively specify the throughput for logical partitions. Uma ou mais divisórias lógicas de um recipiente são acolhidas por uma partição física, as divisórias físicas pertencem exclusivamente ao recipiente e suportam a produção prevista no recipiente.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 numa partição lógica consumir mais do que a produção que foi atribuída à partição física subjacente, é possível que as suas operações sejam limitadas.If the workload running on a logical partition consumes more than the throughput that was allocated to the underlying physical partition, it's possible that your operations will be rate-limited. O que é conhecido como uma partição quente ocorre quando uma partição lógica tem desproporcionalmente mais pedidos do que outros valores-chave de partição.What is known as a hot partition occurs when one logical partition has disproportionately more requests than other partition key values.

Quando ocorre uma limitação da taxa, pode aumentar a produção prevista para todo o contentor ou voltar a tentar as operações.When rate-limiting occurs, you can either increase the provisioned throughput for the entire container or retry the operations. Também deve certificar-se de que escolhe uma chave de partição que distribui uniformemente o armazenamento e o volume de pedidos.You also should ensure that you choose a partition key that evenly distributes storage and request volume. Para obter mais informações sobre a partição, consulte a partição e a escala horizontal em Azure Cosmos DB.For more information about partitioning, see Partitioning and horizontal scaling in Azure Cosmos DB.

Recomendamos que configuure a produção na granularidade do recipiente quando pretender um desempenho previsível para o recipiente.We recommend that you configure throughput at the container granularity when you want predictable performance for the container.

A imagem a seguir mostra como uma partição física acolhe uma ou mais divisórias lógicas de um recipiente:The following image shows how a physical partition hosts one or more logical partitions of a container:

Partição física que acolhe uma ou mais divisórias lógicas de um recipiente

Definir saída numa base de dadosSet throughput on a database

Quando fornece o rendimento numa base de dados Azure Cosmos, o resultado é partilhado em todos os contentores (chamados contentores de base de dados partilhados) na base 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. A única exceção ocorre se tiver especificado um débito aprovisionado em contentores específicos na base de dados.An exception is if you specified a provisioned throughput on specific containers in the database. A partilha da produção de nível de base de dados entre os seus contentores é análoga à hospedagem de uma base de dados num conjunto 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 contentores dentro de uma base de dados partilham os recursos disponíveis numa máquina, naturalmente não obtém um desempenho previsível em nenhum recipiente 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 aprender a configurar a produção prevista numa base de dados, consulte a produção de Configure prevista numa base de dados do Azure Cosmos.To learn how to configure provisioned throughput on a database, see Configure provisioned throughput on an Azure Cosmos database. Para aprender a configurar a produção de autoescalação numa base de dados, consulte a produção de escala automática da Provision.To learn how to configure autoscale throughput on a database, see Provision autoscale throughput.

Como todos os contentores dentro da base de dados partilham a produção a forjada, a Azure Cosmos DB não fornece quaisquer garantias de produção previsíveis para um determinado contentor nessa base 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 produção que um recipiente específico pode receber depende de:The portion of the throughput that a specific container can receive is dependent on:

  • O número de contentores.The number of containers.
  • A escolha das chaves de partição para vários recipientes.The choice of partition keys for various containers.
  • A distribuição da carga de trabalho através de várias divisórias lógicas dos contentores.The distribution of the workload across various logical partitions of the containers.

Recomendamos que configuure a produção numa base de dados quando pretender partilhar a produção em vários contentores, mas não quer dedicar a produção a nenhum recipiente em particular.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 seguintes exemplos demonstram onde é preferido a produção de provisão ao nível da base de dados:The following examples demonstrate where it's preferred to provision throughput at the database level:

  • A partilha da produção de uma base de dados através de um conjunto de contentores é útil para uma aplicação multitenante.Sharing a database's provisioned throughput across a set of containers is useful for a multitenant application. Cada utilizador pode ser representado por um recipiente Azure Cosmos distinto.Each user can be represented by a distinct Azure Cosmos container.

  • Partilhar a produção de uma base de dados através de um conjunto de contentores é útil quando migra uma base de dados NoSQL, como o MongoDB ou a Cassandra, hospedado num conjunto de VMs ou de servidores físicos no local para a 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. Pense na produção a provisionada configurada na sua base de dados Azure Cosmos como um equivalente lógico, mas mais rentável e elástico, à capacidade de computação do seu 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 recipientes criados dentro de uma base de dados com produção a forerada 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. A qualquer momento, a produção atribuída a um contentor dentro de uma base de dados é distribuída por todas as divisórias lógicas desse contentor.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 se tem contentores que partilham a produção configurada numa base de dados, não se pode aplicar seletivamente a produção a um recipiente específico ou a uma divisória 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 numa partição lógica consumir mais do que a produção atribuída a uma partição lógica específica, as suas operações são limitadas à 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 ocorre a limitação da taxa, pode aumentar a produção de toda a base de dados ou voltar a tentar 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 partição, consulte as divisórias lógicas.For more information on partitioning, see Logical partitions.

Os contentores numa base de dados de débito partilhado partilham o débito (RU/s) alocado a essa base de dados.Containers in a shared throughput database share the throughput (RU/s) allocated to that database. Pode ter até quatro contentores com um mínimo de 400 RU/s na base de dados.You can have up to four containers with a minimum of 400 RU/s on the database. Com a produção normalizada (manual), cada novo recipiente após os quatro primeiros exigirá um mínimo adicional de 100 RU/s.With standard (manual) provisioned throughput, each new container after the first four will require an additional 100 RU/s minimum. Por exemplo, se tiver uma base de dados de débito partilhado com oito contentores, o mínimo de RU/s na base de dados será de 800 RU/s.For example, if you have a shared throughput database with eight containers, the minimum RU/s on the database will be 800 RU/s. Com a produção de autoescala a provisionada, pode ter até 25 contentores numa base de dados com max 4000 RU/s (balanças entre 400 - 4000 RU/s).With autoscale provisioned throughput, you can have up to 25 containers in a database with autoscale max 4000 RU/s (scales between 400 - 4000 RU/s).

Nota

Em fevereiro de 2020, introduzimos uma alteração que permite ter um máximo de 25 contentores numa base de dados de produção partilhada, o que permite melhor a partilha de produção através dos contentores.In February 2020, we introduced a change that allows you to have a maximum of 25 containers in a shared throughput database, which better enables throughput sharing across the containers. Após os primeiros 25 contentores, só pode adicionar mais contentores à base de dados se forem a provisionados com produção dedicada, que é separada da produção partilhada da base de dados.After the first 25 containers, you can add more containers to the database only if they are provisioned with dedicated throughput, which is separate from the shared throughput of the database.
Se a sua conta DB Azure Cosmos já tiver uma base de dados de produção partilhada com >=25 contentores, a conta e todas as outras contas na mesma subscrição do Azure estão isentas desta alteração.If your Azure Cosmos DB account already contains a shared throughput database with >=25 containers, the account and all other accounts in the same Azure subscription are exempt from this change. Contacte o suporte do produto se tiver feedback ou dúvidas.Please contact product support if you have feedback or questions.

Se as suas cargas de trabalho envolverem a eliminação e recriação de todas as coleções numa base de dados, recomenda-se que deixe cair a base de dados vazia e recrie uma nova base de dados antes da criação da recolha.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 acolher uma ou mais divisórias lógicas que pertencem a diferentes recipientes dentro de uma base 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 que acolhe uma ou mais divisórias lógicas de um recipiente

Colocar a produção numa base de dados e num contentorSet throughput on a database and a container

Pode combinar os dois modelos.You can combine the two models. É permitido o fornecimento de produção na base de dados e no contentor.Provisioning throughput on both the database and the container is allowed. O exemplo a seguir mostra como prever a produção normalizada (manual) prevista numa base de dados da Azure Cosmos e num contentor:The following example shows how to provision standard (manual) provisioned throughput on an Azure Cosmos database and a container:

  • Pode criar uma base de dados Azure Cosmos chamada Z com produção padrão (manual) de RUs "K".You can create an Azure Cosmos database named Z with standard (manual) provisioned throughput of "K" RUs.

  • Em seguida, crie cinco recipientes chamados A, B, C, De E dentro da base de dados.Next, create five containers named A, B, C, D, and E within the database. Ao criar o contentor B, certifique-se de que permite a produção dedicada a esta opção de contentor e configure explicitamente as RUs "P" de produção prevista neste recipiente.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. Só pode configurar a produção partilhada e dedicada quando estiver a criar a base de dados e o contentor.You can configure shared and dedicated throughput only when creating the database and container.

    Partição física que acolhe uma ou mais divisórias lógicas de um recipiente

  • A produção de RUs "K" é partilhada nos quatro contentores A, C, De E. A quantidade exata de produção disponível para A, C, Dou 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 produção de cada contentor.There are no SLAs for each individual container's throughput.

  • O contentor chamado B tem a garantia de obter sempre a produção de RUs "P".The container named B is guaranteed to get the "P" RUs throughput all the time. É apoiado por SLAs.It's backed by SLAs.

Nota

Um contentor com produção a forerada não pode ser convertido para recipiente de base de dados partilhado.A container with provisioned throughput cannot be converted to shared database container. Inversamente, um recipiente de base de dados partilhado não pode ser convertido para ter uma produção dedicada.Conversely a shared database container cannot be converted to have a dedicated throughput.

Atualizar o rendimento numa base de dados ou num contentorUpdate throughput on a database or a container

Depois de criar um recipiente Azure Cosmos ou uma base de dados, pode atualizar o rendimento previsto.After you create an Azure Cosmos container or a database, you can update the provisioned throughput. Não existe limite para a produção máxima prevista que possa configurar na base de dados ou no contentor.There is no limit on the maximum provisioned throughput that you can configure on the database or the container.

Produção atual a provisionadaCurrent provisioned throughput

Pode recuperar o rendimento previsto de um contentor ou de uma base de dados no portal Azure ou utilizando os SDKs:You can retrieve the provisioned throughput of a container or a database in the Azure portal or by using the SDKs:

A resposta desses métodos contém também o rendimento mínimo previsto para o contentor ou base de dados:The response of those methods also contains the minimum provisioned throughput for the container or database:

O ru/s mínimo real pode variar dependendo da configuração da sua conta.The actual minimum RU/s may vary depending on your account configuration. Mas geralmente é o máximo de:But generally it's the maximum of:

  • 400 RU/s400 RU/s
  • Armazenamento atual em GB * 10 RU/sCurrent storage in GB * 10 RU/s
  • RU/s mais elevados a provisionados na base de dados ou no contentor / 100Highest RU/s provisioned on the database or container / 100
  • Contagem de contentores * 100 RU/s (apenas base de dados de produção partilhada)Container count * 100 RU/s (shared throughput database only)

Alteração da produção a provisionadaChanging the provisioned throughput

Pode escalar a produção de um contentor ou de uma base de dados através do portal Azure ou utilizando os SDKs:You can scale the provisioned throughput of a container or a database through the Azure portal or by using the SDKs:

Se estiver a reduzir a produção a provisionada, poderá fazê-lo até ao mínimo.If you are reducing the provisioned throughput, you will be able to do it up to the minimum.

Se estiver a aumentar a produção prevista, a maior parte do tempo, a operação é instantânea.If you are increasing the provisioned throughput, most of the time, the operation is instantaneous. Existem, no entanto, casos em que a operação pode demorar mais tempo devido às tarefas do sistema para a disponibilização dos recursos necessários.There are however, cases where the operation can take longer time due to the system tasks to provision the required resources. Neste caso, uma tentativa de modificar a produção prevista enquanto esta operação está em curso produzirá uma resposta HTTP 423 com uma mensagem de erro explicando que outra operação de escala está em curso.In this case, an attempt to modify the provisioned throughput while this operation is in progress will yield an HTTP 423 response with an error message explaining that another scaling operation is in progress.

Nota

Se está a planear uma carga de trabalho de ingestão muito grande que exigirá um grande aumento da produção a provisionada, tenha em mente que a operação de escala não tem SLA e, como referido no parágrafo anterior, pode demorar muito tempo quando o aumento for grande.If you are planning for a very large ingestion workload that will require a big increase in provisioned throughput, keep in mind that the scaling operation has no SLA and, as mentioned in the previous paragraph, it can take a long time when the increase is large. É melhor planear com antecedência e iniciar a escala antes do início da carga de trabalho e utilizar os métodos abaixo para verificar o progresso.You might want to plan ahead and start the scaling before the workload starts and use the below methods to check progress.

Pode verificar programáticamente o progresso da escala, lendo a produção atual prevista e utilizando:You can programmatically check the scaling progress by reading the current provisioned throughput and using:

Pode utilizar as métricas do Azure Monitor para visualizar o histórico de produção provisitada (RU/s) e armazenamento num recurso.You can use Azure Monitor metrics to view the history of provisioned throughput (RU/s) and storage on a resource.

Programa de alta produção / baixa produçãoHigh storage / low throughput program

Tal como descrito na secção de produção atual acima, o rendimento mínimo que pode prever num contentor ou base de dados depende de uma série de fatores.As described in the Current provisioned throughput section above, the minimum throughput you can provision on a container or database depends on a number of factors. Um deles é a quantidade de dados atualmente armazenados, uma vez que a Azure Cosmos DB impõe um rendimento mínimo de 10 RU/s por GB de armazenamento.One of them is the amount of data currently stored, as Azure Cosmos DB enforces a minimum throughput of 10 RU/s per GB of storage.

Isto pode ser uma preocupação em situações em que você precisa armazenar grandes quantidades de dados, mas tem baixos requisitos de produção em comparação.This can be a concern in situations where you need to store large amounts of data, but have low throughput requirements in comparison. Para melhor acomodar estes cenários, a Azure Cosmos DB introduziu um programa de "alto armazenamento/baixo rendimento" que diminui a restrição RU/s por GB de 10 para 1 em contas elegíveis.To better accommodate these scenarios, Azure Cosmos DB has introduced a "high storage / low throughput" program that decreases the RU/s per GB constraint from 10 to 1 on eligible accounts.

Atualmente precisa de ter pelo menos 1 contentor ou base de dados de produção partilhada contendo mais de 1 TB de dados na sua conta para ser elegível.You currently need to have at least 1 container or shared-throughput database containing more than 1 TB of data in your account to be eligible. Para aderir a este programa e avaliar a sua plena elegibilidade, tudo o que tem de fazer é preencher esta pesquisa.To join this program and assess your full eligibility, all you have to do is to fill this survey. A equipa DB da Azure Cosmos irá então acompanhar e proceder com o seu embarque.The Azure Cosmos DB team will then follow up and proceed with your onboarding.

Comparação de modelosComparison of models

Este quadro mostra uma comparação entre a produção padrão de provisionamento (manual) numa base de dados vs. num contentor.This table shows a comparison between provisioning standard (manual) throughput on a database vs. on a container.

ParâmetroParameter Produção padrão (manual) numa base de dadosStandard (manual) throughput on a database Produção padrão (manual) num recipienteStandard (manual) throughput on a container Produção de escala automática numa base de dadosAutoscale throughput on a database Produção de escala automática num contentorAutoscale throughput on a container
Ponto de entrada (ru/s mínimo)Entry point (minimum RU/s) 400 RU/s.400 RU/s. Após os quatro primeiros contentores, cada recipiente adicional requer um mínimo de 100 RU/sAfter the first four containers, each additional container requires a minimum of 100 RU/s 400400 Autoescala entre 400 - 4000 RU/s.Autoscale between 400 - 4000 RU/s. Pode ter até 25 contentores sem RU/s mínimo por recipienteCan have up to 25 containers with no RU/s minimum per container Autoescala entre 400 - 4000 RU/s.Autoscale between 400 - 4000 RU/s.
RU/s mínimo por contentorMinimum RU/s per container 100100 400400 -- Autoescala entre 400 - 4000 RU/sAutoscale between 400 - 4000 RU/s
RUs máximosMaximum RUs Ilimitado, na base de dados.Unlimited, on the database. Ilimitado, no contentor.Unlimited, on the container. Ilimitado, na base de dados.Unlimited, on the database. Ilimitado, no contentor.Unlimited, on the container.
RUs atribuídos ou disponíveis para um recipiente específicoRUs assigned or available to a specific container Sem garantias.No guarantees. As RUs atribuídas a um determinado contentor dependem das propriedades.RUs assigned to a given container depend on the properties. As propriedades podem ser a escolha das chaves de partição dos contentores que partilham a produção, a distribuição da carga de trabalho e o número de contentores.Properties can be the choice of partition keys of containers that share the throughput, the distribution of the workload, and the number of containers. Todas as RUs configuradas no recipiente são exclusivamente reservadas ao recipiente.All the RUs configured on the container are exclusively reserved for the container. Sem garantias.No guarantees. As RUs atribuídas a um determinado contentor dependem das propriedades.RUs assigned to a given container depend on the properties. As propriedades podem ser a escolha das chaves de partição dos contentores que partilham a produção, a distribuição da carga de trabalho e o número de contentores.Properties can be the choice of partition keys of containers that share the throughput, the distribution of the workload, and the number of containers. Todas as RUs configuradas no recipiente são exclusivamente reservadas ao recipiente.All the RUs configured on the container are exclusively reserved for the container.
Armazenamento máximo para um recipienteMaximum storage for a container Ilimitado.Unlimited. IlimitadoUnlimited IlimitadoUnlimited IlimitadoUnlimited
Produção máxima por partição lógica de um recipienteMaximum throughput per logical partition of a container 10K RU/s10K RU/s 10K RU/s10K RU/s 10K RU/s10K RU/s 10K RU/s10K RU/s
Armazenamento máximo (dados + índice) por partição lógica de um recipienteMaximum storage (data + index) per logical partition of a container 20 GB20 GB 20 GB20 GB 20 GB20 GB 20 GB20 GB

Passos seguintesNext steps