Partilhar via


Cache de resultados da consulta

Aplica-se a: ✅Microsoft FabricAzure Data ExplorerAzure MonitorMicrosoft Sentinel

Kusto inclui um cache de resultados de consulta. Você pode optar por obter resultados armazenados em cache ao emitir uma consulta. Você terá um melhor desempenho de consulta e menor consumo de recursos se os resultados da consulta puderem ser retornados pelo cache. No entanto, este desempenho surge à custa de algum "estagnação" nos resultados.

Usar o cache

Defina a opção query_results_cache_max_age 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 intervalo 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 somente para consultas consideradas "idênticas" a uma consulta anterior armazenada em cache. Duas consultas sã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 para o mesmo banco de dados.
  • As duas consultas compartilham as mesmas propriedades de solicitação de cliente . As seguintes propriedades são ignoradas para fins de cache:
    • ClientRequestId
    • Aplicação
    • Utilizador

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 não for possível encontrar um resultado armazenado em cache que satisfaça as restrições de tempo ou se 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 servidos a partir do cache? Ao responder a uma consulta, Kusto envia outro ExtendedProperties tabela de resposta que inclui uma coluna Key e uma coluna Value. Os resultados da consulta em cache terão outra linha anexada a essa tabela:

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

Consistência da consulta

As consultas que usam de consistência fraca podem ser processadas em diferentes nós de cluster. O cache não é compartilhado por nós de cluster, cada nó tem um cache dedicado em seu próprio armazenamento privado. Portanto, se duas consultas idênticas aterrissarem em nós diferentes, a consulta será executada e armazenada em cache em ambos os nós. Ao definir a consistência da consulta como affinitizedweakconsistency, você pode garantir que consultas de consistência fraca que são idênticas aterrissem no mesmo cabeçalho de consulta e, assim, aumentar a taxa de acertos do cache. Isto não é relevante quando se utiliza consistência forte.

Gestão

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

  • Mostrar cache de resultados de consulta: Retorna estatísticas relacionadas ao cache de resultados da consulta.
  • Limpar cache de resultados de consulta: Limpa o cache de resultados de 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 de 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 via objeto ClientRequestProperties. A propriedade não pode fazer parte de uma instrução 'set'.

Capacidade

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

Cache de resultados de consulta em nível de estilhaço

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

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

Sintaxe

set query_results_cache_per_shard; de consulta

Observação

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

Saiba mais sobre convenções de sintaxe.

Exemplo

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