Otimizar o débito aprovisionado no Azure Cosmos DBOptimize provisioned throughput cost in Azure Cosmos DB

APLICA A: SQL API Cassandra API API API API Table API Azure Cosmos DB API para MongoDB

Ao oferecer um modelo de produção a provisionado, a Azure Cosmos DB oferece um desempenho previsível em qualquer escala.By offering provisioned throughput model, Azure Cosmos DB offers predictable performance at any scale. Reservar ou aussentando a produção antes do tempo elimina o "efeito de vizinho barulhento" no seu desempenho.Reserving or provisioning throughput ahead of time eliminates the “noisy neighbor effect” on your performance. Você especifica a quantidade exata de produção que você precisa e Azure Cosmos DB garante a produção configurada, apoiada pela SLA.You specify the exact amount of throughput you need and Azure Cosmos DB guarantees the configured throughput, backed by SLA.

Pode começar com uma produção mínima de 400 RU/seg e escalar até dezenas de milhões de pedidos por segundo ou até mais.You can start with a minimum throughput of 400 RU/sec and scale up to tens of millions of requests per second or even more. Cada pedido que emite contra o seu contentor ou base de dados Azure Cosmos, como um pedido de leitura, pedido de escrita, pedido de consulta, procedimentos armazenados têm um custo correspondente que é deduzido do seu rendimento provisitado.Each request you issue against your Azure Cosmos container or database, such as a read request, write request, query request, stored procedures have a corresponding cost that is deducted from your provisioned throughput. Se você providenciar 400 RU/s e emitir uma consulta que custa 40 RUs, você será capaz de emitir 10 tais consultas por segundo.If you provision 400 RU/s and issue a query that costs 40 RUs, you will be able to issue 10 such queries per second. Qualquer pedido para além disso será limitado pela taxa e deverá voltar a julgar o pedido.Any request beyond that will get rate-limited and you should retry the request. Se estiver a utilizar motoristas de clientes, eles suportam a lógica de repetição automática.If you are using client drivers, they support the automatic retry logic.

Pode aprovisionar o débito em bases de dados ou contentores e cada estratégia pode ajudá-lo a poupar nos custos, consoante o cenário.You can provision throughput on databases or containers and each strategy can help you save on costs depending on the scenario.

Otimizar através do fornecimento de produção a diferentes níveisOptimize by provisioning throughput at different levels

  • Se forre o rendimento numa base de dados, todos os contentores, por exemplo, recolhas/tabelas/gráficos dentro dessa base de dados podem partilhar o rendimento com base na carga.If you provision throughput on a database, all the containers, for example collections/tables/graphs within that database can share the throughput based on the load. A produção reservada ao nível da base de dados é partilhada de forma desigual, dependendo da carga de trabalho num conjunto específico de contentores.Throughput reserved at the database level is shared unevenly, depending on the workload on a specific set of containers.

  • Se forrou a produção num contentor, a produção é garantida para esse contentor, apoiado pelo SLA.If you provision throughput on a container, the throughput is guaranteed for that container, backed by the SLA. A escolha de uma chave de partição lógica é crucial para a distribuição uniforme da carga em todas as divisórias lógicas de um recipiente.The choice of a logical partition key is crucial for even distribution of load across all the logical partitions of a container. Consulte os artigos de partição e de escala horizontal para obter mais detalhes.See Partitioning and horizontal scaling articles for more details.

Seguem-se algumas orientações para decidir sobre uma estratégia de produção prevista:The following are some guidelines to decide on a provisioned throughput strategy:

