Mesclagem de partições no Azure Cosmos DB (versão prévia)

APLICA-SE AO: NoSQL MongoDB

A mesclagem de partições no Azure Cosmos DB (versão prévia) permite reduzir o número de partições físicas usadas para o contêiner implantado. Com a mesclagem, as partições físicas dos contêineres fragmentados na taxa de transferência (têm poucas RU/s por partição) ou no armazenamento (têm pouco armazenamento por partição) podem ser retrabalhadas. Se a taxa de transferência de um contêiner tiver sido expandida e precisar ser reduzida verticalmente, a mesclagem poderá ajudar a resolver problemas de fragmentação de taxa de transferência. Para a mesma quantidade de RU/s provisionadas, ter menos partições físicas significa que cada partição física recebe mais das RU/s gerais. A minimização de partições reduz a possibilidade de limitação de taxa, caso um grande volume de dados seja removido de um contêiner e a RU/s por partição seja baixa. A mesclagem pode ajudar a limpar as partições não utilizadas ou vazias, resolvendo efetivamente os problemas de fragmentação de armazenamento.

Introdução

Para começar a usar a mesclagem de partição, navegue até a página Recursos em sua conta do Azure Cosmos DB. Selecione e habilite o recurso Mesclagem de partição (versão prévia).

Antes de habilitar o recurso, verifique se as contas do Azure Cosmos DB atendem a todos os critérios de qualificação de versão prévia. Depois de habilitar o recurso, leva de 15 a 20 minutos para entrar em vigor.

Cuidado

Quando a mesclagem estiver habilitada em uma conta, apenas as solicitações do SDK do .NET versão >= 3.27.0 ou SDK do Java >= 4.42.0 ou conector Spark do Azure Cosmos DB >= 4.18.0 serão permitidas na conta, independentemente das mesclagens estarem em andamento ou não. As solicitações de outros SDKs (SDK .NET mais antigo, SDK Java mais antigo, qualquer SDK JavaScript, qualquer SDK Python, qualquer SDK do Go) ou conectores sem suporte (Azure Data Factory, Azure Search, Azure Functionsextension < = 3.x, Azure Stream Analytics e outros) serão bloqueadas e falharão. Verifique se você atualizou para uma versão do SDK com suporte antes de habilitar o recurso. Depois que o recurso for habilitado ou desabilitado, poderão levar de 15 a 20 minutos para isso ser totalmente propagado para a conta. Se você planeja desabilitar o recurso depois de concluir o uso dele, pode levar de 15 a 20 minutos até que as solicitações de SDKs e conectores que não têm suporte para mesclagem sejam permitidas.

Captura de tela do painel Recursos e do recurso de mesclagem de partição.

Para verificar se uma conta do Azure Cosmos DB está qualificada para a versão prévia, você pode usar o verificador de elegibilidade interno no portal do Azure. Na página de visão geral da sua conta do Azure Cosmos DB no portal do Azure, navegue até Diagnosticar e resolver problemas – >Taxa de transferência e dimensionamento – >Mesclagem de partição. Execute o diagnóstico de Verificação de qualificação para a versão prévia de mesclagem de partição.

Captura de tela do conteúdo Taxa de transferência e Escala na página Diagnosticar e solucionar problemas.

Captura de tela de verificação de qualificação para mesclagem com a tabela de todos os critérios de qualificação da versão prévia.

Como identificar contêineres para mesclar

Os contêineres que atenderem às duas condições provavelmente se beneficiarão da mesclagem de partições:

  • Condição 1: a RU/s atual por partição física é de <3 mil U/s
  • Condição 2: o armazenamento médio atual em GB por partição física é de <20 GB

A condição 1 geralmente ocorre quando você escalou verticalmente as RU/s (geralmente para uma ingestão de dados) antes e agora deseja reduzir verticalmente em estado estável. A condição 2 geralmente ocorre quando você exclui/TTL um grande volume de dados, deixando partições não usadas.

Condição número 1

Para determinar a RU/s atual por partição física, na conta do Cosmos, navegue até Métricas. Selecione a métrica Taxa de Transferência de Partição Física e filtre para o banco de dados e contêiner. Aplique a divisão por PhysicalPartitionId.

Para contêineres que usam o dimensionamento automático, essa métrica mostra as RUs máximas provisionadas atualmente provisionadas em cada partição física. Para contêineres que utilizam a taxa de transferência manual, essa métrica mostra as RU/s manuais em cada partição física.

No exemplo abaixo, temos um contêiner de dimensionamento automático provisionado com 5000 RU/s (dimensiona entre 500 e 5000 RU/s). Ele tem cinco partições físicas e cada partição física tem 1000 RU/s.

