Compartilhar via


Cache de resultados da consulta

Aplica-se a: ✅Microsoft FabricAzure Data Explorer✅Azure MonitorMicrosoft Sentinel

Kusto inclui um cache de resultados de consulta. Você pode optar por obter resultados armazenados em cache ao emitir uma consulta. Você experimentará melhor desempenho de consulta e menor consumo de recursos se os resultados da consulta puderem ser retornados pelo cache. No entanto, esse desempenho vem às custas de alguma "obsolescência" nos resultados.

Usar o cache

Defina a query_results_cache_max_age opção como parte da consulta para usar o cache de resultados da consulta. Você pode definir essa opção no texto da consulta ou como uma propriedade de solicitação do cliente. Por exemplo:

set query_results_cache_max_age = time(5m);
GithubEvent
| where CreatedAt > ago(180d)
| summarize arg_max(CreatedAt, Type) by Id

O valor da opção é um timespan que indica a "idade" máxima do cache de resultados, medida a partir da hora de início da consulta. Além do período de tempo definido, a entrada de cache está obsoleta e não será usada novamente. Definir um valor de 0 equivale a não definir a opção.

Compatibilidade entre consultas

Consultas idênticas

O cache de resultados da consulta retorna resultados apenas para consultas consideradas "idênticas" a uma consulta armazenada em cache anterior. Duas consultas serão consideradas idênticas se todas as seguintes condições forem atendidas:

  • As duas consultas têm a mesma representação (como cadeias de caracteres UTF-8).
  • As duas consultas são feitas no mesmo banco de dados.
  • As duas consultas compartilham as mesmas propriedades de solicitação do cliente. As seguintes propriedades são ignoradas para fins de cache:
    • ClientRequestId
    • Aplicativo
    • Usuário

Consultas incompatíveis

Os resultados da consulta não serão armazenados em cache se qualquer uma das seguintes condições for verdadeira:

Nenhuma entrada de cache válida

Se um resultado armazenado em cache que satisfaça as restrições de tempo não puder ser encontrado ou não houver um resultado armazenado em cache de uma consulta "idêntica" no cache, a consulta será executada e seus resultados armazenados em cache, desde que:

  • A execução da consulta é concluída com êxito e
  • O tamanho dos resultados da consulta não excede 16 MB.

Resultados do cache

Como o serviço indica que os resultados da consulta estão sendo atendidos a partir do cache? Ao responder a uma consulta, o Kusto envia outra tabela de resposta ExtendedProperties que inclui uma Key coluna e uma Value coluna. Os resultados da consulta em cache terão outra linha anexada a essa tabela:

  • A coluna da Key linha conterá a string ServerCache
  • A coluna da Value linha conterá um recipiente de propriedades com dois campos:
    • OriginalClientRequestId- Especifica o ClientRequestId da solicitação original.
    • OriginalStartedOn - Especifica a hora de início da execução da solicitação original.

Distribuição

O cache não é compartilhado por nós de cluster. Cada nó tem um cache dedicado em seu próprio armazenamento privado. Se duas consultas idênticas chegarem a nós diferentes, a consulta será executada e armazenada em cache em ambos os nós. Esse processo pode acontecer se for usada consistência fraca. Ao definir a consistência da consulta como affinitizedweakconsistency, você pode ter consultas de consistência fraca idênticas no mesmo cabeçalho de consulta e, assim, aumentar a taxa de acertos do cache.

Gerenciamento

Os seguintes comandos de gerenciamento e observabilidade são suportados:

  • Mostrar cache de resultados da consulta: retorna estatísticas relacionadas ao cache de resultados da consulta.
  • Limpar cache de resultados da consulta: limpa o cache de resultados da consulta.
  • Atualizar entrada de cache de consulta: uma entrada de cache de consulta específica pode ser atualizada usando query_results_cache_force_refresh (OptionQueryResultsCacheForceRefresh)propriedade de solicitação do cliente. Quando definido como true, esse comando forçará o cache de resultados da consulta a ser atualizado também quando um cache existente estiver presente. Esse processo é útil em cenários que exigem que os resultados das consultas estejam disponíveis para consulta. Essa propriedade deve ser usada em combinação com 'query_results_cache_max_age' e enviada por meio do objeto ClientRequestProperties. A propriedade não pode fazer parte de uma instrução 'set'.

Capacity

Atualmente, a capacidade do cache está fixada em 1 GB por nó de cluster. A política de despejo é LRU.

Cache de resultados da consulta no nível do fragmento

Você pode usar o cache de resultados de consulta no nível do fragmento para cenários que exigem os resultados mais atualizados, como um painel dinâmico. Por exemplo, uma consulta que é executada a cada 10 segundos e abrange a última 1 hora pode se beneficiar do cache de resultados de consulta intermediários no nível de armazenamento (fragmento).

O cache de resultados da consulta no nível do fragmento é habilitado automaticamente quando o Query results cache está em uso. Como ele compartilha o mesmo cache que Query results cacheo , as mesmas políticas de capacidade e remoção se aplicam.

Sintaxe

setquery_results_cache_per_shard; Consulta

Observação

Essa opção pode ser definida no texto da consulta ou como uma propriedade de solicitação do cliente.

Saiba mais sobre as convenções de sintaxe.

Exemplo

set query_results_cache_per_shard;
GithubEvent
| where CreatedAt > ago(180d)
| summarize arg_max(CreatedAt, Type) by Id