Considere o fornecimento de produção numa base de dados Azure Cosmos (contendo um conjunto de contentores) se:Consider provisioning throughput on an Azure Cosmos database (containing a set of containers) if:

  1. Você tem algumas dúzias de contentores Azure Cosmos e quer partilhar a produção através de alguns ou todos eles.You have a few dozen Azure Cosmos containers and want to share throughput across some or all of them.

  2. Você está migrando de uma base de dados de inquilino único projetado para funcionar em VMs hospedados em IaaS ou no local, por exemplo, NoSQL ou bases de dados relacionais para Azure Cosmos DB.You are migrating from a single-tenant database designed to run on IaaS-hosted VMs or on-premises, for example, NoSQL or relational databases to Azure Cosmos DB. E se tiver muitas coleções/tabelas/gráficos e não quiser fazer alterações no seu modelo de dados.And if you have many collections/tables/graphs and you do not want to make any changes to your data model. Note que poderá ter de comprometer alguns dos benefícios oferecidos pela Azure Cosmos DB se não estiver a atualizar o seu modelo de dados ao migrar de uma base de dados no local.Note, you might have to compromise some of the benefits offered by Azure Cosmos DB if you are not updating your data model when migrating from an on-premises database. Recomenda-se que reaculte sempre o seu modelo de dados para obter o máximo em termos de desempenho e também para otimizar os custos.It's recommended that you always reaccess your data model to get the most in terms of performance and also to optimize for costs.

  3. Pretende absorver picos não planeados em cargas de trabalho em virtude da produção agamada no nível da base de dados sujeita a um aumento inesperado na carga de trabalho.You want to absorb unplanned spikes in workloads by virtue of pooled throughput at the database level subjected to unexpected spike in workload.

  4. Em vez de definir a produção específica em recipientes individuais, preocupa-se em obter a produção agregada através de um conjunto de contentores dentro da base de dados.Instead of setting specific throughput on individual containers, you care about getting the aggregate throughput across a set of containers within the database.

Considere o fornecimento de rendimento num recipiente individual se:Consider provisioning throughput on an individual container if:

  1. Tem alguns contentores Azure Cosmos.You have a few Azure Cosmos containers. Como a Azure Cosmos DB é schema-agnóstica, um recipiente pode conter itens que têm esquemas heterogéneos e não exige que os clientes criem vários tipos de recipientes, um para cada entidade.Because Azure Cosmos DB is schema-agnostic, a container can contain items that have heterogeneous schemas and does not require customers to create multiple container types, one for each entity. É sempre uma opção a considerar se agrupar recipientes separados digamos 10-20 em um único recipiente faz sentido.It is always an option to consider if grouping separate say 10-20 containers into a single container makes sense. Com um mínimo de 400 RUs para contentores, juntar todos os contentores de 10 a 20 em um poderia ser mais rentável.With a 400 RUs minimum for containers, pooling all 10-20 containers into one could be more cost effective.

  2. Você quer controlar a produção de um recipiente específico e obter a produção garantida em um dado recipiente apoiado pela SLA.You want to control the throughput on a specific container and get the guaranteed throughput on a given container backed by SLA.

Considere um híbrido das duas estratégias acima:Consider a hybrid of the above two strategies:

  1. Como mencionado anteriormente, a Azure Cosmos DB permite-lhe misturar e combinar as duas estratégias acima, para que agora possa ter alguns contentores dentro da base de dados Azure Cosmos, que podem partilhar o rendimento previsto na base de dados, bem como alguns contentores dentro da mesma base de dados, que podem ter quantidades dedicadas de produção a forerada.As mentioned earlier, Azure Cosmos DB allows you to mix and match the above two strategies, so you can now have some containers within Azure Cosmos database, which may share the throughput provisioned on the database as well as, some containers within the same database, which may have dedicated amounts of provisioned throughput.

  2. Pode aplicar as estratégias acima para criar uma configuração híbrida, onde tem ambos os níveis de base de dados auser a produção com alguns contentores com produção dedicada.You can apply the above strategies to come up with a hybrid configuration, where you have both database level provisioned throughput with some containers having dedicated throughput.

Como mostrado na tabela seguinte, dependendo da escolha da API, você pode provisão de produção em diferentes granularidades.As shown in the following table, depending on the choice of API, you can provision throughput at different granularities.