Captura de tela da métrica do Azure Monitor Taxa de transferência de partição física no portal do Azure.

Condição número 2

Para determinar o armazenamento médio atual por partição física, primeiro localize o armazenamento geral (dados + índice) do contêiner.

Navegue até Insights>Armazenamento>Uso de Dados e Índice. O armazenamento total é a soma do uso de dados e do índice. No exemplo abaixo, o contêiner tem um total de 74 GB de armazenamento.

Captura de tela da métrica de armazenamento do Azure Monitor (dados + índice) para contêiner no portal do Azure.

Em seguida, encontre o número total de partições físicas. Essa métrica é o número distinto de PhysicalPartitionIds no gráfico PhysicalPartitionThroughput que vimos na Condição 1. No exemplo, temos cinco partições físicas.

Por fim, calcule: armazenamento total em GB / número de partições físicas. Em nosso exemplo, temos uma média de (74 GB/cinco partições físicas) = 14,8 GB por partição física.

Com base nas condições 1 e 2, nosso contêiner pode potencialmente se beneficiar da mesclagem de partições.

Mesclagem de partições físicas

No PowerShell, quando o sinalizador -WhatIf é passado, o Azure Cosmos DB executa uma simulação e retorna o resultado esperado da mesclagem. Este resultado é retornado apesar da mesclagem em si não estar sendo executada. Quando o sinalizador não é aprovado, a mesclagem é executada contra o recurso. Quando concluído, o comando gera a quantidade atual de armazenamento em KB por partição física após a mesclagem.

Dica

Antes de executar uma mesclagem, é recomendável definir as RU/s provisionadas (RU/s manuais ou RU/s máximas de dimensionamento automático) o mais próximo possível das RU/s de estado estável desejadas após a mesclagem, para ajudar a garantir que o sistema calcule um layout de partição eficiente.

Use Install-Module para instalar o módulo Az.CosmosDB com recursos de pré-lançamento ativados.

$parameters = @{
    Name = "Az.CosmosDB"
    AllowPrerelease = $true
    Force = $true
}
Install-Module @parameters

Para contêineres com taxa de transferência provisionada, use Invoke-AzCosmosDBSqlContainerMerge com o parâmetro -WhatIf para pré-visualizar a mesclagem sem realmente executar a operação.

$parameters = @{
    ResourceGroupName = "<resource-group-name>"
    AccountName = "<cosmos-account-name>"
    DatabaseName = "<cosmos-database-name>"
    Name = "<cosmos-container-name>"
    WhatIf = $true
}
Invoke-AzCosmosDBSqlContainerMerge @parameters

Inicie a mesclagem executando o mesmo comando sem o parâmetro -WhatIf.

$parameters = @{
    ResourceGroupName = "<resource-group-name>"
    AccountName = "<cosmos-account-name>"
    DatabaseName = "<cosmos-database-name>"
    Name = "<cosmos-container-name>"
}
Invoke-AzCosmosDBSqlContainerMerge @parameters

Para bancos de dados de taxa de transferência compartilhados, inicie a mesclagem usando az cosmosdb mongodb database merge.

az cosmosdb mongodb database merge \
	--account-name '<cosmos-account-name>'                               
	--name '<cosmos-database-name>'                                
	--resource-group '<resource-group-name>'

Monitorar operações de mesclagem

A mesclagem de partição é uma operação de longa execução e não há SLA sobre quanto tempo leva para ser concluída. O tempo depende da quantidade de dados no contêiner e do número de partições físicas. É recomendável permitir que pelo menos 5 a 6 horas para a mesclagem seja concluída.

Durante a execução da mesclagem de partição no contêiner, se você alterar as configurações do contêiner (TTL, política de indexação, chaves exclusivas etc.), a operação de mesclagem será cancelada. Se você aumentar suas RU/s enquanto uma mesclagem estiver em execução, a operação de mesclagem em andamento será cancelada e as RU/s do contêiner serão atualizadas com seu novo valor. Dependendo das RU/s solicitadas, o dimensionamento vertical pode ser instantâneo ou levar mais tempo. Se você diminuir suas RU/s enquanto uma mesclagem estiver em execução, as RU/s serão atualizadas instantaneamente para as novas RU/s. A mesclagem em andamento continuará, com a mesma contagem de partições de destino com base no valor de RU/s definido no momento em que a mesclagem foi disparada. Como prática recomendada, é recomendável aguardar até que a operação de mesclagem seja concluída antes de alterar as configurações de contêiner ou taxa de transferência.

