Logs de atividade para operações elásticas (divisão/mesclagem)

Este artigo explica como usar o Log de Atividades do Azure para monitorar operações de divisão e mesclagem de partição no Azure Cosmos DB.

Tela de fundo

No Azure Cosmos DB, cada partição física dá suporte a até 10.000 RU/s de taxa de transferência. Quando você aumenta a taxa de transferência provisionada de um banco de dados ou contêiner além da capacidade das partições físicas atuais, o Azure Cosmos DB deve dividir essas partições para acomodar a taxa de transferência extra.

Uma divisão de partição divide uma partição física existente em novas partições. Cada nova partição assume uma parte dos dados do original. Esse processo permite que o contêiner atenda a uma taxa de transferência total maior porque cada nova partição pode atender até 10.000 RU/s de capacidade. O Azure Cosmos DB também pode mesclar partições para otimizar o layout para melhor desempenho e distribuição de dados.

Dependendo do tamanho dos dados e da solicitação de taxa de transferência, dividir e mesclar partições pode levar várias horas para serem concluídas. O Log de Atividades no portal do Azure mostra o status dessas operações elásticas – tanto aumentos de taxa de transferência (divisões de partição) quanto diminuições (mesclagens de partição).

Para obter mais detalhes sobre como as divisões de partição funcionam e as práticas recomendadas para dimensionamento, consulte As práticas recomendadas para dimensionar a taxa de transferência provisionada.

Monitorando operações elásticas no log de atividades

As divisões de partição e as mesclagens seguem o mesmo padrão do Log de Atividades. Para monitorar o progresso de uma operação elástica:

  1. Navegue até sua conta do Azure Cosmos DB no portal do Azure.
  2. No menu à esquerda, selecione Log de Atividades.
  3. Filtre pelo nome do recurso do banco de dados ou contêiner.
  4. Procure entradas de log relacionadas à operação elástica. Cada entrada inclui um nome de operação, um status e um carimbo de data/hora.
  5. Expanda a entrada de log para ver as operações de escala vinculadas que estão aninhadas na entrada principal. A entrada principal reflete o status geral mais recente da operação de dimensionamento. Cada operação aninhada também tem seu próprio status.
  6. Selecione um log individual para abrir um painel de detalhes à direita. Na guia JSON , a seção "propriedades" contém informações detalhadas sobre a operação.

Cada operação progride por três status. Os detalhes específicos em cada status diferem entre divisões e mesclagens, conforme descrito nas próximas seções.

Status Description
Iniciado Emitido no início da operação, após o Azure Cosmos DB determinar quais partições serão divididas ou mescladas.
Em Andamento Emitido em um intervalo de 30 minutos durante a operação, fornecendo detalhes atualizados à medida que o trabalho progride. Talvez você não veja esse status se a operação for concluída em menos de 30 minutos.
Succeeded Emitido uma vez, no final, quando a operação é concluída.

O exemplo a seguir mostra uma operação de expansão conforme aparece no Log de Atividades, demonstrando o layout descrito acima.

Captura de tela do Log de Atividades no portal do Azure mostrando uma operação de expansão com entradas aninhadas.

Aumento da taxa de transferência / divisão de partição

Exemplo: suponha que você tenha um contêiner com 1 partição física, processando 5.000 RU/s. Em seguida, você aumenta a taxa de transferência para 15.000 RU/s. A partição existente só pode dar suporte a até 10.000 RU/s – não o suficiente para as 15.000 RU/s solicitadas. O Azure Cosmos DB o divide para criar mais partições que podem distribuir a taxa de transferência mais alta.

Log de Atividades Principais

Depois que a operação de divisão do throughput for iniciada, será exibida uma entrada principal intitulada:

Operação de divisão de throughput – ampliando para um throughput de até 15.000

O número reflete sua nova taxa de transferência alvo. Essa entrada principal contém todas as operações aninhadas relacionadas à divisão. Expanda-o para ver as atualizações de status individuais à medida que a operação progride.

Captura de tela da entrada principal do Log de Atividades para uma operação de divisão de taxa de transferência.

Logs de atividade aninhada

Status Iniciado — A entrada do Log de Atividades mostra seu novo throughput alvo e as partições que serão divididas para alcançá-lo. Isso confirma que a operação de dimensionamento está em andamento. Para este exemplo, a nova taxa de transferência é de 15.000 RU/s e a partição "0" será dividida.