APIAPI Para produção partilhada, configurarFor shared throughput, configure Para produção dedicada, configurarFor dedicated throughput, configure
API SQLSQL API Base de DadosDatabase ContentorContainer
API do Azure Cosmos DB para MongoDBAzure Cosmos DB's API for MongoDB Base de DadosDatabase ColeçãoCollection
API de CassandraCassandra API Espaço-chaveKeyspace TabelaTable
API do GremlinGremlin API Conta de base de dadosDatabase account GraphGraph
API de TabelaTable API Conta de base de dadosDatabase account TabelaTable

Ao auspor produção a diferentes níveis, pode otimizar os seus custos com base nas características da sua carga de trabalho.By provisioning throughput at different levels, you can optimize your costs based on the characteristics of your workload. Como mencionado anteriormente, pode aumentar programática e a qualquer momento o seu rendimento proviscionado para cada um dos contentores ou coletivamente através de um conjunto de contentores.As mentioned earlier, you can programmatically and at any time increase or decrease your provisioned throughput for either individual container(s) or collectively across a set of containers. Ao escalonar elasticamente a produção à medida que a sua carga de trabalho muda, só paga pela produção que configura.By elastically scaling throughput as your workload changes, you only pay for the throughput that you have configured. Se o seu recipiente ou um conjunto de contentores forem distribuídos por várias regiões, então a produção que configura no contentor ou um conjunto de contentores é garantidamente disponibilizada em todas as regiões.If your container or a set of containers is distributed across multiple regions, then the throughput you configure on the container or a set of containers is guaranteed to be made available across all regions.

Otimizar os pedidos com a limitação da taxaOptimize with rate-limiting your requests

Para cargas de trabalho que não sejam sensíveis à latência, pode prever menos produção e deixar a aplicação limitar a taxa quando a produção real exceder a produção prevista.For workloads that aren't sensitive to latency, you can provision less throughput and let the application handle rate-limiting when the actual throughput exceeds the provisioned throughput. O servidor terminará preventivamente o pedido com RequestRateTooLarge (código de estado HTTP 429) e devolverá o x-ms-retry-after-ms cabeçalho indicando o tempo, em milissegundos, de que o utilizador deve esperar antes de voltar a tentar o pedido.The server will preemptively end the request with RequestRateTooLarge (HTTP status code 429) and return the x-ms-retry-after-ms header indicating the amount of time, in milliseconds, that the user must wait before retrying the request.

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

Redatória lógica em SDKsRetry logic in SDKs

Os SDKs nativos (.NET/.NET Core, Java, Node.js e Python) capturam implicitamente esta resposta, respeitam o cabeçalho retípeido especificado pelo servidor e recandidam o pedido.The native SDKs (.NET/.NET Core, Java, Node.js and Python) implicitly catch this response, respect the server-specified retry-after header, and retry the request. A menos que a sua conta seja acedida simultaneamente por vários clientes, a próxima repetição será bem sucedida.Unless your account is accessed concurrently by multiple clients, the next retry will succeed.

Se tiver mais de um cliente a operar cumulativamente acima da taxa de pedido, a contagem de retíria por defeito, que está atualmente definida para 9, pode não ser suficiente.If you have more than one client cumulatively operating consistently above the request rate, the default retry count, which is currently set to 9, may not be sufficient. Nesses casos, o cliente lança um RequestRateTooLargeException código de estado 429 para a aplicação.In such cases, the client throws a RequestRateTooLargeException with status code 429 to the application. A contagem de repetições por defeito pode ser alterada definindo RetryOptions a instância "ConnectionPolicy".The default retry count can be changed by setting the RetryOptions on the ConnectionPolicy instance. Por predefinição, o RequestRateTooLargeException código de estado 429 é devolvido após um tempo de espera acumulado de 30 segundos se o pedido continuar a funcionar acima da taxa de pedido.By default, the RequestRateTooLargeException with status code 429 is returned after a cumulative wait time of 30 seconds if the request continues to operate above the request rate. Isto ocorre mesmo quando a contagem de repetição atual é inferior à contagem máxima de repetição, seja o padrão de 9 ou um valor definido pelo utilizador.This occurs even when the current retry count is less than the max retry count, be it the default of 9 or a user-defined value.

