Partage via


Cache des résultats de requête

Kusto inclut un cache de résultats de requête. Vous pouvez choisir d’obtenir des résultats mis en cache lors de l’émission d’une requête. Vous obtiendrez de meilleures performances de requête et réduire la consommation des ressources si les résultats de votre requête peuvent être retournés par le cache. Toutefois, cette performance est au détriment d’une « obsolescence » dans les résultats.

Utiliser le cache

Définissez l’option query_results_cache_max_age dans le cadre de la requête pour utiliser le cache des résultats de la requête. Vous pouvez définir cette option dans le texte de la requête ou en tant que propriété de requête cliente. Par exemple :

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

La valeur d’option est une timespan valeur qui indique l'« âge » maximal du cache de résultats, mesuré à partir de l’heure de début de la requête. Au-delà de l’intervalle de temps défini, l’entrée du cache est obsolète et ne sera pas utilisée à nouveau. La définition d’une valeur de 0 équivaut à ne pas définir l’option.

Compatibilité entre les requêtes

Requêtes identiques

Le cache des résultats de la requête retourne uniquement les résultats des requêtes considérées comme « identiques » à une requête mise en cache précédente. Deux requêtes sont considérées comme identiques si toutes les conditions suivantes sont remplies :

  • Les deux requêtes ont la même représentation (que les chaînes UTF-8).
  • Les deux requêtes sont effectuées dans la même base de données.
  • Les deux requêtes partagent les mêmes propriétés de requête client. Les propriétés suivantes sont ignorées à des fins de mise en cache :

Requêtes incompatibles

Les résultats de la requête ne seront pas mis en cache si l’une des conditions suivantes est remplie :

Aucune entrée de cache valide

Si un résultat mis en cache satisfaisant les contraintes de temps n’a pas pu être trouvé, ou s’il n’existe pas de résultat mis en cache à partir d’une requête « identique » dans le cache, la requête est exécutée et ses résultats mis en cache, tant que :

  • L’exécution de la requête se termine correctement et
  • La taille des résultats de la requête ne dépasse pas 16 Mo.

Résultats du cache

Comment le service indique-t-il que les résultats de la requête sont servis à partir du cache ? Lorsque vous répondez à une requête, Kusto envoie une autre table de réponses ExtendedProperties qui inclut une Key colonne et une Value colonne. Les résultats de requête mis en cache ont une autre ligne ajoutée à cette table :

  • La colonne de Key la ligne contiendra la chaîne ServerCache
  • La colonne de la ligne contient un conteneur de Value propriétés avec deux champs :
    • OriginalClientRequestId- Spécifie le ClientRequestId de la requête d’origine.
    • OriginalStartedOn - Spécifie l’heure de début de l’exécution de la requête d’origine.

Distribution

Le cache n’est pas partagé par les nœuds de cluster. Chaque nœud a un cache dédié dans son propre stockage privé. Si deux requêtes identiques atterrissent sur des nœuds différents, la requête est exécutée et mise en cache sur les deux nœuds. Ce processus peut se produire si la cohérence faible est utilisée. En définissant la cohérence affinitizedweakconsistencydes requêtes sur , vous pouvez avoir des requêtes de cohérence faible qui sont identiques sur la même tête de requête, et donc augmenter le taux d’accès au cache.

Gestion

Les commandes de gestion et d’observabilité suivantes sont prises en charge :

  • Afficher le cache des résultats de la requête : retourne des statistiques liées au cache des résultats de la requête.
  • Effacer le cache des résultats de requête : efface le cache des résultats de requête.
  • Actualiser l’entrée du cache de requête : une entrée de cache de requête spécifique peut être actualisée à l’aide query_results_cache_force_refresh de la propriété de requête client (OptionQueryResultsCacheForceRefresh). Lorsque la valeur est définie true, cette commande force le cache des résultats de requête à être actualisé également lorsqu’un cache existant est présent. Ce processus est utile dans les scénarios qui nécessitent que les résultats des requêtes soient disponibles pour l’interrogation. Cette propriété doit être utilisée en combinaison avec « query_results_cache_max_age » et envoyée via l’objet ClientRequestProperties. La propriété ne peut pas faire partie d’une instruction 'set'.

Capacité

La capacité de cache est actuellement fixe à 1 Go par nœud de cluster. La stratégie d’éviction est LRU.

Cache des résultats de requête au niveau des partitions

Vous pouvez utiliser le cache des résultats de requête au niveau des partitions pour les scénarios qui nécessitent les résultats les plus à jour, tels qu’un tableau de bord en direct. Par exemple, une requête qui s’exécute toutes les 10 secondes et s’étend sur les 1 dernières heures peut tirer parti de la mise en cache des résultats de requête intermédiaires au niveau du stockage (partition). Le cache des résultats de requête au niveau de la partition est automatiquement activé lorsque celui-ci Query results cache est en cours d’utilisation. Étant donné qu’il partage le même cache que Query results cache, les mêmes stratégies de capacité et d’éviction s’appliquent.

Syntaxe

setquery_results_cache_per_shard; ; Requête

Remarque

Cette option peut être définie dans le texte de la requête ou en tant que propriété de requête cliente.

En savoir plus sur les conventions de syntaxe.

Exemple

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