Captura de tela da entrada de status Iniciada para uma operação de divisão de partição mostrando a taxa de transferência de destino e as partições a serem divididas.

Status Em Progresso – Emitido aproximadamente a cada 30 minutos. Esse status fornece um detalhamento de cada partição envolvida na divisão. Cada partição é representada como uma operação no rastreamento, permitindo que você acompanhe o progresso em um nível granular.

A divisão abaixo inclui os valores de nosso exemplo e descrições de cada propriedade.

Propriedade Exemplo de Ponto de Verificação 1 Exemplo de Ponto de Verificação 2 Description
Total de operações necessárias 1 1 O número total de partições que precisam ser divididas para atender à taxa de transferência solicitada.
Operações em andamento 1 0 Partições que estão se dividindo ativamente.
Operações AguardandoSerAgendadas 0 0 Partições prontas para serem divididas, mas temporariamente bloqueadas por outra operação na mesma partição. Esses continuarão automaticamente.
Operações concluídas 0 1 Partições que terminaram o processo de divisão e agora estão servindo o tráfego com o novo throughput.
Operações com falha 0 0 Partições que enfrentaram um erro. Eles são realocados automaticamente com um novo ID de operação e serão exibidos como uma operação separada.

A imagem abaixo mostra como essas propriedades aparecem na guia JSON da entrada do Log de Atividades no portal do Azure.

Captura de tela das propriedades JSON em andamento para uma divisão de partição na guia JSON do Log de Atividades.

Status com sucesso – a divisão está concluída, todas as novas partições estão online e sua plena taxa de transferência provisionada está disponível.

Captura de tela da entrada de status de sucesso de uma operação de divisão de partição concluída.

Status do Log de Atividades JSON

As propriedades JSON a seguir são emitidas em cada estágio de uma operação de divisão de partição. O Checkpoint 1 e o Checkpoint 2 mostram como o status In Progress é atualizado ao longo do tempo, à medida que as partições concluem seu trabalho.

Status Propriedades JSON (Ponto de Verificação 1) Propriedades JSON (Ponto de Verificação 2)
Iniciado {
  "isSharedThroughput": "False",
  "resourceRid": "<id>",
  "databaseName": "database1",
  "collectionName": "container1",
  "targetThroughput": "15000",
  "status": "Will split partitions 0 into different partitions"
}
Em Andamento {
  "isSharedThroughput": "False",
  "resourceRid": "<id>",
  "databaseName": "database1",
  "collectionName": "container1",
  "targetThroughput": "15000",
  "Total Operations Required": "1",
  "In Progress Operations": "1",
  "WaitingToBeScheduled Operations": "0",
  "Completed Operations": "0",
  "Failed Operations": "0"
}
{
  "isSharedThroughput": "False",
  "resourceRid": "<id>",
  "databaseName": "database1",
  "collectionName": "container1",
  "targetThroughput": "15000",
  "Total Operations Required": "1",
  "In Progress Operations": "0",
  "WaitingToBeScheduled Operations": "0",
  "Completed Operations": "1",
  "Failed Operations": "0"
}
Succeeded {
  "isSharedThroughput": "False",
  "resourceRid": "<id>",
  "databaseName": "database1",
  "collectionName": "container1",
  "targetThroughput": "15000",
  "status": "Completed splits operation"
}

Várias rodadas de divisão

Para aumentos de taxa de transferência maiores, o processo de divisão ocorre em várias rodadas. Cada rodada divide partições criadas pela rodada anterior até que existam suficientes para atender à taxa de transferência solicitada. Cada rodada tem suas próprias entradas de log Iniciadas e Em Andamento. Quando todas as rodadas forem concluídas, um único status bem-sucedido será exibido na entrada de log principal.

Em cada rodada, o Log de Atividades captura pontos de verificação periódicos aproximadamente a cada 30 minutos. Cada ponto de verificação aparece como uma entrada em andamento com um instantâneo atualizado do status da operação. Dependendo de quanto tempo a rodada leva, você pode ver várias entradas "In Progress". Se a rodada for concluída rapidamente (por exemplo, 30 minutos ou menos), você poderá ver apenas um status Iniciado sem nenhum relatório em andamento.

Exemplo: suponha que você tenha um contêiner com 1.000 RU/s e 1 partição física e aumente a taxa de transferência para 30.000 RU/s.

Round 1 – Partição 0 se divide em Partição 1 e Partição 2.

