Cache des résultats de requête
S’applique à : ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
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 :
- ClientRequestId
- Application
- Utilisateur
Requêtes incompatibles
Les résultats de la requête ne seront pas mis en cache si l’une des conditions suivantes est remplie :
- La requête fait référence à une table sur laquelle la stratégie RestrictedViewAccess est activée.
- La requête fait référence à une table sur laquelle la stratégie RowLevelSecurity est activée.
- La requête utilise l’une des fonctions suivantes :
- La requête accède à une table externe ou à des données externes.
- La requête utilise l’opérateur d’évaluation du plug-in .
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îneServerCache
- 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 affinitizedweakconsistency
des 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éfinietrue
, 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
set
query_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