Compartilhar via


Coerência da consulta

A consistência da consulta refere-se a como as consultas e atualizações são sincronizadas. Há dois modos suportados de consistência de consulta:

  • Consistência forte: a consistência forte garante acesso imediato às atualizações mais recentes, como acréscimos de dados, exclusões e modificações de esquema. Consistência forte é o modo de consistência padrão. Devido à sincronização, esse modo de consistência tem um desempenho um pouco menos bom do que o modo de consistência fraca em termos de simultaneidade.

  • Consistência fraca: com consistência fraca, pode haver um atraso antes que os resultados da consulta reflitam as atualizações mais recentes do banco de dados. Normalmente, esse atraso varia de 1 a 2 minutos. A consistência fraca pode oferecer suporte a taxas de simultaneidade de consulta mais altas do que a consistência forte.

Por exemplo, se 1000 registros forem ingeridos a cada minuto em uma tabela no banco de dados, as consultas sobre essa tabela em execução com forte consistência terão acesso aos registros ingeridos mais recentemente, enquanto as consultas sobre essa tabela em execução com consistência fraca podem não ter acesso a alguns dos registros dos últimos minutos.

Observação

Por padrão, as consultas são executadas com forte consistência. Recomendamos alternar para consistência fraca somente quando necessário para oferecer suporte à simultaneidade de consulta mais alta.

Casos de uso para consistência forte

Se você tiver uma forte dependência de atualizações que ocorreram no banco de dados nos últimos minutos, use consistência forte.

Por exemplo, a consulta a seguir conta o número de registros de erro nos 5 minutos e dispara um alerta de que a contagem é maior que 0. Este caso de uso é melhor tratado com forte consistência, uma vez que seus insights podem ser alterados você não tem acesso aos registros ingeridos nos últimos minutos, como pode ser o caso com consistência fraca.

my_table
| where timestamp between(ago(5m)..now())
| where level == "error"
| count

Além disso, a consistência forte deve ser usada quando os metadados do banco de dados são grandes. Por exemplo. Há milhões de extensões de dados no banco de dados, o uso de consistência fraca resultaria no download de cabeças de consulta e na desserialização de artefatos de metadados extensos do armazenamento persistente, o que pode aumentar a probabilidade de falhas transitórias em downloads e operações relacionadas.

Casos de uso para consistência fraca

Se você não tiver uma forte dependência de atualizações que ocorreram no banco de dados nos últimos minutos e precisar de alta simultaneidade de consulta, use consistência fraca.

Por exemplo, a consulta a seguir conta o número de registros de erro por semana nos últimos 90 dias. A consistência fraca é apropriada nesse caso, já que é improvável que seus insights sejam afetados Os registros ingeridos nos últimos minutos são omitidos.

my_table
| where timestamp between(ago(90d) .. now())
| where level == "error"
| summarize count() by level, startofweek(Timestamp)

Modos de consistência fraca

A tabela a seguir resume os quatro modos de consistência de consulta fraca.

Mode Descrição
Random As consultas são roteadas aleatoriamente para um dos nós no cluster que pode servir como um cabeçalho de consulta fracamente consistente.
Afinidade por banco de dados As consultas no mesmo banco de dados são roteadas para o mesmo cabeçalho de consulta fracamente consistente, garantindo uma execução consistente para esse banco de dados.
Afinidade por texto de consulta As consultas com o mesmo hash de texto de consulta são roteadas para o mesmo cabeçalho de consulta fracamente consistente, o que é benéfico para aproveitar o cache de consultas.
Afinidade por ID de sessão As consultas com o mesmo hash de ID de sessão são roteadas para o mesmo cabeçalho de consulta fracamente consistente, garantindo uma execução consistente dentro de uma sessão.

Afinidade por banco de dados

A afinidade por modo de banco de dados garante que as consultas em execução no mesmo banco de dados sejam executadas na mesma versão do banco de dados, embora não necessariamente na versão mais recente do banco de dados. Esse modo é útil para garantir que a execução consistente em um banco de dados específico seja importante. Porém, Há um desequilíbrio no número de consultas entre bancos de dados, então esse modo pode resultar em distribuição de carga desigual.

Afinidade por texto de consulta

A afinidade pelo modo de texto de consulta é benéfica quando as consultas aproveitam o cache de resultados da consulta. Esse modo roteia consultas repetidas executadas com frequência pela mesma identidade para o mesmo cabeçalho de consulta, permitindo que elas se beneficiem dos resultados armazenados em cache e reduzindo a carga no cluster.

Afinidade por ID de sessão

A afinidade por modo de ID de sessão garante que as consultas pertencentes à mesma atividade de usuário ou sessão sejam executadas na mesma versão do banco de dados, embora não necessariamente a mais recente. Para usar esse modo, a ID da sessão precisa ser explicitamente especificada nas propriedades de solicitação do cliente de cada consulta. Esse modo é útil em cenários em que a execução consistente em uma sessão é essencial.

Como especificar a consistência da consulta

Você pode especificar o modo de consistência da consulta pelo cliente que envia a solicitação ou usando uma diretiva do lado do servidor. Se não for especificado por nenhum dos dois, o modo padrão de consistência forte será aplicado.

  • Cliente que envia a solicitação: use a propriedade de solicitação do queryconsistency cliente. Esse método define o modo de consistência de consulta para uma consulta específica e não afeta o modo de consistência efetiva geral, que é determinado pelo padrão ou pela política do lado do servidor. Para obter mais informações, consulte Propriedades de solicitação do cliente.

  • Política do lado do servidor: use a QueryConsistency propriedade da política de consistência de consulta. Esse método define o modo de consistência de consulta no nível do grupo de carga de trabalho, o que elimina a necessidade de os usuários especificarem o modo de consistência em suas propriedades de solicitação de cliente e permite impor os modos de consistência desejados. Para obter mais informações, consulte Política de consistência de consulta.

Observação

Se estiver usando o Kusto .NET SDK, você poderá definir a consistência da consulta por meio da cadeia de conexão. Essa configuração será aplicada a todas as consultas enviadas por meio dessa cadeia de conexão específica. Para obter mais informações, consulte Propriedades da cadeia de conexão.

  • Para personalizar parâmetros para consultas em execução com consistência fraca, use a política Consistência fraca da consulta.