Você pode acompanhar se a mesclagem ainda está em andamento verificando o Log de Atividades e filtrando os eventos Mesclar as partições físicas de uma coleção de MongoDB ou Mesclar as partições físicas de um contêiner de SQL.

Limitações

Veja a seguir as limitações do recurso de mesclagem no momento.

Critérios de qualificação de versão prévia

Para se registrar na versão prévia, sua conta do Azure Cosmos DB deve atender a todos os seguintes critérios:

  • Sua conta do Azure Cosmos DB usa a API para NoSQL ou MongoDB com a versão >=3.6.
  • Sua conta do Azure Cosmos DB está usando a taxa de transferência provisionada (dimensionamento automático ou manual). A mesclagem não se aplica a contas sem servidor.
  • Sua conta do Azure Cosmos DB é uma conta de região de gravação única (atualmente, não há suporte para mesclagem para contas de gravação de várias regiões).
  • Sua conta do Azure Cosmos DB não usa nenhum dos seguintes recursos:
  • Se você estiver utilizando a API para NoSQL, seu aplicativo deverá usar o SDK do Azure Cosmos DB .NET v3 (versão 3.27.0 ou superior) ou o SDK do Java v4 (versão 4.42.0 ou superior). Quando a pré-visualização da mesclagem está habilitada na sua conta, a conta não aceita solicitações enviadas de SDKs não .NET/Java ou versões mais antigas do SDK do .NET/Java.
    • Não há requisitos de SDK ou driver para usar o recurso com a API para MongoDB.
  • Sua conta do Azure Cosmos DB não usa nenhum conector sem suporte no momento:
    • Fábrica de dados do Azure
    • Stream Analytics do Azure
    • Aplicativos Lógicos
    • Extensão do Azure Functions <= 3.x (há suporte para a extensão 4.0 e superior do Azure Functions)
    • Azure Search
    • Conector do Spark do Azure Cosmos DB < 4.18.0
    • Qualquer biblioteca ou ferramenta de terceiros que dependa de um SDK do Azure Cosmos DB que não seja um SDK do .NET v3 >= v3.27.0 ou SDK do Java v4 >= 4.42.0

Recursos e configuração da conta

  • A mesclagem só está disponível para contas da API para NoSQL e MongoDB. Para as contas da API para MongoDB, a versão da conta do MongoDB deve ser 3.6 ou superior.
  • A mesclagem só está disponível para contas de gravação de região única. Não há suporte disponível para a conta de gravação de várias regiões.
  • As contas que usam a funcionalidade de mesclagem também não podem usar esses recursos (se esses recursos forem adicionados a uma conta habilitada para mesclagem, a conta não poderá mesclar recursos):
  • Depois que um contêiner for mesclado, não é possível ler o feed de alterações com a hora de início. O suporte para este recurso está planejado para o futuro.

Requisitos do SDK (somente API para NoSQL)

Contas com o recurso de mesclagem ativado são suportadas somente quando você usa a versão mais recente do SDK do .NET v3 ou do Java v4. Quando o recurso está habilitado na conta (independentemente de você executar a mesclagem), você deve usar apenas o SDK compatível usando a conta. Solicitações enviadas de outros SDKs ou versões anteriores não são aceitas. Contanto que você use o SDK compatível, o aplicativo poderá continuar a ser executado enquanto uma mesclagem estiver em andamento.

Localize a versão mais recente do SDK com suporte:

. Versões com suporte Link do gerenciador de pacotes
SDK v3 do .NET >= 3.27.0 https://www.nuget.org/packages/Microsoft.Azure.Cosmos
SDK do Java v4 >= 4.42.0 https://mvnrepository.com/artifact/com.azure/azure-cosmos

Planeja-se dar suporte a outros SDKs futuramente.

Dica

Você deve verificar se o aplicativo foi atualizado para usar uma versão compatível do SDK, antes de se registrar na versão prévia. Se estiver usando um SDK herdado, siga o guia de migração apropriado:

Conectores incompatíveis

Se você se inscrever na pré-visualização, os conectores a seguir falharão.

  • Azure Data Factory ¹
  • Azure Stream Analytics ¹
  • Logic Apps ¹
  • Extensão do Azure Functions <= 3.x (há suporte para a extensão 4.0 e superior do Azure Functions) ¹
  • Azure Search ¹
  • Conector do Spark do Azure Cosmos DB < 4.18.0
  • Qualquer biblioteca ou ferramenta de terceiros que dependa de um SDK do Azure Cosmos DB que não seja um SDK do .NET v3 >= v3.27.0 ou SDK do Java v4 >= 4.42.0

¹ Planeja-se dar suporte a esses conectores futuramente.

Próximas etapas