Round 2 – Partição 1 se divide em Partição 3 e Partição 4.

No final, você tem três partições (Partições 2, 3 e 4) que atendem às 30.000 RU/s. Depois que a 2ª rodada for concluída, a entrada de log principal mostrará Êxito.

Main log status: Started

┌───────  Round 1: Split  ───────┐

  Partition 0
  1,000 RU/s

  ▼                              ▼

  Partition 1        Partition 2
                     ✓ final partition

┌───────  Round 2: Split  ───────┐

  Partition 1

  ▼                              ▼

  Partition 3        Partition 4
  ✓ final partition  ✓ final partition

───────  Final Partitions  ───────

  Partition 2    Partition 3    Partition 4
  from Round 1   from Round 2   from Round 2

✔ RESULT: 3 partitions serving 30,000 RU/s

Main log status: Succeeded

O Log de Atividades exibe entradas no portal empilhadas de cima para baixo, com as mais recentes na parte superior. Cada rodada começa com sua própria entrada Iniciada. Todas as entradas em "In Progress" entre um "Started" e o próximo pertencem à mesma rodada.

Captura de tela do log de atividades mostrando várias rodadas de divisões de partição com entradas iniciadas e em andamento para cada rodada.

Neste exemplo de exibição, a 1ª rodada da divisão é cercada pela caixa azul e mostra um status Iniciado, seguido por 2 entradas em andamento. O Round 2 segue um padrão semelhante e é delimitado pela caixa roxa.

Captura de tela da visualização do portal do Log de Atividades mostrando as entradas divididas da Rodada 1 e Rodada 2 realçadas em caixas separadas.

Status do Log de Atividades JSON

O conteúdo JSON a seguir é extraído diretamente das entradas do Log de Atividades. Para maior clareza, os campos JSON comuns são omitidos e somente o status é deixado.

Rodada 1: Divisão

Status Propriedades JSON (Ponto de Verificação 1) Propriedades JSON (Ponto de Verificação 2)
Iniciado {
  "status": "Will split partitions 0 into different partitions"
}
Em Andamento {
  "Total Operations Required": "1",
  "In Progress Operations": "1",
  "WaitingToBeScheduled Operations": "0",
  "Completed Operations": "0",
  "Failed Operations": "0"
}
{
  "Total Operations Required": "1",
  "In Progress Operations": "0",
  "WaitingToBeScheduled Operations": "0",
  "Completed Operations": "1",
  "Failed Operations": "0"
}

A partição 0 terminou a divisão, conforme mostrado pela transição de uma operação em andamento para uma operação concluída. Agora vamos dividir a Partição 2.

2ª Rodada: Divisão

Status Propriedades JSON (Ponto de Verificação 1) Propriedades JSON (Ponto de Verificação 2)
Iniciado {
  "status": "Will split partitions 2 into different partitions"
}
Em Andamento {
  "Total Operations Required": "1",
  "In Progress Operations": "1",
  "WaitingToBeScheduled Operations": "0",
  "Completed Operations": "0",
  "Failed Operations": "0"
}
{
  "Total Operations Required": "1",
  "In Progress Operations": "0",
  "WaitingToBeScheduled Operations": "0",
  "Completed Operations": "1",
  "Failed Operations": "0"
}
Succeeded {
  "status": "Completed splits operation"
}

Mesclagem de partição

Quando você diminui significativamente a taxa de transferência provisionada de um banco de dados ou contêiner, o número existente de partições físicas pode não ser mais necessário. Você pode iniciar uma mesclagem de partição para reduzir a contagem de partições físicas e otimizar RU/s e distribuição de dados. A mesclagem reduz a sobrecarga de manutenção de partições não utilizados e permite que o sistema opere com mais eficiência na taxa de transferência reduzida.

Uma operação de mesclagem combina várias partições existentes em uma única nova partição. Por exemplo, se as partições 2, 3 e 4 forem mescladas, o resultado será uma nova Partição 5. Cada nova partição criada por uma mesclagem é representada como uma operação no Log de Atividades. A mesclagem segue o mesmo padrão de atualizações de status que um split de throughput.

Exemplo: suponha que você escalou um contêiner até 100.000 RU/s para uma migração de dados grande, o que exigiu 10 partições físicas. Embora 10 partições físicas possam conter 500 GB de dados, apenas 50 GB de dados foram ingeridos e as RU/s de estado estável necessárias são apenas 10.000 RU/s.