MaxRetryAttemptsOnThrottledRequests está definido para 3, por isso, neste caso, se uma operação de pedido for limitada por exceder a produção reservada para o contentor, a operação de pedido retrifique três vezes antes de lançar a exceção ao pedido.MaxRetryAttemptsOnThrottledRequests is set to 3, so in this case, if a request operation is rate limited by exceeding the reserved throughput for the container, the request operation retries three times before throwing the exception to the application. MaxRetryWaitTimeInSegundos está definido para 60, por isso, neste caso, se o tempo de espera acumulado em segundos, uma vez que o primeiro pedido excede 60 segundos, a exceção é lançada.MaxRetryWaitTimeInSeconds is set to 60, so in this case if the cumulative retry wait time in seconds since the first request exceeds 60 seconds, the exception is thrown.

ConnectionPolicy connectionPolicy = new ConnectionPolicy(); 
connectionPolicy.RetryOptions.MaxRetryAttemptsOnThrottledRequests = 3; 
connectionPolicy.RetryOptions.MaxRetryWaitTimeInSeconds = 60;

Estratégia de criação de partições e custos do débito aprovisionadoPartitioning strategy and provisioned throughput costs

Uma boa estratégia de partição é importante para otimizar os custos na Azure Cosmos DB.Good partitioning strategy is important to optimize costs in Azure Cosmos DB. Certifique-se de que não existe uma distorção das divisórias, que são expostas através de métricas de armazenamento.Ensure that there is no skew of partitions, which are exposed through storage metrics. Certifique-se de que não existe uma distorção de produção para uma partição, que está exposta com métricas de produção.Ensure that there is no skew of throughput for a partition, which is exposed with throughput metrics. Certifique-se de que não há inclinação para as chaves de partição específicas.Ensure that there is no skew towards particular partition keys. As chaves dominantes no armazenamento são expostas através de métricas, mas a chave estará dependente do padrão de acesso à sua aplicação.Dominant keys in storage are exposed through metrics but the key will be dependent on your application access pattern. É melhor pensar na chave de partição lógica certa.It's best to think about the right logical partition key. Espera-se que uma boa chave de partição tenha as seguintes características:A good partition key is expected to have the following characteristics:

  • Escolha uma chave de partição que espalhe a carga de trabalho uniformemente em todas as divisórias e uniformemente ao longo do tempo.Choose a partition key that spreads workload evenly across all partitions and evenly over time. Por outras palavras, não deve ter algumas chaves para a maioria dos dados e algumas chaves com menos ou nenhum dado.In other words, you shouldn't have some keys to with majority of the data and some keys with less or no data.

  • Escolha uma chave de partição que permita que os padrões de acesso sejam distribuídos uniformemente por divisórias lógicas.Choose a partition key that enables access patterns to be evenly spread across logical partitions. A carga de trabalho é razoavelmente mesmo através de todas as chaves.The workload is reasonably even across all the keys. Por outras palavras, a maior parte da carga de trabalho não deve estar focada em algumas chaves específicas.In other words, the majority of the workload shouldn't be focused on a few specific keys.

  • Escolha uma chave de partição que tenha uma vasta gama de valores.Choose a partition key that has a wide range of values.

A ideia básica é espalhar os dados e a atividade no seu contentor através do conjunto de divisórias lógicas, para que os recursos para armazenamento e produção de dados possam ser distribuídos pelas divisórias lógicas.The basic idea is to spread the data and the activity in your container across the set of logical partitions, so that resources for data storage and throughput can be distributed across the logical partitions. Os candidatos às chaves de partição podem incluir as propriedades que aparecem frequentemente como um filtro nas suas consultas.Candidates for partition keys may include the properties that appear frequently as a filter in your queries. As consultas podem ser encaminhadas com eficiência ao incluir a chave de partição no predicado de filtro.Queries can be efficiently routed by including the partition key in the filter predicate. Com esta estratégia de partição, a otimização da produção a provisionada será muito mais fácil.With such a partitioning strategy, optimizing provisioned throughput will be a lot easier.

