Caché de resultados de consulta

Kusto incluye una caché de resultados de consulta. Puede elegir 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:

Consultas incompatibles

Los resultados de la consulta no se almacenarán en caché si se cumple alguna de las condiciones siguientes:

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 almacenados en caché tendrán otra fila anexada a esa tabla:

  • La columna de Key la fila contendrá la cadena. ServerCache
  • La columna de Value la fila contendrá un contenedor de propiedades con dos campos:
    • OriginalClientRequestId : especifica el ClientRequestId de la solicitud original.
    • OriginalStartedOn : especifica la hora de inicio de ejecución de la solicitud original.

Distribución

Los nodos del 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 nodos diferentes, 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 affinitizedweakconsistencylas 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 la consulta: devuelve estadísticas relacionadas con la caché de resultados de la consulta.
  • Borrar caché de resultados de la 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 establece trueen , este comando forzará que la caché de resultados de la consulta se actualice 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

La caché de resultados de la consulta es eficaz cuando la misma consulta se ejecuta varias veces en sucesión rápida y puede tolerar la devolución de datos ligeramente antiguos. Sin embargo, algunos escenarios, como un panel activo, requieren los resultados más actualizados.

Por ejemplo, una consulta que se ejecuta cada 10 segundos y abarca las últimas 1 hora puede beneficiarse de almacenar en caché 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.

Syntax

setquery_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.

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