Depois de reduzir a taxa de transferência provisionada para 10.000 RU/s, você pode mesclar as 10 partições para 1 partição e otimizar o uso de RU/s.

Log de Atividades Principais

Depois que a operação de mesclagem de partição for iniciada, você verá uma entrada principal intitulada:

Operação de mesclagem PartitionCoalescer para contêiner

Essa entrada serve como o pai para todas as operações aninhadas relacionadas à mesclagem. Use essa entrada durante a operação para acompanhar seu progresso. Pode haver outros logs relacionados à mesclagem vinculados abaixo, como "Mesclar as partições físicas de um contêiner sql", mas eles não contêm informações de status.

O exemplo a seguir mostra vários logs relacionados à mesclagem na entrada principal. Somente a operação de mesclagem PartitionCoalescer para entrada de contêiner é relevante.

Captura de tela da entrada principal do Registro de Atividades para uma operação de mesclagem de partição, mostrando registros aninhados relacionados à mesclagem.

Logs de atividade aninhada

Status de Início: a entrada no log de atividades exibe o contêiner envolvido na mesclagem e as partições que serão mescladas. O contêiner indica se utiliza uma taxa de transferência provisionada ou compartilhada. Não há objetivo de taxa de transferência para esse tipo de operação porque você não está ampliando. Neste exemplo, todas as 10 partições se mesclam em 1 partição.

Captura de tela da entrada de status Iniciado para uma operação de mesclagem de partições mostrando partições a serem mescladas.

Em andamento – Emitido aproximadamente a cada 30 minutos. Esse status fornece um detalhamento de cada operação de mesclagem. Cada mesclagem é representada como uma operação no rastreamento, para que você possa acompanhar o progresso em um nível granular.

A divisão abaixo inclui os valores de nosso exemplo e descrições de cada propriedade.

Propriedade Exemplo de Ponto de Verificação 1 Exemplo de Ponto de Verificação 2 Description
Total de operações necessárias 1 1 O número total de mesclagens de partição necessárias para atingir a contagem de partições de destino.
Operações em andamento 1 0 Mesclagens que estão ativamente em execução.
Operações AguardandoSerAgendadas 0 0 Mesclas prontas para continuar, mas temporariamente bloqueadas por outra operação na mesma partição.
Operações concluídas 0 1 Mesclas que terminaram.
Operações com falha 0 0 Fusões que apresentaram um erro. Elas são reencaminhadas automaticamente sob um novo ID de operação.

A imagem abaixo mostra como essas propriedades aparecem na guia JSON da entrada do Log de Atividades no portal do Azure.

Captura de tela das propriedades JSON em andamento para uma mesclagem de partição na guia JSON do Log de Atividades.

Bem-sucedido – a mesclagem está concluída e as partições restantes estão atendendo ao tráfego.

Captura de tela da entrada com o status de sucesso para uma operação de mesclagem de partição concluída.

Status do Log de Atividades JSON

As propriedades JSON a seguir são emitidas em cada estágio de uma operação de mesclagem. O Checkpoint 1 e o Checkpoint 2 mostram como o status In Progress é atualizado ao longo do tempo, à medida que as partições concluem seu trabalho.

Status Propriedades JSON (Ponto de Verificação 1) Propriedades JSON (Ponto de Verificação 2)
Iniciado {
  "isSharedThroughput": "False",
  "resourceRid": "<id>",
  "databaseName": "database3",
  "collectionName": "container3",
  "status": "Collection <id> will merge partitions 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 into a new partition"
}
Em Andamento {
  "isSharedThroughput": "False",
  "resourceRid": "<id>",
  "databaseName": "database3",
  "collectionName": "container3",
  "Total Operations Required": "1",
  "In Progress Operations": "1",
  "WaitingToBeScheduled Operations": "0",
  "Completed Operations": "0",
  "Failed Operations": "0"
}
{
  "isSharedThroughput": "False",
  "resourceRid": "<id>",
  "databaseName": "database3",
  "collectionName": "container3",
  "Total Operations Required": "1",
  "In Progress Operations": "0",
  "WaitingToBeScheduled Operations": "0",
  "Completed Operations": "1",
  "Failed Operations": "0"
}
Succeeded {
  "isSharedThroughput": "False",
  "resourceRid": "<id>",
  "databaseName": "database3",
  "collectionName": "container3",
  "status": "Completed merge operation."
}