Cache de resultados da consulta
Aplica-se a: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft 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:
- A consulta faz referência a uma tabela que tem a política RestrictedViewAccess habilitada.
- A consulta faz referência a uma tabela que tem a política RowLevelSecurity habilitada.
- A consulta usa qualquer uma das seguintes funções:
- A consulta acessa uma tabela externa ou dados externos.
- A consulta usa o operador de plug-in evaluate.
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 stringServerCache
- 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 comotrue
, 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 cache
o , as mesmas políticas de capacidade e remoção se aplicam.
Sintaxe
set
query_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