Desenhe itens menores para maior produçãoDesign smaller items for higher throughput

A taxa de pedido ou o custo de processamento do pedido de uma determinada operação está diretamente correlacionado com a dimensão do artigo.The request charge or the request processing cost of a given operation is directly correlated to the size of the item. As operações em grandes itens custarão mais do que operações em itens menores.Operations on large items will cost more than operations on smaller items.

Padrões de acesso a dadosData access patterns

É sempre uma boa prática separar logicamente os seus dados em categorias lógicas com base na frequência com que acede aos dados.It is always a good practice to logically separate your data into logical categories based on how frequently you access the data. Ao categorizá-lo como dados quentes, médios ou frios, pode afinar o armazenamento consumido e a produção necessária.By categorizing it as hot, medium, or cold data you can fine-tune the storage consumed and the throughput required. Dependendo da frequência de acesso, pode colocar os dados em recipientes separados (por exemplo, tabelas, gráficos e coleções) e afinar a produção prevista para acomodar as necessidades desse segmento de dados.Depending on the frequency of access, you can place the data into separate containers (for example, tables, graphs, and collections) and fine-tune the provisioned throughput on them to accommodate to the needs of that segment of data.

Além disso, se estiver a usar a Azure Cosmos DB, e souber que não vai procurar por certos valores de dados ou raramente os acederá, deverá armazenar os valores comprimidos destes atributos.Furthermore, if you're using Azure Cosmos DB, and you know you are not going to search by certain data values or will rarely access them, you should store the compressed values of these attributes. Com este método economiza-se no espaço de armazenamento, no espaço de índice e na produção a provisionada e resulta em custos mais baixos.With this method you save on storage space, index space, and provisioned throughput and result in lower costs.

Otimizar alterando a política de indexaçãoOptimize by changing indexing policy

Por padrão, a Azure Cosmos DB indexa automaticamente todas as propriedades de cada registo.By default, Azure Cosmos DB automatically indexes every property of every record. Isto destina-se a facilitar o desenvolvimento e garantir um excelente desempenho em vários tipos de consultas ad hoc.This is intended to ease development and ensure excellent performance across many different types of ad hoc queries. Se você tem grandes registos com milhares de propriedades, pagar o custo de produção para indexar cada propriedade pode não ser útil, especialmente se você apenas consultar contra 10 ou 20 dessas propriedades.If you have large records with thousands of properties, paying the throughput cost for indexing every property may not be useful, especially if you only query against 10 or 20 of those properties. À medida que se aproxima de saber qual é a sua carga de trabalho específica, a nossa orientação é afinar a sua política de índices.As you get closer to getting a handle on your specific workload, our guidance is to tune your index policy. Todos os detalhes sobre a política de indexação DB do Azure Cosmos podem ser consultados aqui.Full details on Azure Cosmos DB indexing policy can be found here.

Produção de monitorização a provisionada e consumidaMonitoring provisioned and consumed throughput

Pode monitorizar o número total de RUs provisões, o número de pedidos limitados de taxa, bem como o número de RUs que consumiu no portal Azure.You can monitor the total number of RUs provisioned, number of rate-limited requests as well as the number of RUs you’ve consumed in the Azure portal. A imagem a seguir mostra uma métrica de utilização de exemplo:The following image shows an example usage metric:

Monitor de unidades de solicitação no portal Azure

Também pode definir alertas para verificar se o número de pedidos limitados de taxa excede um limiar específico.You can also set alerts to check if the number of rate-limited requests exceeds a specific threshold. Veja como monitorizar o artigo da Azure Cosmos DB para mais detalhes.See How to monitor Azure Cosmos DB article for more details. Estes alertas podem enviar um e-mail para os administradores da conta ou chamar um webhook http personalizado ou uma Função Azure para aumentar automaticamente o rendimento do provisionado.These alerts can send an email to the account administrators or call a custom HTTP Webhook or an Azure Function to automatically increase provisioned throughput.

