Caché de resultados de consulta
Se aplica a: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
Kusto incluye una caché de resultados de consulta. Puede optar por obtener resultados almacenados en caché al emitir una consulta. Experimentará un mejor rendimiento de las consultas y reducirá el consumo de recursos si la memoria caché puede devolver los resultados de la consulta. Sin embargo, este rendimiento se produce a costa de una "obsolescencia" en los resultados.
Uso de la caché
Establezca la query_results_cache_max_age
opción como parte de la consulta para usar la caché de resultados de la consulta. Puede establecer esta opción en el texto de la consulta o como una propiedad de solicitud de cliente. Por ejemplo:
set query_results_cache_max_age = time(5m);
GithubEvent
| where CreatedAt > ago(180d)
| summarize arg_max(CreatedAt, Type) by Id
El valor de opción es un timespan
valor que indica la "antigüedad" máxima de la memoria caché de resultados, medida a partir de la hora de inicio de la consulta. Más allá del intervalo de tiempo establecido, la entrada de caché está obsoleta y no se volverá a usar. Establecer un valor de 0 equivale a no establecer la opción .
Compatibilidad entre consultas
Consultas idénticas
La caché de resultados de la consulta devuelve resultados solo para las consultas que se consideran "idénticas" a una consulta almacenada en caché anterior. Dos consultas se consideran idénticas si se cumplen todas las condiciones siguientes:
- Las dos consultas tienen la misma representación (que las cadenas UTF-8).
- Las dos consultas se realizan en la misma base de datos.
- Las dos consultas comparten las mismas propiedades de solicitud de cliente. Las siguientes propiedades se omiten con fines de almacenamiento en caché:
- ClientRequestId
- Application
- Usuario
Consultas incompatibles
Los resultados de la consulta no se almacenarán en caché si se cumple alguna de las condiciones siguientes:
- La consulta hace referencia a una tabla que tiene habilitada la directiva RestrictedViewAccess .
- La consulta hace referencia a una tabla que tiene habilitada la directiva RowLevelSecurity .
- La consulta usa cualquiera de las funciones siguientes:
- La consulta tiene acceso a una tabla externa o a datos externos.
- La consulta usa el operador evaluate plugin .
No hay ninguna entrada de caché válida
Si no se encontró un resultado almacenado en caché que satisfaga las restricciones de tiempo o no hay un resultado almacenado en caché de una consulta "idéntica" en la memoria caché, la consulta se ejecutará y sus resultados se almacenarán en caché, siempre y cuando:
- La ejecución de la consulta se completa correctamente y
- El tamaño de los resultados de la consulta no supera los 16 MB.
Resultados de la memoria caché
¿Cómo indica el servicio que los resultados de la consulta se sirven desde la memoria caché?
Al responder a una consulta, Kusto envía otra tabla de respuesta ExtendedProperties que incluye una Key
columna y una Value
columna.
Los resultados de la consulta almacenadas en caché tendrán otra fila anexada a esa tabla:
- La columna de
Key
la fila contendrá la cadena.ServerCache
- La columna de la
Value
fila contendrá un contenedor de propiedades con dos campos:OriginalClientRequestId
: especifica clientRequestId de la solicitud original.OriginalStartedOn
: especifica la hora de inicio de ejecución de la solicitud original.
Distribución
Los nodos de clúster no comparten la memoria caché. Cada nodo tiene una caché dedicada en su propio almacenamiento privado. Si dos consultas idénticas llegan a distintos nodos, la consulta se ejecutará y almacenará en caché en ambos nodos. Este proceso puede ocurrir si se usa una coherencia débil. Al establecer la coherencia de affinitizedweakconsistency
las consultas en , puede tener consultas de coherencia débil que sean idénticas en el mismo encabezado de consulta y, por tanto, aumentar la tasa de aciertos de caché.
Administración
Se admiten los siguientes comandos de administración y observabilidad:
- Mostrar caché de resultados de consulta: devuelve estadísticas relacionadas con la caché de resultados de la consulta.
- Borrar caché de resultados de consulta: borra la caché de resultados de la consulta.
- Actualizar entrada de caché de consultas: se puede actualizar una entrada de caché de consultas específica mediante
query_results_cache_force_refresh
la propiedad de solicitud de cliente (OptionQueryResultsCacheForceRefresh). Cuando se establecetrue
en , este comando forzará la actualización de la caché de resultados de la consulta también cuando haya una caché existente. Este proceso es útil en escenarios que requieren que los resultados de las consultas estén disponibles para realizar consultas. Esta propiedad debe usarse en combinación con "query_results_cache_max_age" y enviarse a través del objeto ClientRequestProperties. La propiedad no puede formar parte de una instrucción 'set'.
Capacity
La capacidad de caché se fija actualmente en 1 GB por nodo de clúster. La directiva de expulsión es LRU.
Caché de resultados de consulta de nivel de partición
Puede usar la caché de resultados de consulta de nivel de partición para escenarios que requieran los resultados más actualizados, como un panel activo. Por ejemplo, una consulta que se ejecuta cada 10 segundos y abarca las últimas 1 hora puede beneficiarse del almacenamiento en caché de los resultados de la consulta intermedia en el nivel de almacenamiento (partición).
La caché de resultados de la consulta de nivel de partición se habilita automáticamente cuando Query results cache
está en uso. Dado que comparte la misma memoria caché que Query results cache
, se aplican las mismas directivas de capacidad y expulsión.
Sintaxis
set
query_results_cache_per_shard
; Consulta
Nota:
Esta opción se puede establecer en el texto de la consulta o como una propiedad de solicitud de cliente.
Obtenga más información sobre las convenciones de sintaxis.
Ejemplo
set query_results_cache_per_shard;
GithubEvent
| where CreatedAt > ago(180d)
| summarize arg_max(CreatedAt, Type) by Id