Dimensione a sua produção elástica e a pedidoScale your throughput elastically and on-demand

Uma vez que é cobrado para o produto previsto, o que corresponde ao rendimento previsto às suas necessidades pode ajudá-lo a evitar as taxas para o rendimento não percebido.Since you are billed for the throughput provisioned, matching the provisioned throughput to your needs can help you avoid the charges for the unused throughput. Pode escalar o seu rendimento a provisionado para cima ou para baixo a qualquer momento, se necessário.You can scale your provisioned throughput up or down any time, as needed. Se as suas necessidades de produção forem muito previsíveis, pode utilizar funções Azure e utilizar um Gatilho temporizador para aumentar ou diminuir a produção num horário.If your throughput needs are very predictable you can use Azure Functions and use a Timer Trigger to increase or decrease throughput on a schedule.

  • Monitorizar o consumo das suas RUs e o rácio de pedidos limitados de taxa pode revelar que não precisa de manter o fornecimento ao longo da constante durante todo o dia ou a semana.Monitoring the consumption of your RUs and the ratio of rate-limited requests may reveal that you do not need to keep provisioned throughout constant throughout the day or the week. Pode receber menos tráfego durante a noite ou durante o fim de semana.You may receive less traffic at night or during the weekend. Ao utilizar o portal Azure ou o Azure Cosmos DB native SDKs ou REST API, pode escalar a sua produção a qualquer momento.By using either Azure portal or Azure Cosmos DB native SDKs or REST API, you can scale your provisioned throughput at any time. A AAPI REST da Azure Cosmos DB fornece pontos finais para atualizar programaticamente o nível de desempenho dos seus contentores, tornando simples a produção a partir do seu código, dependendo da hora do dia ou do dia da semana.Azure Cosmos DB’s REST API provides endpoints to programmatically update the performance level of your containers making it straightforward to adjust the throughput from your code depending on the time of the day or the day of the week. A operação é realizada sem tempo de inatividade, e normalmente faz efeito em menos de um minuto.The operation is performed without any downtime, and typically takes effect in less than a minute.

  • Uma das áreas que deve escalar é quando ingere dados em Azure Cosmos DB, por exemplo, durante a migração de dados.One of the areas you should scale throughput is when you ingest data into Azure Cosmos DB, for example, during data migration. Uma vez concluída a migração, pode reduzir a produção a provisionada para lidar com o estado estável da solução.Once you have completed the migration, you can scale provisioned throughput down to handle the solution’s steady state.

  • Lembre-se, a faturação está na granularidade de uma hora, por isso não poupará dinheiro se mudar a sua produção mais frequente do que uma hora de cada vez.Remember, the billing is at the granularity of one hour, so you will not save any money if you change your provisioned throughput more often than one hour at a time.

Determinar a produção necessária para uma nova carga de trabalhoDetermine the throughput needed for a new workload

Para determinar a produção prevista para uma nova carga de trabalho, pode utilizar os seguintes passos:To determine the provisioned throughput for a new workload, you can use the following steps:

  1. Realize uma avaliação inicial e áspera utilizando o planejador de capacidades e ajuste as suas estimativas com a ajuda do Azure Cosmos DB Explorer no portal Azure.Perform an initial, rough evaluation using the capacity planner and adjust your estimates with the help of the Azure Cosmos DB Explorer in the Azure portal.

  2. Recomenda-se criar os recipientes com maior potência do que o esperado e, em seguida, reduzir-se conforme necessário.It's recommended to create the containers with higher throughput than expected and then scaling down as needed.

  3. Recomenda-se usar um dos nativos Azure Cosmos DB SDKs para beneficiar de retrações automáticas quando os pedidos ficam limitados.It's recommended to use one of the native Azure Cosmos DB SDKs to benefit from automatic retries when requests get rate-limited. Se estiver a trabalhar numa plataforma que não seja suportada e utilizar a API REST da Cosmos DB, implemente a sua própria política de relagem utilizando o x-ms-retry-after-ms cabeçalho.If you’re working on a platform that is not supported and use Cosmos DB’s REST API, implement your own retry policy using the x-ms-retry-after-ms header.

  4. Certifique-se de que o seu código de aplicação suporta graciosamente o caso quando todas as recauchuções falharem.Make sure that your application code gracefully supports the case when all retries fail.

  5. Pode configurar alertas a partir do portal Azure para obter notificações para limitar a taxa.You can configure alerts from the Azure portal to get notifications for rate-limiting. Você pode começar com limites conservadores como 10 pedidos limitados de taxas ao longo dos últimos 15 minutos e mudar para regras mais ansiosas assim que você descobrir o seu consumo real.You can start with conservative limits like 10 rate-limited requests over the last 15 minutes and switch to more eager rules once you figure out your actual consumption. Os limites de tarifas ocasionais são bons, mostram que estás a jogar com os limites que estabeleceste e é exatamente isso que queres fazer.Occasional rate-limits are fine, they show that you’re playing with the limits you’ve set and that’s exactly what you want to do.

  6. Utilize a monitorização para entender o seu padrão de tráfego, para que possa considerar a necessidade de ajustar dinamicamente o seu fornecimento de produção ao longo do dia ou de uma semana.Use monitoring to understand your traffic pattern, so you can consider the need to dynamically adjust your throughput provisioning over the day or a week.

  7. Monitorize regularmente o seu rácio de produção a provisionado vs. consumido para se certificar de que não a provisionou mais do que o número exigido de contentores e bases de dados.Monitor your provisioned vs. consumed throughput ratio regularly to make sure you have not provisioned more than required number of containers and databases. Ter um pouco de produção a mais é uma boa verificação de segurança.Having a little over provisioned throughput is a good safety check.

Melhores práticas para otimizar a produção a provisionadaBest practices to optimize provisioned throughput

Os seguintes passos ajudam-no a tornar as suas soluções altamente escaláveis e económicas ao utilizar o Azure Cosmos DB.The following steps help you to make your solutions highly scalable and cost-effective when using Azure Cosmos DB.

  1. Se tiver sobressaída significativamente a produção de contentores e bases de dados, deverá rever as RUs a provisionadas vs e afinar as cargas de trabalho.If you have significantly over provisioned throughput across containers and databases, you should review RUs provisioned Vs consumed RUs and fine-tune the workloads.

  2. Um método para estimar a quantidade de produção reservada exigida pela sua aplicação é registar a taxa RU da unidade de pedido associada à execução de operações típicas contra um contentor ou base de dados representativo da Azure Cosmos utilizado pela sua aplicação e, em seguida, estimar o número de operações que espera realizar a cada segundo.One method for estimating the amount of reserved throughput required by your application is to record the request unit RU charge associated with running typical operations against a representative Azure Cosmos container or database used by your application and then estimate the number of operations you anticipate to perform each second. Certifique-se de medir e incluir consultas típicas e seu uso também.Be sure to measure and include typical queries and their usage as well. Para aprender a estimar os custos ru de consultas programáticas ou usando o portal consulte Otimizar o custo das consultas.To learn how to estimate RU costs of queries programmatically or using portal see Optimizing the cost of queries.

  3. Outra forma de obter operações e os seus custos em RUs é permitindo registos do Azure Monitor, o que lhe dará a repartição da operação/duração e a taxa de pedido.Another way to get operations and their costs in RUs is by enabling Azure Monitor logs, which will give you the breakdown of operation/duration and the request charge. A Azure Cosmos DB fornece taxa de pedido para cada operação, para que cada carga de operação possa ser armazenada a partir da resposta e depois usada para análise.Azure Cosmos DB provides request charge for every operation, so every operation charge can be stored back from the response and then used for analysis.

  4. Pode escalar elasticamente a produção a provisionada, pois necessita para acomodar as suas necessidades de carga de trabalho.You can elastically scale up and down provisioned throughput as you need to accommodate your workload needs.

  5. Pode adicionar e remover regiões associadas à sua conta Azure Cosmos conforme precisar e controlar os custos.You can add and remove regions associated with your Azure Cosmos account as you need and control costs.

  6. Certifique-se de que tem distribuição uniforme de dados e cargas de trabalho através de divisórias lógicas dos seus recipientes.Make sure you have even distribution of data and workloads across logical partitions of your containers. Se tiver uma distribuição de partição desigual, isto pode causar uma maior quantidade de produção do que o valor necessário.If you have uneven partition distribution, this may cause to provision higher amount of throughput than the value that is needed. Se identificar que tem uma distribuição distorcida, recomendamos redistribuir a carga de trabalho uniformemente através das divisórias ou repartir os dados.If you identify that you have a skewed distribution, we recommend redistributing the workload evenly across the partitions or repartition the data.

  7. Se tiver muitos contentores e estes contentores não necessitarem de SLAs, pode utilizar a oferta baseada na base de dados para os casos em que os SLAs de produção por contentor não se aplicam.If you have many containers and these containers do not require SLAs, you can use the database-based offer for the cases where the per container throughput SLAs do not apply. Deve identificar quais dos recipientes Azure Cosmos que pretende migrar para a oferta de produção de nível de base de dados e depois migrar usando uma solução baseada em feed de mudança.You should identify which of the Azure Cosmos containers you want to migrate to the database level throughput offer and then migrate them by using a change feed-based solution.

  8. Considere usar o "Cosmos DB Free Tier" (gratuito durante um ano), experimente cosmos DB (até três regiões) ou o emulador cosmos DB descarregado para cenários de dev/teste.Consider using the “Cosmos DB Free Tier” (free for one year), Try Cosmos DB (up to three regions) or downloadable Cosmos DB emulator for dev/test scenarios. Ao utilizar estas opções para teste-dev, pode baixar substancialmente os seus custos.By using these options for test-dev, you can substantially lower your costs.

  9. Pode ainda realizar otimizações de custos específicas da carga de trabalho – por exemplo, aumentar o tamanho do lote, leituras de equilíbrio de carga em várias regiões e des duplicar dados, se aplicável.You can further perform workload-specific cost optimizations – for example, increasing batch-size, load-balancing reads across multiple regions, and de-duplicating data, if applicable.

  10. Com a capacidade reservada da Azure Cosmos, você pode obter descontos significativos até 65% durante três anos.With Azure Cosmos DB reserved capacity, you can get significant discounts for up to 65% for three years. O modelo de capacidade reservada da Azure Cosmos DB é um compromisso inicial sobre as unidades de pedidos necessárias ao longo do tempo.Azure Cosmos DB reserved capacity model is an upfront commitment on requests units needed over time. Os descontos são hierárquicos de modo a que quanto mais unidades de pedido utilizar durante um período mais longo, mais o seu desconto será.The discounts are tiered such that the more request units you use over a longer period, the more your discount will be. Estes descontos são aplicados imediatamente.These discounts are applied immediately. Quaisquer RUs utilizados acima dos seus valores provisões são cobrados com base no custo de capacidade não reservado.Any RUs used above your provisioned values are charged based on the non-reserved capacity cost. Consulte a capacidade reservada da Cosmos DB)para mais detalhes.See Cosmos DB reserved capacity) for more details. Considere a capacidade reservada de compra para reduzir ainda mais os seus custos de produção provisões.Consider purchasing reserved capacity to further lower your provisioned throughput costs.

Passos seguintesNext steps

Em seguida, pode proceder para saber mais sobre a otimização de custos na Azure Cosmos DB com os seguintes artigos:Next you can proceed to learn more about cost optimization in Azure Cosmos DB with the following articles: